Craft CMS( Twig )で動的なキーと値で連想配列を作成する方法をご紹介します。ポイントはキーも動的に生成している点です。
今回は 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) }}
以上です。