亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

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

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テーマと同じ変數(shù)が渡されます。 カスタムフィールドフォーマッタは、コンテンツタイプの「ディスプレイの管理」タブを介してDrupal 8のフィールドに適用でき、「フォーマット」ドロップダウンからカスタムフォーマッタを選択できます。
  • 開発プロセスのために、Drupal 8が執(zhí)筆時(shí)點(diǎn)で受けているため、コードの一部が時(shí)代遅れになっている可能性があることに注意してください。このリポジトリをご覧ください。このリポジトリでは、サンプルコードを更新し、最新のDrupal 8リリースで動(dòng)作させようとしています。
  • 注釈付きプラグインの導(dǎo)入により、Drupal 8では多くの変化があります。コアを拡張する機(jī)能性を説明および発見するためのより合理化されたアプローチがあります。他の多くのコンポーネントに加えて、以前のフィールドAPI(大規(guī)模および統(tǒng)合されたエンティティAPIの一部)は、プラグインに基づいています。
このチュートリアルでは、既存のフィールド(畫像)のカスタムフィールドフォーマッタを定義することを行います。私たちが達(dá)成したいのは、その下に小さなキャプションが付いた畫像を表示できるようにすることです。このキャプションは、存在する場合、畫像に割り當(dāng)てられたタイトル値になります。 ここに書くコードは、このリポジトリにImage_title_captionモジュールとして見つけることができます。しかし、その最終結(jié)果にどのように到達(dá)できるか見てみましょう。

Drupalモジュール

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

image_title_caption.info.yml:

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

プラグイン

Drupal 8では、フィールドフォーマッタ(フィールドタイプやウィジェット自體など)がプラグインです。コアのものは、コアモジュールによって定義されているか、DrupalCoreFieldPluginFieldFieldFiledFormation Namespace內(nèi)に見つけることができます。また、カスタムブロックを調(diào)べた以前の記事で見たように、プラグインはモジュールのSRC/プラグイン/フォルダー內(nèi)に入ります。フィールドフォーマッタの場合、これは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プラグインから拡張されているため、クラスはシンプルに見えます。私たちの目的のために、私たちがオーバーライドする必要があるのは、フィールドデータのレンダリング配列を返すことを擔(dān)當(dāng)するViewElements()メソッドだけです。後者は$アイテムリスト內(nèi)にあり、レンダリングに使用して準(zhǔn)備できます。

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

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

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

テーマ

上記で指定したimage_title_caption_formatterテーマはこれまでのところ想像上であるため、作成する必要があります。モジュールのモジュールファイルの內(nèi)部では、hook_themeを?qū)g裝する必要があります:

image_title_caption.module:

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

このプリプロセッサでは、2つのアクションを?qū)g行します
<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>

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

畫像タイトルの消毒された値を含むキャプションと呼ばれる新しい変數(shù)を作成します。
<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と同様に、このファイルの名前はテーマ名を反映するため重要です。內(nèi)容については、下部に印刷されたキャプションを除き、Image_Formatterテーマで使用されているテンプレートとほぼ同じです。

    それは機(jī)能しますか?

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

    たとえば、

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

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

    結(jié)論

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

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

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

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

    ??

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

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

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

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

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

    ??

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

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

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

    以上がDrupal 8でカスタムフィールドフォーマッタを作成しますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

    このウェブサイトの聲明
    この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

    ホットAIツール

    Undress AI Tool

    Undress AI Tool

    脫衣畫像を無料で

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    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

    強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

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

    PHP変數(shù)スコープは説明されています PHP変數(shù)スコープは説明されています Jul 17, 2025 am 04:16 AM

    PHP変數(shù)スコープの一般的な問題とソリューションには次のものが含まれます。1。グローバル変數(shù)は関數(shù)內(nèi)でアクセスできず、グローバルキーワードまたはパラメーターを使用して渡す必要があります。 2。靜的変數(shù)は靜的で宣言され、1回のみ初期化され、値は複數(shù)の呼び出し間で維持されます。 3. $ _GETや$ _POSTなどのハイパーグローバル変數(shù)は、任意の範(fàn)囲で直接使用できますが、安全なフィルタリングに注意を払う必要があります。 4.匿名関數(shù)は、使用キーワードを使用して親スコープ変數(shù)を?qū)毪工氡匾ⅳ?、外部変?shù)を変更する場合は、參照を渡す必要があります。これらのルールを習(xí)得すると、エラーを回避し、コードの安定性が向上するのに役立ちます。

    ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

    PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認(rèn)し、ファイル名とパスを制御し、サーバー制限を設(shè)定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認(rèn)し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機(jī)能を決定します。 3。PHP構(gòu)成は、アップロードサイズを制限し、一時(shí)的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

    PHPでコードをコメントします PHPでコードをコメントします Jul 18, 2025 am 04:57 AM

    PHPコメントコードには3つの一般的な方法があります。1。//#を使用して1行のコードをブロックすると、//を使用することをお?jiǎng)幛幛筏蓼埂?2。使用/.../複數(shù)の行でコードブロックをラップするには、ネストすることはできませんが交差することができます。 3. / if(){}を使用するなどの組み合わせスキルコメントロジックブロックを制御するか、エディターショートカットキーで効率を改善するには、シンボルを閉じることに注意を払い、使用時(shí)にネストを避ける必要があります。

    発電機(jī)はPHPでどのように機(jī)能しますか? 発電機(jī)はPHPでどのように機(jī)能しますか? Jul 11, 2025 am 03:12 AM

    ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

    PHPコメントを書くためのヒント PHPコメントを書くためのヒント Jul 18, 2025 am 04:51 AM

    PHPコメントを書くための鍵は、目的と仕様を明確にすることです。コメントは、「何が行われたのか」ではなく「なぜ」を説明する必要があり、冗長性や単純さを避けてください。 1.読みやすさとツールの互換性を向上させるために、クラスおよびメソッドの説明にdocblock(/*/)などの統(tǒng)合形式を使用します。 2。JSジャンプを手動(dòng)で出力する必要がある理由など、ロジックの背後にある理由を強(qiáng)調(diào)します。 3.複雑なコードの前に概要説明を追加し、手順でプロセスを説明し、全體的なアイデアを理解するのに役立ちます。 4. TodoとFixmeを合理的に使用して、To Doアイテムと問題をマークして、その後の追跡とコラボレーションを促進(jìn)します。優(yōu)れた注釈は、通信コストを削減し、コードメンテナンスの効率を向上させることができます。

    クイックPHPインストールチュートリアル クイックPHPインストールチュートリアル Jul 18, 2025 am 04:52 AM

    to installphpquickly、usexampponwindowsorhomebrewonmacos.1.onwindows、downloadandinstallxampp、selectcomponents、startapache、andplacefilesinhtdocs.2

    PHPの學(xué)習(xí):初心者向けガイド PHPの學(xué)習(xí):初心者向けガイド Jul 18, 2025 am 04:54 AM

    tolearnphpefctivially、startbysettingupalocalserverenvironmentusingtoolslikexamppandacodeeditorlikevscode.1)instalxamppforapa Che、mysql、andphp.2)useocodeeditorforsyntaxsupport.3)testyoursetup withasimplephpfile.next、Learnpbasicsincludingvariables、ech

    PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 PHPのインデックスごとに文字列內(nèi)の文字にアクセスする方法 Jul 12, 2025 am 03:15 AM

    PHPでは、四角い括弧または巻き毛裝具を使用して文字列固有のインデックス文字を取得できますが、正方形のブラケットをお?jiǎng)幛幛筏蓼?。インデックス?から始まり、範(fàn)囲外のアクセスはnull値を返し、値を割り當(dāng)てることができません。 MB_SUBSTRは、マルチバイト文字を処理するために必要です。例:$ str = "hello"; echo $ str [0];出力h; MB_Substr($ str、1,1)などの漢字は、正しい結(jié)果を得る必要があります。実際のアプリケーションでは、ループする前に文字列の長さをチェックする必要があり、ダイナミック文字列を有効性のために検証する必要があり、多言語プロジェクトはマルチバイトセキュリティ関數(shù)を均一に使用することをお?jiǎng)幛幛筏蓼埂?/p>

    See all articles