Kreirati blok u Drupal modulu programatski
Blokovi u Drupal 8 su instance blok plugina.
Menadžer blokova u Drupalu skenira vaše module tražeći klase koje sadrže @Block anotaciju.
Primer koda ispod koristi @Block anotaciju zajedno sa svojstvima „id“ i „admin_label“ za definisanje prilagođenog bloka.
Kreirajte fajl src/Plugin/Block/HelloBlock.php u strukturi modula koju ste ranije napravili i dodajte sledeći kod.
Da bi vaš Drupal sajt prepoznao ovu novu klasu, potrebno je da očistite keš.
<?php namespace Drupal\hello_world\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Pruža 'Hello' blok. * * @Block( * id = "hello_block", * admin_label = @Translation("Hello block"), * category = @Translation("Hello World"), * ) */ class HelloBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return [ '#markup' => $this->t('Hello, World!'), ]; } }
Da biste dodali „Hello block“, možete otići na Structure -> Block Layout (admin/structure/block) i kliknuti na dugme „Place block“ povezano sa svakim dostupnim regionom.
Kada kliknete na dugme „Place block“ za bilo koji region, pojaviće se iskačući dijalog „Place block“ sa listom svih dostupnih blokova. Da brzo pronađete svoj blok, jednostavno koristite opciju „Filter by block name“ ili skrolujte listu dok ne nađete „Hello block“. Tako možete dodati bilo koji broj instanci prilagođenog bloka bilo gde na vašem sajtu.
Rešavanje problema
- Ime klase i ime fajla moraju biti ista (klasa HelloBlock i /src/Plugin/Block/HelloBlock.php). Ako ime klase nije isto, blok će se pojaviti na listi dostupnih blokova, ali nećete moći da ga dodate.
- Obavezno dvaput proverite sve putanje i imena fajlova. Vaš .php fajl mora biti u ispravno označenom direktorijumu (/src/Plugin/Block/), inače Drupal neće moći da ga pronađe.
- Ako se blok ne prikazuje u regionu ili ako se javljaju greške na ekranu ili u logovima, proverite PHP/Apache error logove.
- Ako vaš blok nije na listi, obavezno očistite Drupal keš (npr. komandom drush cr).
- Proverite da ime vašeg modula koristi mala slova. Neki korisnici su prijavili da se blokovi ne prikazuju za module sa camelCase imenima. Na primer, myModule nikada neće prikazati određene blokove, dok my_module hoće. Ovo je testirano u Drupal 8.8.1.
Napomena: Korišćenje Twig šablona sa prilagođenim blokovima
1. Dodajte hook_theme u vaš .module fajl.
Napomena: nemojte imenovati funkciju kao 'block__...' jer to neće proslediti promenljive Twig šablonima blokova. Umesto toga koristite ime modula kao prefiks.
2. Koristite „#theme“ u render nizu u build() metodu i prosledite promenljive na istom nivou kao „#theme“ — sa ključevima „#varname“.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.