Ibexa DXP のテンプレートについて

### コンテンツをレンダリングする
コンテンツは、デフォルトの基本テンプレートを使用して自動的にレンダリングされます。カスタムテンプレートを使用してコンテンツをレンダリングするには、テンプレートファイルを作成し、構成を通じて、このテンプレートをいつ使用するかをシステムに通知します。

これは[コンテンツビューの設定](https://doc.ibexa.co/en/latest/guide/content_rendering/templates/template_configuration/)を使用して行います。

たとえば、カスタムテンプレートをすべての記事に適用するには、次の構成を使用します。

```yaml
ibexa:
    system:
        site_group:
            content_view:
                full:
                    article:
                        template: '@ibexadesign/full/article.html.twig'
                        match:
                            Identifier\ContentType: article
```
この設定は、`match` の条件を満たすすべての Content item の `full` ビューを定義します。
`match` は Content Type `article` を持つすべての Content item がこの設定を使用することを示します。
表示される `template` は `@ibexadesign/full/article.html.twig` です。

:::note info
**デザイン**
この設定では、テンプレートパスの `@ibexadesign` で示されるように、[デザインエンジン](https://doc.ibexa.co/en/latest/guide/content_rendering/design_engine/design_engine/)を使用します。この例では、デザインで使用されるテーマは `my_theme` です。

デザインエンジンの使用をお勧めしますが、次のようにテンプレートへの直接パスを設定することもできます。
```
template: 'full/article.html.twig'
```
その後、`templates/full` フォルダにテンプレートファイルが含まれていることを確認する必要があります。
:::

この設定では、`article.html.twig` テンプレートファイルを `templates/themes/<テーマ名>/full` に、この例では `templates/themes/my_theme/full` に追加することが必要です。

```twig
<h1>{{ ibexa_content_name(content) }}</h1>

{{ content.contentInfo.publishedDate|ibexa_full_datetime }}

{{ ibexa_render_field(content, 'intro') }}

{{ ibexa_render_field(content, 'body', {
    'attr': {
        class: 'article-body'
    }
}) }}

{{ ibexa_render_field(content, 'author', {
    'template': '@ibexadesign/fields/author.html.twig'
}) }}
```

### コンテンツ情報を取得する
コンテンツ名などの一般的なコンテンツ情報をレンダリングするには、`ibexa_content_name()` Twig 関数を使用します。

コンテンツ名は、Content Type の[コンテンツ名パターン](https://doc.ibexa.co/en/latest/guide/content_model/#content-name-pattern)に基づいています。
```twig
<h1>{{ ibexa_content_name(content) }}</h1>
```

利用可能な変数を使用することで、コンテンツ、ロケーション、ビューパラメータに関する一般的な情報を取得することができます。例えば、現在のContentアイテムの公開日を取得するには、以下を使用します。
```twig
{{ content.contentInfo.publishedDate|ibexa_full_datetime }}
```

:::note
**ヒント**
開発の目的で、`dump()` Twig 関数を使用して、使用可能なすべての変数、または1つの変数とそれらの値を一覧表示できます。
:::

```twig
{{ dump() }}
{{ dump(content) }}
```

### フィールドのレンダリング
`ibexa_render_field()` Twig 関数を使うと、コンテンツアイテムの単一のフィールドをレンダリングすることができます。これは Content item と Field の識別子を引数として取ります。

```twig
{{ ibexa_render_field(content, 'intro') }}
```

この関数には、HTML クラスなどの追加の引数を渡すことができます。

```twig
{{ ibexa_render_field(content, 'body', {
    'attr': {
        class: 'article-body'
    }
}) }}
```

#### フィールドテンプレート
カスタムフィールドテンプレートを使用するには、[`ibexa_render_field()`](https://doc.ibexa.co/en/latest/guide/content_rendering/twig_function_reference/field_twig_functions/#ibexa_render_field) の引数としてテンプレートを渡します。

```twig
{{ ibexa_render_field(content, 'author', {
    'template': '@ibexadesign/fields/author.html.twig'
}) }}
```

この場合、`author.html.twig` テンプレートを `templates/themes/<theme_name>/fields` に配置する必要があります（例： `templates/themes/my_theme/fields` など）。

```twig
{% block ezauthor_field %}
{% if field.value.authors|length() > 0 %}
    {% for author in field.value.authors %}
        <span class="author">{{ author.name }}</span>
    {% endfor %}
{% endif %}
{% endblock %}
```

Field テンプレートは、Field Type の識別子に対応するブロック（この場合は `{% block ezauthor_field %}）` に配置する必要があります。

:::note
**テンプレートブロック**
Twig ブロックは、テンプレートを互いにインクルードするために使用します。テンプレート間の関係については、[Connecting templates](https://doc.ibexa.co/en/latest/guide/content_rendering/templates/templates/#connecting-templates) を参照してください。
:::