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

Najbolje prakse za Twig – funkcije i šabloni za prethodnu obradu

19/06/2025, by Ivan

Da biste postigli maksimalnu performansu teme u Drupal 8 i omogućili više opcija za prilagođavanje u Twig šablonima, sledite sledeće preporuke:

Ovaj vodič je pisan da pomogne Drupal programerima koji imaju iskustvo sa Drupal 7 i pokušavaju da izbace funkcije poput theme() ili drupal_render() koje se više ne koriste u Drupal 8+ verzijama. Primeri „pre“ su uglavnom u Drupal 7 stilu kodiranja.

Vraćanje render nizova iz funkcija prethodne obrade

Uvek vraćajte render nizove umesto da pozivate theme() ili drupal_render() u funkcijama prethodne obrade.

Twig automatski renderuje sadržaj, pa nema potrebe pozivati drupal_render() ili theme() u funkciji prethodne obrade. Render nizovi treba da se proslede u šablon jer pružaju mnogo više fleksibilnosti nego već renderovani HTML string.

Uklanjanje poziva theme() iz funkcije prethodne obrade:

// Pre - prosleđivanje renderovanog HTML stringa u šablon.
$variables['table'] = theme('table', ['header' => $header, 'rows' => $rows]);

// Posle - prosleđivanje render niza u šablon.
$variables['table'] = [
  '#theme' => 'table',
  '#header' => $header,
  '#rows' => $rows,
];

Uklanjanje poziva drupal_render() iz funkcije prethodne obrade znači samo uklanjanje poziva funkcije:

// Pre, nepotreban poziv drupal_render().
$variables['teaser'] = drupal_render($node_teaser);

// Posle, sa uklonjenim drupal_render().
$variables['teaser'] = $node_teaser;

Tipično je drupal_render() bio pozivan prilikom dodavanja u niz podataka za tabelu.

// Pre, nepotreban poziv drupal_render().
$row[] = drupal_render($display['title']);

// Posle, sa uklonjenim drupal_render().
$row[]['data'] = $display['title'];

Filtarski pozivi i pomoćne funkcije u šablonima

Iako render nizovi pružaju promenljivu, menjivu strukturu podataka na putu do šablona, nisu sve promenljive render nizovi. Da bi se omogućilo što duže prosleđivanje neobrađenih podataka u šablone, tvorci tema treba da pozivaju filtere kao što je t i pomoćne funkcije kao što je url() direktno u Twig šablonima. Pozivanje ovih funkcija u Twig šablonu, a ne u prethodnoj obradi, može smanjiti broj poziva funkcija jer promenljive koje se prosleđuju šablonu možda nikada neće biti ispisane.

Pre:

U funkciji prethodne obrade:

$variables['no_content_text'] = t('You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.', array('@create-content' => url('admin/structure/types/add')));

U šablonu:

<p>{{ no_content_text }}</p>

Posle:

U šablonu:

<p>{{ 'You have not created any content types yet. Go to the <a href="@create-content">content type creation page</a> to add a new content type.'|t({'@create-content': url('admin/structure/types/add')}) }}</p>

Prikazivanje/sakrivanje i uklanjanje drupal_render_children i element_children

Ako je hide() pozvan u izvornom šablonu, a drupal_render_children se koristio za renderovanje „ostalog“ sadržaja, potrebno je da se to razdvoji na zasebne promenljive tokom prethodne obrade.

Pre (PHPTemplate fajl):

<?php
hide($form['advanced']);
hide($form['actions']);
?>
<div class="layout-node-form clearfix">
<div class="layout-region layout-region-node-main">
<?php print drupal_render_children($form); ?>
</div>
<div class="layout-region layout-region-node-secondary">
<?php print render($form['advanced']); ?>
</div>
<div class="layout-region layout-region-node-footer">
<?php print render($form['actions']); ?>
</div>
</div>

Koristite Twig filter called „without“ da biste sakrili određene elemente. Možete ih normalno prikazivati gde god je potrebno.

Posle (Twig šablon):

<div class="layout-node-form clearfix">
  <div class="layout-region layout-region-node-main">
    {{ form|without('advanced', 'actions') }}
  </div>
  <div class="layout-region layout-region-node-secondary">
    {{ form.advanced }}
  </div>
  <div class="layout-region layout-region-node-footer">
    {{ form.actions }}
  </div>
</div>

Alternativni pristup (više nije potreban):

Prethodno obradite sve u zasebne promenljive i prosledite ih u šablon. Možda ćete morati da premestite stvari koje prikazujete u promenljive iz čitavog elementa (u ovom slučaju forme), pre nego što renderujete ostatak. Ispisujte sadržaj tačno kako je definisano u šablonu.

Pre (prethodna obrada):

function template_preprocess_node_edit_form(&$variables) {
  $form = $variables['form'];
  
  // @todo Ažurirajte kada se reši drupal.org/node/1920886.
  $variables['advanced'] = $form['advanced'];
  $variables['actions'] = $form['actions'];
  unset($form['advanced'], $form['actions']);
  $variables['form'] = drupal_render_children($form);
}

Posle (Twig šablon):

<div class="layout-node-form clearfix">
  <div class="layout-region layout-region-node-main">
    {{ form }}
  </div>
  <div class="layout-region layout-region-node-secondary">
    {{ advanced }}
  </div>
  <div class="layout-region layout-region-node-footer">
    {{ actions }}
  </div>
</div>

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.