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

Drupal 7 hook_block_info() i hook_block_view() prikazujemo informacije u bloku

26/05/2025, by Ivan

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:

  1. Prosleđuje se kao argument drugim hook-ovima za identifikaciju bloka koji se konfiguriše i prikazuje.
  2. 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.
  3. Koristi se za definisanje funkcija za temizaciju block__MODULE__DELTA za naprednu temizaciju.
  4. 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:

drupal block

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.

Drupal list users