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

Benutzerdefinierte Anzeige -Suite -Felder in Drupal 8

Joseph Gordon-Levitt
Joseph Gordon-LevittOriginal
2025-02-16 12:04:09464Durchsuche

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

<code class="language-php">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 {
}</code>
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
<code class="language-php">/**
 * {@inheritdoc}
 */
public function defaultConfiguration() {
  return ['vocabulary' => 'tags'];
}</code>
definiert:

formatters()

<code class="language-php">/**
 * {@inheritdoc}
 */
public function formatters() {
  return ['linked' => 'Linked', 'unlinked' => 'Unlinked'];
}</code>

Custom Display Suite Fields in Drupal 8

Konfigurationsübersicht und Einstellungsformular

Die Methode

enthält eine UI -Zusammenfassung der ausgewählten Konfiguration:

settingsSummary()

<code class="language-php">/**
 * {@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.'];
}</code>

Custom Display Suite Fields in Drupal 8 Die

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

settingsForm()

<code class="language-php">/**
 * {@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;
}</code>

Custom Display Suite Fields in Drupal 8

rendert das Feld

Die

-Methodenabfragen und rendert die Begriffe:

build()

Helfer -Methoden (
<code class="language-php">/**
 * {@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),
  ];
}</code>
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!

Stellungnahme:
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