Rumah >pembangunan bahagian belakang >tutorial php >Medan suite paparan tersuai di Drupal 8

Medan suite paparan tersuai di Drupal 8

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-16 12:04:09468semak imbas

Paparan Suite: Menguasai Penciptaan Lapangan Kustom di Drupal 8

Paparan Suite (DS) kekal sebagai asas modul yang disumbangkan oleh Drupal, yang menawarkan alat yang mantap untuk membuat susun atur tapak dan menguruskan persembahan kandungan. Kekuatannya terletak pada mewujudkan medan tersuai yang dipaparkan bersama nilai medan teras dalam susun atur DS. Keupayaan ini, yang sangat bernilai dalam Drupal 7, terus dan berkembang di Drupal 8, memanfaatkan senibina dan sistem plugin yang berorientasikan objek (OOP) baru. Butiran panduan ini mewujudkan medan DS tersuai di Drupal 8.

Custom Display Suite Fields in Drupal 8

plugin drupal 8 dan jenis plugin medan DS

sistem plugin Drupal 8 menggantikan cangkuk Drupal 7

. DS menggunakan sistem ini, mendedahkan jenis plugin _info. Daripada DsField, kami membina kelas plugin dengan metadata dalam anotasi dan logiknya dalam kaedahnya. hook_ds_field_info()

Membuat kelas plugin VocabularyTerms

Contoh kami mewujudkan medan DS (dalam modul tersuai yang dinamakan "Demo") memaparkan istilah taksonomi dari perbendaharaan kata yang boleh dikonfigurasikan, terhad kepada nod artikel. Kelas Plugin ( dan dijelaskan seperti berikut: 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>
konfigurasi lalai dan formatters

Untuk membolehkan pemilihan perbendaharaan kata, kami melaksanakan

untuk menetapkan perbendaharaan kata lalai ("tag"):

defaultConfiguration()

Formatters (mis., Senarai istilah yang dipautkan atau tidak disambungkan) ditakrifkan menggunakan kaedah
<code class="language-php">/**
 * {@inheritdoc}
 */
public function defaultConfiguration() {
  return ['vocabulary' => 'tags'];
}</code>
:

formatters()

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

Custom Display Suite Fields in Drupal 8 Ringkasan Konfigurasi dan Borang Tetapan

kaedah menyediakan ringkasan UI konfigurasi yang dipilih:

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>
kaedah

mencipta UI untuk pemilihan perbendaharaan kata: Custom Display Suite Fields in Drupal 8

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>
Memberi medan

Custom Display Suite Fields in Drupal 8

Kaedah

pertanyaan dan menjadikan istilah:

Kaedah penolong (

dan build()) mengendalikan pemformatan istilah berdasarkan formatter yang dipilih. Ingatlah untuk menyuntik perkhidmatan dan bukannya menggunakan panggilan statik dalam persekitaran pengeluaran.

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

buildTermList() buildTermListItem() Kesimpulan

Panduan komprehensif ini menunjukkan mewujudkan medan DS tersuai di Drupal 8, mempamerkan kuasa dan fleksibiliti sistem plugin. Ingatlah untuk membersihkan cache selepas melaksanakan kod. Pendekatan yang dipertingkatkan ini memberikan kaedah yang mantap dan boleh dipelihara untuk memperluaskan fungsi suite paparan.

Atas ialah kandungan terperinci Medan suite paparan tersuai di Drupal 8. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn