ホームページ > バックエンド開発 > PHPチュートリアル > Drupal 8のカスタムディスプレイスイートフィールド

Drupal 8のカスタムディスプレイスイートフィールド

Joseph Gordon-Levitt
リリース: 2025-02-16 12:04:09
オリジナル
440 人が閲覧しました

ディスプレイスイート:DRUPAL 8

でカスタムフィールド作成をマスターする

ディスプレイスイート(DS)は、Drupalの寄稿されたモジュールの基礎であり、サイトレイアウトを作成し、コンテンツプレゼンテーションを管理するための堅牢なツールを提供しています。 その強みは、DSレイアウト内のコアフィールド値とともに表示されるカスタムフィールドを作成することにあります。 Drupal 7で高く評価されているこの機能は、Drupal 8で継続および拡大し、新しいオブジェクト指向プログラミング(OOP)アーキテクチャおよびプラグインシステムを活用しています。このガイドの詳細Drupal 8のカスタムDSフィールドの作成

Custom Display Suite Fields in Drupal 8

DRUPAL 8プラグインとDSフィールドプラグインタイプ

Drupal 8のプラグインシステムは、Drupal 7のフックを置き換えます。 DSはこのシステムを利用して、プラグインタイプを公開します。

の代わりに、メタデータがその注釈とそのメソッド内でロジックを含むプラグインクラスを構築します。 _infoDsFieldhook_ds_field_info()プラグインクラス

の作成 私たちの例は、記事ノードに限定された構成可能な語彙から分類用語を表示するDSフィールド(「デモ」という名前のカスタムモジュール内)を作成します。 プラグインのクラス(VocabularyTerms)はに存在し、次のように注釈が付けられています。

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 {
}
ログイン後にコピー
語彙選択を許可するには、

にデフォルトの語彙( "タグ")を設定するように実装してください:

フォーマッタ(例:リンクまたはリンクされていないタームリスト)は、

メソッドを使用して定義されます。 defaultConfiguration()

/**
 * {@inheritdoc}
 */
public function defaultConfiguration() {
  return ['vocabulary' => 'tags'];
}
ログイン後にコピー

formatters()

構成の概要と設定フォーム
/**
 * {@inheritdoc}
 */
public function formatters() {
  return ['linked' => 'Linked', 'unlinked' => 'Unlinked'];
}
ログイン後にコピー

Custom Display Suite Fields in Drupal 8

メソッドは、選択した構成のUI​​サマリーを提供します:

settingsSummary()

メソッドは、語彙選択のためにUIを作成します:
/**
 * {@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.'];
}
ログイン後にコピー

Custom Display Suite Fields in Drupal 8

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;
}
ログイン後にコピー

メソッドは、次の用語をクエリしてレンダリングします Custom Display Suite Fields in Drupal 8 選択したフォーマッタに基づいて、

ヘルパーメソッド(

および)を処理します。 生産環境で静的コールを使用する代わりに、サービスを注入することを忘れないでください。

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),
  ];
}
ログイン後にコピー

この包括的なガイドは、プラグインシステムのパワーと柔軟性を紹介するDrupal 8にカスタムDSフィールドを作成することを示しています。 コードを実装した後、キャッシュをクリアすることを忘れないでください。 この強化されたアプローチは、ディスプレイスイート機能を拡張するための堅牢で保守可能な方法を提供します。

以上がDrupal 8のカスタムディスプレイスイートフィールドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート