Anzeige Suite: Mastering benutzerdefinierter Felderstellung in Drupal 8
Display Suite (DS) bleibt ein Eckpfeiler von Drupal -zusteuerenden Modulen und bietet robuste Tools für das Handwerk von Site -Layouts und die Verwaltung von Inhalten. Seine Stärke liegt in der Erstellung von benutzerdefinierten Feldern, die neben den Kernfeldwerten in DS -Layouts angezeigt werden. Diese Fähigkeit, die in Drupal 7 hoch geschätzt wird, wird in Drupal 8 fortgesetzt und erweitert, wobei die neue architekturische objektorientierte Programmierung (OOP) und das Plugin-System eingesetzt werden. Diese Anleitung detailliert beschreibt ein benutzerdefiniertes DS -Feld in Drupal 8.
Drupal 8 -Plugins und der DS -Feld -Plugin -Typ
Das Plugin -System von Drupal 8 ersetzt Drupal 7 -Haken. DS nutzt dieses System und zeigt einen -Plugin -Typ. Anstelle von _info
erstellen wir eine Pluginklasse mit Metadaten in ihrer Annotation und Logik in seinen Methoden. DsField
hook_ds_field_info()
Plugin -Klasse VocabularyTerms
Unser Beispiel erstellt ein DS -Feld (innerhalb eines benutzerdefinierten Moduls mit dem Namen "Demo"), das Taxonomiebegriffe aus einem konfigurierbaren Wortschatz zeigt, das auf Artikelknoten beschränkt ist. Die Plugin -Klasse (
und ist wie folgt kommentiert: VocabularyTerms
src/plugins/DsField
namespace Drupal\demo\Plugin\DsField; use Drupal\ds\Plugin\DsField\DsFieldBase; /** * Plugin displaying terms from a selected taxonomy vocabulary. * * @DsField( * id = "vocabulary_terms", * title = @Translation("Vocabulary Terms"), * entity_type = "node", * provider = "demo", * ui_limit = {"article|*"} * ) */ class VocabularyTerms extends DsFieldBase { }
Um die Auswahl der Vokabeln zu ermöglichen, implementieren wir
, um ein Standardvokabular festzulegen ("Tags"):
defaultConfiguration()
/** * {@inheritdoc} */ public function defaultConfiguration() { return ['vocabulary' => 'tags']; }
formatters()
/** * {@inheritdoc} */ public function formatters() { return ['linked' => 'Linked', 'unlinked' => 'Unlinked']; }
Die Methode
enthält eine UI -Zusammenfassung der ausgewählten Konfiguration:
settingsSummary()
/** * {@inheritdoc} */ public function settingsSummary($settings) { $config = $this->getConfiguration(); return isset($config['vocabulary']) && $config['vocabulary'] ? ['Vocabulary: ' . \Drupal::entityTypeManager()->getStorage('taxonomy_vocabulary')->load($config['vocabulary'])->label()] : ['No vocabulary selected.']; }
Die
settingsForm()
/** * {@inheritdoc} */ public function settingsForm($form, FormStateInterface $form_state) { $config = $this->getConfiguration(); $vocabularies = \Drupal::entityTypeManager()->getStorage('taxonomy_vocabulary')->loadMultiple(); $options = []; foreach ($vocabularies as $vocabulary) { $options[$vocabulary->id()] = $vocabulary->label(); } $form['vocabulary'] = [ '#type' => 'select', '#title' => $this->t('Vocabulary'), '#default_value' => $config['vocabulary'], '#options' => $options, ]; return $form; }
Die
-Methodenabfragen und rendert die Begriffe:
build()
/** * {@inheritdoc} */ public function build() { $config = $this->getConfiguration(); if (!isset($config['vocabulary']) || !$config['vocabulary']) { return []; } $query = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->getQuery(); $query->condition('vid', $config['vocabulary']); $tids = $query->execute(); $terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadMultiple($tids); return [ '#theme' => 'item_list', '#items' => $this->buildTermList($terms), ]; }
) handhaben die Begriffsformatierung basierend auf dem ausgewählten Formter. Denken Sie daran, Dienste zu injizieren, anstatt statische Anrufe in einer Produktionsumgebung zu verwenden. buildTermList()
buildTermListItem()
Diese umfassende Anleitung zeigt, dass das Erstellen eines benutzerdefinierten DS -Feldes in Drupal 8 erstellt wird und die Leistung und Flexibilität des Plugin -Systems zeigt. Denken Sie daran, Caches nach der Implementierung des Codes zu löschen. Dieser erweiterte Ansatz bietet eine robuste und wartbare Methode zur Erweiterung der Anzeige -Suite -Funktionalität.
Das obige ist der detaillierte Inhalt vonBenutzerdefinierte Anzeige -Suite -Felder in Drupal 8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!