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

9.3. Kreiranje prilagođenog Drupal modula. Programski prikaz stranice.

27/05/2025, by Ivan

Počnimo sa kreiranjem našeg modula sa malo reda. Nastavićemo sa razdvajanjem prilagođenih (custom) i doprinosa (contrib) modula. U Drupalu se moduli nalaze u /modules folderu. Sada ne treba da ih stavljamo duboko u /sites/all/modules, iako readme kaže da to treba da radi, ipak koristite /modules folder. Unutar /modules foldera napravićemo dva foldera: custom i contrib. U contrib folderu će biti dodatni moduli sa drupal.org, a naši prilagođeni moduli će biti u custom folderu.

Engleski titlovi:

Primere koda možete pogledati na github-u:

https://github.com/levmyshkin/drupalbook8

Deljenje modula na contrib i custom deluje kao sitnica, ali verujte, kada na sajtu imate 200 counter modula i 30 custom modula, shvatićete koliko je teško pronaći sve prilagođene module i sav prilagođeni kod. Takođe, ako menjate neki kod u plugin modulu (što treba raditi samo ako je apsolutno neophodno), bilo bi lepo da ga premestite u custom folder da ne biste slučajno prebrisali izmene prilikom ažuriranja (ili ih drugi programer prepiše, ili čak vi sami, ne sluteći).

modules

Napravimo sada naš prilagođeni modul. Kreirajte folder /modules/custom/drupalbook. U tom folderu treba da napravimo fajl drupalbook.info.yml:

name: DrupalBook
description: Custom module for learning Drupal 8
type: module
core: 8.x
core_version_requirement: ^8 || ^9
package: DrupalBook

* .info.yml fajl opisuje modul. Informacije u njemu će biti prikazane na strani Extend (Proširenja). Naziv fajla je ime modula + .info.yml.

Drupal YML fajlovi su standardni format za konfiguracije i podešavanja. Polja i vrednosti su odvojeni dvotačkom, novi red se uvlači sa dve razmake. Formatiranje je veoma važno, jer greške u uvlačenju ili nedostatak dvotačke mogu izazvati greške ili da se fajl ne učita kako treba.

Idite na stranicu Extend i aktivirajte vaš modul:

extend

Sada kad smo uključili modul, možemo dodati funkcionalnost. Za početak ćemo prikazati običan tekst na stranici. Da bismo to uradili, treba da napravimo još jedan YML fajl drupalbook.routing.yml:

drupalbook.first_page:
  path: '/first-page'
  defaults:
    _controller: '\Drupal\drupalbook\Controller\FirstPageController::content'
    _title: 'Hello World!'
  requirements:
    _permission: 'access content'

Detaljnije o ovom YML fajlu:

drupalbook.first_page: - naziv naše rute, po kome Drupal pravi listu svih ruta. Ime mora biti jedinstveno, najbolje je koristiti šemu modul_ime.naziv_rute, jer možete imati više ruta u jednom modulu, npr. drupalbook.first_page, drupalbook.second_page itd.

path: '/first-page' - putanja do vaše rute. Obratite pažnju na uvlačenje sa dve razmake, obavezno. Ako koristite editor koji umesto razmaka stavlja tab, bolje ga podesite da koristi dva razmaka.

defaults: - podrazumevana podešavanja rute i način njenog kreiranja. Postoji više načina za pravljenje rute, jedan je preko Controller klase, ali može biti i dinamički. Drupal routing koristi Symfony biblioteke. Symfony je MVC okvir, uredan i koristi se i u drugim projektima, npr. Laravel. MVC znači Model, View, Controller (View nije Drupal Views modul, već prikaz podataka, Model su entitetske klase za rad sa bazom, a Controller služi za rutiranje).

_controller: '\Drupal\drupalbook\Controller\FirstPageController::content' - ovde definišemo PHP klasu koja će prikazivati našu stranicu. Posle imena klase ide :: i metoda koja će prikazati stranicu. Više kosa crta služi da Drupal razume gde se tačno nalazi klasa.

_title: 'Hello World!' - naslov naše stranice.

_permission: 'access content' - dozvola za pristup stranici, korisnik mora imati ovu ulogu.

Nakon dodavanja routing YML fajla, potrebno je dodati PHP klasu za prikaz stranice. Važno je razumeti kako Drupal automatski učitava klase iz modula. Drupal koristi PSR-4 autoloading:
https://www.php-fig.org/psr/psr-4/

Pogledajmo liniju u ruti gde smo naveli PHP klasu:

\Drupal\drupalbook\Controller\FirstPageController
\Drupal - klasa se povezuje iz Drupal biblioteke, koja može biti instalirana i preko packagist:

https://packagist.org/packages/drupal/drupal

Zatim navodimo naš modul:

\drupalbook

Posle toga idemo do foldera gde se nalazi klasa, unutar src foldera, u našem slučaju Controller folder:

/modules/custom/drupalbook/src/Controller

Obratite pažnju na velika i mala slova, PHP razlikuje Controller i controller.

Na kraju, navedemo ime fajla sa .php ekstenzijom:

/modules/custom/drupalbook/src/Controller/FirstPageController.php

Napravimo sada taj fajl:

/**
 * @file
 * Contains \Drupal\drupalbook\Controller\FirstPageController.
 */
 
namespace Drupal\drupalbook\Controller;
 
/**
 * Pruža odgovore za rute modula DrupalBook.
 */
class FirstPageController {
 
  /**
   * Vraća jednostavnu stranicu.
   *
   * @return array
   *   Jednostavan niz za prikaz.
   */
  public function content() {
    $element = array(
      '#markup' => 'Hello World!',
    );
    return $element;
  }
 
}

Struktura fajlova bi trebalo da izgleda ovako:

contrib

Očistite keš da bi nova ruta proradila. Stranica bi trebalo da radi na adresi http://drupalbook/first-page:

drupalbook

Pogledajmo sada PHP klasu koja prikazuje ovu stranicu.

/**
 * @file
 * Contains \Drupal\drupalbook\Controller\FirstPageController.
 */

namespace Drupal\drupalbook\Controller;

class FirstPageController {

  /**
   * Vraća jednostavnu stranicu.
   *
   * @return array
   *   Jednostavan niz za prikaz.
   */
  public function content() {
    $element = [
      '#markup' => 'Hello World!',
    ];
    return $element;
  }

}

Ova klasa ima metodu content() koju smo naveli u drupalbook.routing.yml. Metoda vraća niz sa #markup elementom u kome je HTML za prikaz. Vraćamo niz, a ne string, jer ruta može prikazivati ne samo HTML, već i JSON API, XML ili CSV fajl.

Primere modula možete pronaći na github-u:

https://github.com/levmyshkin/drupalbook8

To je to za sada, u narednoj lekciji nastavićemo da proširujemo funkcionalnosti našeg modula.