logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll

hook_menu Drupal 7 kreiranje stranica kroz modul

26/05/2025, by Ivan

U prethodnoj lekciji smo videli kako prikazati informacije iz baze podataka koristeći Drupal API, tačnije hook-ove hook_block_info() i hook_block_view(). U ovoj lekciji ćemo prikazivati stranice, odnosno pomoću hook_menu ćemo povezati stranicu sa drugim delovima Drupala: menijima, modulima za prevod, šablonima itd.

Počnimo jednostavno — prikazaćemo stranicu sa naslovima poslednjih 10 vesti i njihovim opisima. Napravićemo mali feed vesti. Koristićemo hook_menu(). Ispod je njegovo objašnjenje, a zatim ćemo ga koristiti.

hook_menu()

Definiše stavku menija i vraća stranicu.

Ovaj hook koji se poziva u modulu registruje putanju kojom će Drupal upravljati. Putanje mogu biti samo za obradu ili mogu biti smeštene u meni, npr. navigacioni meni. Putanja i povezane informacije se nazivaju stavka menija (menu router item). Hook se retko poziva (npr. kada se uključi modul) i rezultat se kešira u bazi podataka, zato treba čistiti keš kada se menja hook u modulu.

hook_menu() vraća asocijativni niz gde su ključevi putanje, a vrednosti su asocijativni nizovi sa svojstvima putanje (opisano ispod).

Definicija za svaku putanju uključuje vraćenu stranicu koja se prikazuje kada se ta putanja pozove. Ako nema drugih pod-URL-ova, vraća se stranica. Na primer, vaš modul može registrovati put 'abc/def'.

<?php   

function mymodule_menu() {
    $items['abc/def'] = array(
      'page callback' => 'mymodule_abc_view',
    );
    return $items;
}
function mymodule_abc_view($ghi = 0, $jkl = '') {
    // ...
}
?>

Kada se pozove put 'abc/def' bez dodatnih segmenata, neće biti prosleđeni dodatni argumenti. Kada se pozove 'abc/def/1/Omsk', funkcija prima argumente "1" i "Omsk". Ovo je korisno pri pravljenju šablona stranica.

Dodatni argumenti se mogu definisati kao asocijativni niz. Lista može sadržati složene ili proste numeričke argumente. Kada su brojevi korišćeni, odgovarajući poziv funkcije (page callback) će dobiti broj kao argument. Na primer, prvi argument je arg(0), drugi arg(1), itd.

<?php   

function mymodule_menu() {
    $items['abc/def'] = array(
      'page callback' => 'mymodule_abc_view',
      'page arguments' => array(1, 'foo'),
    );
    return $items;
}
?>

Kada se pozove 'abc/def', stranica će primiti 'def' kao prvi argument i 'foo' kao drugi argument. Detaljan opis hook-a možete naći na: http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_menu/7

Napravimo jednostavnu stranicu:

function sitemade_menu(){
    $items = array(); // inicijalizujemo niz menija
     
    $items['page_example'] = array(  // dodajemo stranicu na putanji 'page_example'
      'title' => 'Primer stranice', // naslov stranice
      'description' => 'Obična stranica', // opis stranice
      'page callback' => '_page_example', // funkcija koja vraća sadržaj stranice
      'access callback' => TRUE, // svima dozvoljen pristup
      'expanded' => TRUE,
  );    
     
    return $items; // vraćamo listu stranica
}
 
function _page_example($content = NULL) {
    $content = ''; // inicijalizujemo prazan sadržaj
    $query = db_select('node_revision', 'n'); // biramo tabelu node_revision gde su trenutne revizije dokumenata
    $query->innerJoin('field_revision_body', 'b', 'b.revision_id = n.vid'); // pridružujemo tabelu field_revision_body gde je body
    $query->innerJoin('node', 'd', 'n.nid=d.nid'); // pridružujemo tabelu node gde je title noda
    $query->fields('n', array('title'), array('nid'), array('vid')); // biramo polja
    $query->fields('b', array('body_value'));
    $query->condition('d.type', 'news'); // filtriramo po tipu sadržaja
    $query->orderBy('n.timestamp', 'DESC'); // sortiramo najnovije vesti prvo
    $query->range(0, 10); // biramo poslednjih 10
    $result = $query->execute(); // izvršavamo upit
    while($nodes = $result->fetch()){ // obrađujemo rezultat
        $content .= '<h3>' . $nodes->title . '</h3>'; // prikazujemo naslov
        $content .= $nodes->body_value; // prikazujemo body
    }
 
    return $content; // vraćamo sadržaj
}

Možemo koristiti svojstvo hook-a type da postavimo gde će se stranica pojaviti u meniju, npr. u admin panelu ili glavnom meniju.

Dodajmo ovo:

function sitemade_menu(){
    $items = array(); // inicijalizujemo niz menija
     
    $items['page_example'] = array(  // dodajemo stranicu na putanji 'page_example'
      'title' => 'Primer stranice', // naslov stranice
      'description' => 'Obična stranica', // opis stranice
      'page callback' => '_page_example', // funkcija koja vraća sadržaj stranice
      'access callback' => TRUE, // svima dozvoljen pristup
      'expanded' => TRUE,
      'type' => MENU_NORMAL_ITEM,
      'menu_name' => 'main-menu',
  );    
    return $items; // vraćamo listu stranica
}

Očistimo keš i sada će se pojaviti link ka stranici u meniju.

Add menu

Osim običnih menija, možemo dodati i prikaz stranice u Drupal admin panel:

function sitemade_menu(){
    $items = array(); // inicijalizujemo niz menija    
    $items['admin/config/content/page_example'] = array(  // dodajemo stranicu na putanji 'admin/config/content/page_example'
      'title' => 'Primer stranice', // naslov stranice
      'description' => 'Obična stranica', // opis stranice
      'page callback' => '_page_example', // funkcija koja vraća sadržaj stranice
      'access arguments' => array('administer site configuration'), // prava pristupa za admina
  );    
    return $items; // vraćamo listu stranica
}

Sada se stranica prikazuje samo adminu i link ka njoj je u admin panelu:

Drupal add menu page

Link se pojavljuje jer Drupal automatski dodaje link za putanje koje počinju sa admin/config/content/*. Ako stavite putanju admin/config/people/*, link će se pojaviti u bloku Korisnici (umesto zvezdice možete staviti sopstveno ime, kao kod nas page_example).

Sada znamo kako praviti blokove i stranice, mislim da su ovo osnovni hook-ovi za prikaz sadržaja koji će se često koristiti u vašim modulima.

U sledećoj lekciji ćemo proučiti hook_perm() za kreiranje novih dozvola za korisnike.