目次
キーテイクアウト
プラグイン
テンプレート
Drupal 8の@fieldformatterアノテーションの目的は何ですか?
カスタムフィールドフォーマッタをDrupal 8のフィールドに適用するには、コンテンツタイプの「ディスプレイの管理」タブ、またはその他のエンティティタイプに移動する必要があります分野。リスト内のフィールドを見つけ、「フォーマット」ドロップダウンからカスタムフォーマッタを選択します。次に、[更新]ボタンをクリックして変更を保存します。
Drupal 8でカスタムフィールドフォーマッタの設定フォームを作成するには、Formatterクラスにsettingsform()およびsettingsSummary()メソッドを実装する必要があります。 settingsform()メソッドは設定のフォーム配列を返す必要があり、settingsSummary()メソッドは設定の概要行の配列を返す必要があります。 8?
カスタムフィールドフォーマッタを使用してDrupal 8にリンクを表示できます。リンクフィールド値のレンダリング配列を生成するには、ViewElements()メソッドを実装する必要があります。

Drupal 8のマルチ値フィールド用のカスタムフィールドフォーマッタを作成するにはどうすればよいですか?

ホームページ バックエンド開発 PHPチュートリアル Drupal 8でカスタムフィールドフォーマッタを作成します

Drupal 8でカスタムフィールドフォーマッタを作成します

Feb 18, 2025 am 08:42 AM

Drupal 8でカスタムフィールドフォーマッタを作成します

キーテイクアウト

  • Drupal 8でカスタムフィールドフォーマッタを作成するには、デフォルトのImageFormatterプラグインから拡張されたカスタムモジュールのSRC/プラグイン/フィールド/フィールドフォーマッタディレクトリで新しいフォーマッタクラスを定義することが含まれます。
  • 新しいFormatterクラスは、ViewElements()メソッドをオーバーライドして、フィールドデータのレンダリング配列を返す必要があります。
  • 新しいテーマ、image_title_caption_formatterは、モジュールの.moduleファイルで作成され、デフォルトのimage_formatterテーマと同じ変数が渡されます。 カスタムフィールドフォーマッタは、コンテンツタイプの「ディスプレイの管理」タブを介してDrupal 8のフィールドに適用でき、「フォーマット」ドロップダウンからカスタムフォーマッタを選択できます。
  • 開発プロセスのために、Drupal 8が執筆時点で受けているため、コードの一部が時代遅れになっている可能性があることに注意してください。このリポジトリをご覧ください。このリポジトリでは、サンプルコードを更新し、最新のDrupal 8リリースで動作させようとしています。
  • 注釈付きプラグインの導入により、Drupal 8では多くの変化があります。コアを拡張する機能性を説明および発見するためのより合理化されたアプローチがあります。他の多くのコンポーネントに加えて、以前のフィールドAPI(大規模および統合されたエンティティAPIの一部)は、プラグインに基づいています。
このチュートリアルでは、既存のフィールド(画像)のカスタムフィールドフォーマッタを定義することを行います。私たちが達成したいのは、その下に小さなキャプションが付いた画像を表示できるようにすることです。このキャプションは、存在する場合、画像に割り当てられたタイトル値になります。 ここに書くコードは、このリポジトリにImage_title_captionモジュールとして見つけることができます。しかし、その最終結果にどのように到達できるか見てみましょう。

Drupalモジュール

Drupal 8でカスタムフィールドフォーマッタを作成します 1つのファイルのみで新しいカスタムモジュール(image_title_caption)を作成することから始めましょう。

image_title_caption.info.yml:

ここでは普通のことは何もありません。必要に応じて、すでにモジュールを有効にすることもできます。

プラグイン

Drupal 8では、フィールドフォーマッタ(フィールドタイプやウィジェット自体など)がプラグインです。コアのものは、コアモジュールによって定義されているか、DrupalCoreFieldPluginFieldFieldFiledFormation Namespace内に見つけることができます。また、カスタムブロックを調べた以前の記事で見たように、プラグインはモジュールのSRC/プラグイン/フォルダー内に入ります。フィールドフォーマッタの場合、これはSRC/Plugin/Field/FieldFormatterディレクトリになります。

以下では、私たち自身のフォーマッタクラス:

を見ることができます

src/plugin/field/fieldformatter/imagetitlecaption.php:
name: Image title caption
type: module
description: Uses the image title field as a caption
core: 8.x
dependencies:
  - image
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
name: Image title caption
type: module
description: Uses the image title field as a caption
core: 8.x
dependencies:
  - image
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これは私たちのプラグインです。それには何もありません。クラス宣言の上に、プラグインが発見される@FieldFormatterアノテーションがあります。プラグインID(image_title_caption)、ラベル、およびこのフォーマッタを使用できるフィールドタイプの配列を指定します。私たちの場合、後者にはデフォルトの画像フィールドタイプのみが含まれていますが、カスタムフィールドタイプでさえも望むなら、より多くをサポートできます。その配列に入る値はプラグインIDであるため、画像フィールドタイププラグインを見ると、IDが画像であることがわかります。 コア画像モジュールによって定義されたデフォルトのImageFormatterプラグインから拡張されているため、クラスはシンプルに見えます。私たちの目的のために、私たちがオーバーライドする必要があるのは、フィールドデータのレンダリング配列を返すことを担当するViewElements()メソッドだけです。後者は$アイテムリスト内にあり、レンダリングに使用して準備できます。

この方法で最初に行うことは、アイテムの親クラスメソッドを呼び出し、それを変数に保存することです。それは、まるで通常のようにレンダリングされる画像をすでに準備します。

デフォルトでは、ImageFormatterプラグイン(親)は、レンダリング配列内のImage_Formatterテーマを使用して、画像フィールド値を出力します。ここで私たちがしていることは、各アイテムについて、このテーマを独自のImage_title_caption_formatterに置き換えることです。次に、親がそうであるように要素(レンダリング配列)を返します。

Drupal 8でこれに気付くでしょう。そして、あなたが私に尋ねると、それは魔法のフックや機能が何をするかを理解するよりもはるかに優れています。

テーマ

上記で指定したimage_title_caption_formatterテーマはこれまでのところ想像上であるため、作成する必要があります。モジュールのモジュールファイルの内部では、hook_themeを実装する必要があります:

image_title_caption.module:

これは、Drupal 7に非常に似ているため、おなじみに見えるはずです。このテーマに渡す変数に注意してください。デフォルトのImage_Formatterテーマをオーバーライドすることを目的としているため、同じ変数もここに渡される必要があります。さらに、Image_Formatterテーマはプレアセスされているため、テーマにもプリプロセッサを作成する必要があります。

このプリプロセッサでは、2つのアクションを実行します
<span><span><?php
</span></span><span>
</span><span><span>/**
</span></span><span><span> * <span>@file
</span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption.
</span></span><span><span> */
</span></span><span>
</span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>;
</span></span><span>
</span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>;
</span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>;
</span></span><span>
</span><span><span>/**
</span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter.
</span></span><span><span> *
</span></span><span><span> * @FieldFormatter(
</span></span><span><span> *   id = "image_title_caption",
</span></span><span><span> *   label = @Translation("Image with caption from title"),
</span></span><span><span> *   field_types = <span>{
</span></span></span><span><span> *     "image"
</span></span><span><span> *   <span>}
</span></span></span><span><span> * )
</span></span><span><span> */
</span></span><span><span>class ImageTitleCaption extends ImageFormatter {
</span></span><span>
</span><span>  <span>/**
</span></span><span><span>   * <span>{@inheritdoc}
</span></span></span><span><span>   */
</span></span><span>  <span>public function viewElements(FieldItemListInterface $items) {
</span></span><span>    <span>$elements = <span>parent::</span>viewElements($items);
</span></span><span>    <span>foreach ($elements as &$element) {
</span></span><span>      <span>$element['#theme'] = 'image_title_caption_formatter';
</span></span><span>    <span>}
</span></span><span>
</span><span>    <span>return $elements;
</span></span><span>  <span>}
</span></span><span>
</span><span><span>}</span></span>
ログイン後にコピー
ログイン後にコピー

テンプレートファイルに渡された変数が、最初にデフォルトのImage_Formatterテーマのプリプロセッサによって前処理されたことを確認します。これは、すべての変数がまったく同じであり、通常のように画像が表示されるようにするためです。

画像タイトルの消毒された値を含むキャプションと呼ばれる新しい変数を作成します。
<span>/**
</span><span> * Implements hook_theme().
</span><span> */
</span><span>function image_title_caption_theme() {
</span>  <span>return array(
</span>    <span>'image_title_caption_formatter' => array(
</span>      <span>'variables' => array('item' => NULL, 'item_attributes' => NULL, 'url' => NULL, 'image_style' => NULL),
</span>    <span>),
</span>  <span>);
</span><span>}</span>
ログイン後にコピー

サニタイションの場合、ヘルパーストリングクラスを静的に使用します。私たちはまだ.moduleファイルの中にあるので、それを挿入できませんが、ファイルの上部で

それを使用する必要があります:
    name: Image title caption
    type: module
    description: Uses the image title field as a caption
    core: 8.x
    dependencies:
      - image
    ログイン後にコピー
    ログイン後にコピー
    ログイン後にコピー

    テンプレート

    最後に、新しいテーマのテンプレートファイルを作成する必要があります。

    Templates/Image-Title-Caption-formatter.html.twig:

    <span><span><?php
    </span></span><span>
    </span><span><span>/**
    </span></span><span><span> * <span>@file
    </span></span></span><span><span> * Contains \Drupal\image_title_caption\Plugin\Field\FieldFormatter\ImageTitleCaption.
    </span></span><span><span> */
    </span></span><span>
    </span><span><span>namespace Drupal<span>\image_title_caption\Plugin\Field\FieldFormatter</span>;
    </span></span><span>
    </span><span><span>use Drupal<span>\Core\Field\FieldItemListInterface</span>;
    </span></span><span><span>use Drupal<span>\image\Plugin\Field\FieldFormatter\ImageFormatter</span>;
    </span></span><span>
    </span><span><span>/**
    </span></span><span><span> * Plugin implementation of the 'image_title_caption' formatter.
    </span></span><span><span> *
    </span></span><span><span> * @FieldFormatter(
    </span></span><span><span> *   id = "image_title_caption",
    </span></span><span><span> *   label = @Translation("Image with caption from title"),
    </span></span><span><span> *   field_types = <span>{
    </span></span></span><span><span> *     "image"
    </span></span><span><span> *   <span>}
    </span></span></span><span><span> * )
    </span></span><span><span> */
    </span></span><span><span>class ImageTitleCaption extends ImageFormatter {
    </span></span><span>
    </span><span>  <span>/**
    </span></span><span><span>   * <span>{@inheritdoc}
    </span></span></span><span><span>   */
    </span></span><span>  <span>public function viewElements(FieldItemListInterface $items) {
    </span></span><span>    <span>$elements = <span>parent::</span>viewElements($items);
    </span></span><span>    <span>foreach ($elements as &$element) {
    </span></span><span>      <span>$element['#theme'] = 'image_title_caption_formatter';
    </span></span><span>    <span>}
    </span></span><span>
    </span><span>    <span>return $elements;
    </span></span><span>  <span>}
    </span></span><span>
    </span><span><span>}</span></span>
    ログイン後にコピー
    ログイン後にコピー
    Drupal 7と同様に、このファイルの名前はテーマ名を反映するため重要です。内容については、下部に印刷されたキャプションを除き、Image_Formatterテーマで使用されているテンプレートとほぼ同じです。

    それは機能しますか?

    コードを作成したので、有効化後にコードを変更した場合、モジュールを有効にし、すべてのキャッシュをクリアする必要があります。テストする時が来ました。

    たとえば、

    admin/struction/types/manage/article/displayの記事コンテンツタイプのフィールド表示設定に移動します。イメージフィールドの場合、フォーマットの見出しの下で、タイトル形式からキャプションで画像を選択できるはずです。フォームを保存して、admin/struction/types/manage/article/fields/node.article.field_imageに移動し、画像フィールドタイトルが有効になっていることを確認してください。

    最後に、記事を編集し、画像をアップロードしてタイトルを指定できます。そのタイトルは引き続き動作しますが、さらに、キャプションとして画像の下に表示されます。もちろん、あなたはまだあなたが望むようにそれをスタイリングすることができます

    結論

    この記事では、Drupal 8でフィールドフォーマッタを作成してデフォルトの動作を拡張することがどれほど簡単かを見てきました。もの。また、ImageFormatterを拡張する必要はありません。例として拡張または使用できる既存のプラグインがたくさんあります。

    さらに、新しいフィールドタイプとウィジェットも簡単に作成できます。同様のプロセスですが、スキーマ情報を考慮し、さまざまな注釈クラスを使用して、さらにコードを作成する必要があります。しかし、ポイントは、あなたがそうすることで非常に柔軟であることです。

    Drupal 8でカスタムフィールドフォーマッタを作成することに関するよくある質問Drupal 8でカスタムフィールドフォーマッタを作成するには、Drupal 8にカスタムフィールドフォーマッタを作成するには、いくつかのステップが含まれます。まず、カスタムモジュールをまだ持っていない場合は、カスタムモジュールを作成する必要があります。次に、カスタムモジュールで、SRC/Plugin/Field/FieldFormatterディレクトリに新しいファイルを作成します。ファイルには、含まれるクラスに従って命名する必要があります。このファイル内では、FormatterBaseクラスを拡張するカスタムフィールドフォーマッタクラスを定義します。フィールド値のレンダリング配列を生成する責任を負うViewElements()を含むいくつかの方法を実装する必要があります。

    Drupal 8の@fieldformatterアノテーションの目的は何ですか?

    ​​

    Drupal 8の@fieldformatterアノテーションは、フィールドフォーマッターを定義するために使用されます。 ID、ラベル、Field_Typesなどのプロパティが含まれます。 IDはフォーマッタの一意の識別子であり、ラベルは人間が読み取り可能な名前であり、Field_TypesはFormatterがサポートするフィールドタイプのマシン名の配列です。 DRUPAL 8のフィールド?

    カスタムフィールドフォーマッタをDrupal 8のフィールドに適用するには、コンテンツタイプの「ディスプレイの管理」タブ、またはその他のエンティティタイプに移動する必要があります分野。リスト内のフィールドを見つけ、「フォーマット」ドロップダウンからカスタムフォーマッタを選択します。次に、[更新]ボタンをクリックして変更を保存します。

    Drupal 8のカスタムフィールドフォーマッタの出力を制御するにはどうすればよいですか? FormatterクラスのViewElements()メソッドによって制御されます。この方法では、フィールド値のレンダリング配列を返す必要があります。 Drupalのテーマシステムを使用して出力をさらにカスタマイズできます。 drupal 8のフィールドタイプ。@fieldformatterクラスの@fieldformatterアノテーションでは、field_typesプロパティでフィールドタイプのマシン名の配列を指定できます。 DRUPAL 8?

    Drupal 8でカスタムフィールドフォーマッタの設定フォームを作成するには、Formatterクラスにsettingsform()およびsettingsSummary()メソッドを実装する必要があります。 settingsform()メソッドは設定のフォーム配列を返す必要があり、settingsSummary()メソッドは設定の概要行の配列を返す必要があります。 8?

    カスタムフィールドフォーマッタを使用してDrupal 8に画像を表示するには、FormatterクラスはFormatterbaseの代わりにImageFormatterBaseクラスを拡張する必要があります。画像フィールド値のレンダリング配列を生成するには、ViewElements()メソッドを実装する必要があります。 、Drupal 8でカスタムフィールドタイプのカスタムフィールドフォーマッタを作成できます。Formationクラスの@FieldFormatterアノテーションでは、field_typesプロパティでカスタムフィールドタイプのマシン名を指定できます。カスタムフィールドフォーマッタを使用して、Drupal 8にリンクを表示できますか?

    ​​

    カスタムフィールドフォーマッタを使用してDrupal 8にリンクを表示できます。リンクフィールド値のレンダリング配列を生成するには、ViewElements()メソッドを実装する必要があります。

    Drupal 8のマルチ値フィールド用のカスタムフィールドフォーマッタを作成するにはどうすればよいですか?

    Drupal 8のマルチ値フィールドのカスタムフィールドフォーマッタを作成するには、Formatterクラスはフォーマッタベースを拡張する必要があります。 viewelements()メソッドをクラスして実装します。この方法では、フィールドに複数の値があることを考慮して、フィールド値のレンダリング配列を返す必要があります。

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

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

    JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

    セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? セッションのハイジャックはどのように機能し、どのようにPHPでそれを軽減できますか? Apr 06, 2025 am 12:02 AM

    セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

    phpstormでCLIモードをデバッグする方法は? phpstormでCLIモードをデバッグする方法は? Apr 01, 2025 pm 02:57 PM

    phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

    確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

    PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

    システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

    システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

    PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

    静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

    フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

    記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

    See all articles