Craft CMS( Twig )で動的なキーと値で連想配列を作成する

Craft CMS( Twig )で動的なキーと値で連想配列を作成する方法をご紹介します。ポイントはキーも動的に生成している点です。

Craft CMS Logo

今回は Craft CMS( Twig )で動的なキーと値で連想配列を作成する方法をご紹介します。Craft CMS を例にしていますが、Twig 全般のお話です。

前回の記事 に引き続き、Craft CMS で下記のような設定のドロップダウンフィールドを作成したとします。フィールドのハンドルは player です。

ドロップダウンの設定

これの設定を元にして、ドロップダウンの値を キー 、ドロップダウンのラベルを にした連想配列を動的に作る方法をご紹介します。作成したい連想配列の形は下記のような形です。

{
 'baggio': 'ロベルト・バッジョ',
 'cruyff': 'ヨハン・クライフ',
 'zico': 'ジーコ'
}

テンプレートを実装

テンプレートは下記のようになります。

{% set players = {} %}
{% set playerField = craft.fields.getFieldByHandle('player') %}
{% for option in playerField.settings.options %}
 {% set players = players | merge({ (option.value) : option.label }) %}
{% endfor %}

まず連想配列を入れる変数を定義します。

{% set players = {} %}

Craft CMS では、 craft.fields.getFieldByHandle('player') でフィールドの情報を取得し、 .settings.options で選択肢の情報を取得できます。この options は下記のような形で情報が入っています(抜粋)。

[
 { 'label' => ドロップダウンのラベル, 'value' => ドロップダウンの値},
 ...
]

なので、ドロップダウンの値は option.value で、ラベルは option.label で取得できます。

この options をループで回しつつ、 merge を使って最初に定義した players にキーと値を追加していきます。

{% for option in playerField.settings.options %}
 {% set players = players | merge({ (option.value) : option.label }) %}
{% endfor %}

キーを動的にする場合は (option.value) のように変数を () で囲むのがポイントです。

あとは普通に {{ players.baggio }} のように出力すれば OK です。

ちなみに、出力するときのキーを動的にする場合は、下記のようなります。Craft CMS で URL の name パラメータから値を取得することを前提にしてみました。

{% set paramPlayersName = craft.request.getParam('name') %}
{{ attribute(players, paramPlayersName) }}

以上です。

Published 2018-02-22
Updated 2019-06-25