Drupal 7 hook_block_info() i hook_block_view() prikazujemo informacije u bloku
U prethodnoj lekciji smo napravili modul za Drupal 7, a sada ćemo proširiti njegovu funkcionalnost. Dodamo prikaz bloka preko hook-ova hook_block_view() i hook_block_info(). U ovom bloku prikazaćemo informacije o poslednjim korisnicima na sajtu sa linkom ka njihovoj stranici.
Počnimo sa opisom hook_block_info():
Ovaj hook definiše sve blokove koje modul kreira.
On govori Drupalu koje blokove modul može prikazivati i može opisati podešavanja prikaza bloka.
U hook_block_info() svaki blok modula dobija jedinstveni identifikator "delta" (ključ u asocijativnom nizu koji se vraća). Delta mora biti jedinstvena unutar modula i koristi se za sledeće:
- Prosleđuje se kao argument drugim hook-ovima za identifikaciju bloka koji se konfiguriše i prikazuje.
- Koristi se za kreiranje HTML šablona bloka "block-MODULE-DELTA" koji Drupal primenjuje na svaki blok. Ovo omogućava lakše pisanje CSS i JavaScript koda.
- Koristi se za definisanje funkcija za temizaciju block__MODULE__DELTA za naprednu temizaciju.
- Koristi se za identifikaciju bloka u hook_block_info_alter() i drugim hook-ovima.
Delta može biti string ili broj, maksimalne dužine 32 bajta.
Vraćene vrednosti
Asocijativni niz gde su ključevi delta svake blok stavke, a vrednosti su opisi blokova. Opis svakog bloka je asocijativni niz sa sledećim ključ-vrednost parovima:
'info': (obavezno) Naziv bloka za admin panel. Ova informacija se koristi za identifikaciju bloka u admin delu "blokovi" i ne prikazuje se na front-endu sajta.
'cache': (opciono) Opis ponašanja keširanja bloka. Drupal podržava sledeće:
- DRUPAL_CACHE_PER_ROLE (podrazumevano): Blok može da se menja zavisno od uloge korisnika koji gleda stranicu.
- DRUPAL_CACHE_PER_USER: Blok može da se menja za svakog korisnika posebno.
- DRUPAL_CACHE_PER_PAGE: Blok može da se menja zavisno od strane sajta.
- DRUPAL_CACHE_GLOBAL: Blok je isti za sve korisnike i stranice.
DRUPAL_NO_CACHE: Blok se ne kešira.
'properties': (opciono) Niz dodatnih meta-podataka za blok.
Najčešća svojstva uključuju:
- 'administrative': Boolean koji opisuje da li će blok biti korišćen u administrativnom kontekstu.
- 'weight': (opciono) Inicijalna vrednost težine bloka.
- 'status': (opciono) Početni status (1 = uključen, 0 = isključen).
- 'region': (opciono) Početni region gde je blok smešten.
- 'visibility': (opciono) Početna vidljivost bloka:
- BLOCK_VISIBILITY_NOTLISTED: Prikazivati na svim stranicama osim navedenih.
- BLOCK_VISIBILITY_LISTED: Prikazivati samo na navedenim stranicama.
- BLOCK_VISIBILITY_PHP: Koristiti prilagođeni PHP kod za vidljivost.
- 'pages': (opciono) Lista URL putanja za vidljivost bloka.
Dodajmo jedan blok kroz hook:
<?php function sitemade_block_info(){ $blocks = array(); $blocks[1]['info'] = 'Spisak korisnika'; return $blocks; } ?>
Blok bi trebalo da se pojavi u admin panelu, dodajmo ga u levi sidebar:
Sada kada je blok dodat, prikažimo njegov sadržaj preko hook-a hook_block_view().
hook_block_view($delta = '')
:
Parametri
$delta - pokazuje koji blok se obrađuje u hook-u. To je jedinstveni identifikator bloka u modulu, definisan u hook_block_info().
Vraćena vrednost
Niz sa sledećim elementima:
subject: Naslov bloka (prevod). Ako blok nema naslov, vraća NULL.
content: Sadržaj bloka. Može biti obrađeni niz (poželjno) ili string sa HTML-om.
Dodajmo hook:
<?php function sitemade_block_view($delta = ''){ $block = array(); // inicijalizujemo prazan niz za blok switch ($delta){ case 1: // ista delta kao u hook_block_info() $block['subject'] = 'Korisnici'; // naslov bloka $block['content'] = ''; // inicijalizujemo string promenljivu $query = db_select('users', 'u') // upit za izbor korisnika ->fields('u', array('uid', 'name')) // biramo polja ->orderBy('u.uid', 'DESC') // sortiramo opadajuće ->range(0, 5) // biramo pet korisnika ->execute(); // izvršavamo upit $users = $query->fetchAll(PDO::FETCH_ASSOC); // dobijamo rezultat kao niz foreach($users as $user){ $block['content'] .= '<div><a href="' . base_path() . 'user/' . $user['uid'] . '">' . $user['name'] . '</a></div>'; // base_path() vraća putanju do korena sajta } break; } return $block; } ?>
Rezultat je lista poslednjih 5 registrovanih korisnika na sajtu, prikazana kao linkovi ka njihovim stranicama. Naravno, bolje je koristiti funkciju l() za linkove, ali o tome treba pisati posebnu temu.