Dodati konfiguracionu formu za blok
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.