logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll
20/06/2025, by Ivan

Menu

Nun wollen wir also die Möglichkeit hinzufügen, dass der Site Builder für jede Instanz unseres benutzerdefinierten Blocks einen Teil der Konfiguration eingibt. Denken Sie immer daran, dass alle Site-Building-Konfigurationen in Drupal 8 von der Entwicklungsseite exportiert und auf die Live-Seite importiert werden können (bekannt als Konfigurationsverwaltung). Als Modulbauer können Sie auch eine Standardkonfiguration bereitstellen, die das Formular automatisch ausfüllt, wenn der Site Builder einen neuen Block erstellt.

Fügen Sie in die vorhandene HelloBlock-Klasse von der vorherigen Seite die folgenden use-Anweisungen ein, die den bereits vorhandenen folgen:

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

Aktualisieren Sie die Klassendeklaration, um diese neue "implements BlockPluginInterface" hinzuzufügen:

class HelloBlock extends BlockBase implements BlockPluginInterface {

Fügen Sie dann die folgende Methode zur Klasse hinzu. Eine ähnliche, vollständige Datei finden Sie hier, aber beachten Sie, dass der Formularname und die Konfigurationsnamen nicht mit diesem Tutorial übereinstimmen.

Dieser Code fügt nur das Formular hinzu; die Formularverarbeitung und das Speichern der Ergebnisse folgen auf den nächsten Seiten.

  /**
   * {@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;
  }

In diesem Beispiel wird das Formular zunächst mit einem Verweis auf die Elternklasse definiert, mittels der Codezeile $form = parent::blockForm($form, $form_state);. Danach fügen wir ein neues Feld zum Formular hinzu. Dieser Vorgang wird Polymorphismus genannt und ist einer der wichtigen Vorteile der Verwendung von Methoden in der objektorientierten Programmierung (OOP).

Als nächstes müssen wir Drupal mitteilen, dass die Werte aus unserem Formular in der Konfiguration für diesen Block gespeichert werden sollen. Hier ein Beispiel:

  /**
   * {@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'];
  }

Um das Formular zu sehen, gehen Sie zu der zuvor hinzugefügten Instanz unter admin → Struktur → Block Layout und klicken Sie auf "Konfigurieren" für den (Hello World)-Block.

Um mehrere Aktionen hinzuzufügen, senden Sie dasselbe Formular ab:

  /**
   * {@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;
  }

Neue benutzerdefinierte Submit-Aktion:

  /**
   * Custom submit actions.
   */
  public function custom_submit_form($form, FormStateInterface $form_state) {
    $values = $form_state->getValues();
    // Führen Sie die erforderlichen Aktionen aus.
  }

 

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.