Rumah >pembangunan bahagian belakang >tutorial php >Medan suite paparan tersuai di Drupal 8
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.
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
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()
<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>
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:
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
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!