Flex Objects は、コレクションやグループ、Twigテンプレートから簡単に表示できます。
TIP: Flex Directory を表示するには、ディレクトリの有効化 を参照ください。
flex-objects
のページ・タイプdirectories/flex-objects.md
ページに、複数のディレクトリを表示します
title: Directories
flex:
layout: default
list:
- contacts
- services
---
# Directories
各ディレクトリに別々のパラメータを渡すこともできます。
title: Directories
flex:
layout: default
directories:
contacts:
collection:
title: '{{ directory.title }}'
layout: default
object:
layout: list-default
object:
title: 'Contact: {{ object.first_name }} {{ object.last_name }}'
layout: default
services:
---
# Directories
contacts/flex-objects.md
ページに、ディレクトリを1つ表示します。
title: Contacts
flex:
directory: contacts
collection:
title: '{{ directory.title }}'
layout: default
object:
layout: list-default
object:
title: 'Contact: {{ object.first_name }} {{ object.last_name }}'
layout: default
---
# Contacts
my-contact/flex-objects.md
ページに、オブジェクトを1つ表示します。
title: Contact
flex:
directory: contacts
id: ki2ts4cbivggmtlj
object:
title: 'Contact: {{ object.first_name }} {{ object.last_name }}'
layout: default
---
# Contacts
By default, flex-objects
page type takes two URL parameters, directory and id. They are used to navigate directories. Example URLs look like this:
フォルトでは、フレックス・オブジェクトのページ・タイプは 2 つの URL パラメータ、directory と id を取ります。これらはディレクトリの表示を制御するために使用されます。URL の例は次のようになります。
https://www.domain.com/directories/directory:contacts/id:ki2ts4cbivggmtlj
https://www.domain.com/contacts/id:ki2ts4cbivggmtlj
TIP: 独自の URL パラメータを渡し、flex
のコレクションやオブジェクトの操作に、テンプレートファイル内で使用することもできます。
コレクションとオブジェクトの両方が、HTML 出力をサポートしています。出力は、レイアウトとコンテキストの2つのパラメータでカスタマイズ可能です。レイアウトでは、例えば、カードのリストを表示し、そこからより詳細な出力を行うなど、見え方を設定することができます。コンテキストは、テンプレートファイルで使用される変数を渡すことができます。
{% render collection layout: 'custom' with { context_variable: true } %}
{% render object layout: 'custom' with { context_variable: true } %}
より詳細な情報は、Render Collection and Render Object を参照ください.
Flex 用のテンプレートは、templates/flex
フォルダに置きます。
templates/
flex/
contacts/
collection/
default.html.twig
object/
default.html.twig
コレクション用とオブジェクト用の2つのフォルダがあり、この例では、コレクションとオブジェクトの両方にデフォルトのレイアウトがあります。
コレクション・テンプレート flex/contacts/collection/default.html.twig
は、コレクション内のすべてのオブジェクトを表示する役割を担っています。デフォルトでキャッシュされます。キャッシュ・キーは、コレクションと render() メソッドに渡される context で定義されます。
WARNING: context に非スカラー値が含まれている場合、キャッシュは無効になります。context はできるだけシンプルにするようにしましょう!
コレクション・テンプレートの例
<div id="flex-objects">
<div class="text-center">
<input class="form-input search" type="text" placeholder="Search by name, email, etc" />
<button class="button button-primary sort asc" data-sort="name">
Sort by Name
</button>
</div>
<ul class="list">
{% for object in collection.filterBy({ published: true }) %}
<li>
{% render object layout: layout with { options: options } %}
</li>
{% endfor %}
</ul>
</div>
<script>
var options = {
valueNames: [ 'name', 'email', 'website', 'entry-extra' ]
};
var flexList = new List('flex-objects', options);
</script>
TIP: If the rendered HTML has dynamic content, render cache can be disabled from the Twig template by {% do block.disableCache() %}
.
オブジェクト・テンプレート flex/contacts/object/default.html.twig
は、1つのオブジェクトを表示する役割を担っています。キャッシュ・キーは、コレクションと render() メソッドに渡される context で定義されます。
WARNING: context に非スカラー値が含まれている場合、キャッシュは無効になります。context はできるだけシンプルにするようにしましょう!
オブジェクト・テンプレートの例
<div class="entry-details">
{% if object.website %}
<a href="{{ object.website|e }}"><span class="name">{{ object.last_name|e }}, {{ object.first_name|e }}</span></a>
{% else %}
<span class="name">{{ object.last_name|e }}, {{ object.first_name|e }}</span>
{% endif %}
{% if object.email %}
<p><a href="mailto:{{ object.email|e }}" class="email">{{ object.email|e }}</a></p>
{% endif %}
</div>
<div class="entry-extra">
{% for tag in object.tags %}
<span>{{ tag|e }}</span>
{% endfor %}
</div>
TIP: 出力される HTML に動的な情報が含まれる場合、{% do block.disableCache() %} とすることでキャッシュを無効にできます。
カスタム・レイアウトを使用することで、コレクションとオブジェクトの両方に無限の異なるビューを作成することができます。
default.html.twig ファイルの隣に新しいファイルを追加するだけで、カスタムレイアウトを作成することができます。ファイルのベースネームは、レイアウト名と同じになります。
TIP: コレクション・レイアウトでは、オブジェクト変数を直接コレクションテンプレートに出力するのではなく、{% render object layout:'xxx' %} を呼び出すことをお勧めします。これは、オブジェクト変数をコレクションテンプレートに直接出力する代わりに使用します。