Heim > Backend-Entwicklung > PHP-Tutorial > Benutzerdefinierte Anzeige -Suite -Felder in Drupal 8

Benutzerdefinierte Anzeige -Suite -Felder in Drupal 8

Joseph Gordon-Levitt
Freigeben: 2025-02-16 12:04:09
Original
439 Leute haben es durchsucht

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.

Custom Display Suite Fields 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()

Erstellen der

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 (

) liegt in

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 {
}
Nach dem Login kopieren
Standardkonfiguration und Formatter

Um die Auswahl der Vokabeln zu ermöglichen, implementieren wir

, um ein Standardvokabular festzulegen ("Tags"):

defaultConfiguration()

Formatters (z. B. verknüpfte oder nicht verknüpfte Begriffslisten) werden mit der Methode
/**
 * {@inheritdoc}
 */
public function defaultConfiguration() {
  return ['vocabulary' => 'tags'];
}
Nach dem Login kopieren
definiert:

formatters()

/**
 * {@inheritdoc}
 */
public function formatters() {
  return ['linked' => 'Linked', 'unlinked' => 'Unlinked'];
}
Nach dem Login kopieren

Custom Display Suite Fields in Drupal 8

Konfigurationsübersicht und Einstellungsformular

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.'];
}
Nach dem Login kopieren

Custom Display Suite Fields in Drupal 8 Die

-Methode erstellt die Benutzeroberfläche für die Vokabularauswahl:

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;
}
Nach dem Login kopieren

Custom Display Suite Fields in Drupal 8

rendert das Feld

Die

-Methodenabfragen und rendert die Begriffe:

build()

Helfer -Methoden (
/**
 * {@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),
  ];
}
Nach dem Login kopieren
und

) 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()

Custom Display Suite Fields in Drupal 8

Schlussfolgerung

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage