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の一部)は、プラグインに基づいています。
Drupalモジュール
1つのファイルのみで新しいカスタムモジュール(image_title_caption)を作成することから始めましょう。
ここでは普通のことは何もありません。必要に応じて、すでにモジュールを有効にすることもできます。
プラグイン
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>
それは機能しますか?
コードを作成したので、有効化後にコードを変更した場合、モジュールを有効にし、すべてのキャッシュをクリアする必要があります。テストする時が来ました。
たとえば、
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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