Flex オブジェクトの使用方法

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 パラメータ、directoryid を取ります。これらはディレクトリの表示を制御するために使用されます。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' %} を呼び出すことをお勧めします。これは、オブジェクト変数をコレクションテンプレートに直接出力する代わりに使用します。