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
20/06/2025, by Ivan

Menu

Sada recimo da želimo da dodamo mogućnost graditelju sajta da unese deo konfiguracije za svaki primerak našeg prilagođenog bloka. Uvek imajte na umu da se sve konfiguracije za gradnju sajta u Drupal 8 mogu eksportovati sa razvojne lokacije i importovati na produkcioni sajt (poznato kao Upravljanje konfiguracijom). Vi, kao sastavljač modula, takođe možete obezbediti podrazumevanu konfiguraciju za automatsko popunjavanje forme kada kreator sajta kreira novi blok.

U postojeću klasu HelloBlock sa prethodne strane dodajte ove "use" naredbe, odmah iza postojećih:

use Drupal\Core\Block\BlockPluginInterface;
use Drupal\Core\Form\FormStateInterface;

Izmenite deklaraciju klase da uključite ovu novu implementaciju "BlockPluginInterface":

class HelloBlock extends BlockBase implements BlockPluginInterface {

Zatim dodajte sledeći metod u klasu. Sličan, kompletan fajl se nalazi ovde, ali imajte u vidu da ime forme i imena konfiguracije ne odgovaraju ovom vodiču.

Ovaj kod će samo dodati formu, obrada forme i čuvanje rezultata će biti obrađeni na sledećim stranama.

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {
    $form = parent::blockForm($form, $form_state);

    $config = $this->getConfiguration();

    $form['hello_block_name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Who'),
      '#description' => $this->t('Who do you want to say hello to?'),
      '#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
    ];

    return $form;
  }

U ovom primeru forma se prvo definiše pozivanjem roditeljske klase pomoću sledeće instrukcije koda: $form = parent::blockForm($form, $form_state);. Zatim dodajemo novo polje u formu. Ovaj proces se naziva polimorfizmom i predstavlja jednu od važnih prednosti korišćenja metoda objektno-orijentisanog programiranja (OOP).

Zatim treba da kažemo Drupalu da sačuva vrednosti iz naše forme u konfiguraciju za ovaj blok. Evo primera:

  /**
   * {@inheritdoc}
   */
  public function blockSubmit($form, FormStateInterface $form_state) {
    parent::blockSubmit($form, $form_state);
    $values = $form_state->getValues();
    $this->configuration['hello_block_name'] = $values['hello_block_name'];
  }

Da biste pregledali formu, idite na ranije dodat primerak u admin -> Struktura -> Raspored blokova i kliknite na Konfiguriši za (Hello World) blok.

Ako želite da dodate još, pošaljite ih na istu formu.

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {
    $form = parent::blockForm($form, $form_state);

    $config = $this->getConfiguration();

    $form['hello_block_name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Who'),
      '#description' => $this->t('Who do you want to say hello to?'),
      '#default_value' => isset($config['hello_block_name']) ? $config['hello_block_name'] : '',
    ];

    $form['actions']['custom_submit'] = [
      '#type' => 'submit',
      '#name' => 'custom_submit',
      '#value' => $this->t('Custom Submit'),
      '#submit' => [[$this, 'custom_submit_form']],
    ];    

    return $form;
  }

Novi prilagođeni submit (slanje) akcija

  /**
   * Custom submit actions.
   */
  public function custom_submit_form($form, FormStateInterface $form_state) {
    $values = $form_state->getValues();
    // Izvršite potrebne radnje.
  }

 

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.