組み込み Twig 関数 acms_config


組み込み Twig 関数 acms_config()

acms_config() は、Twig テンプレートからコンフィグ(設定)を参照するための組み込み関数です。現在のコンテキストに対応するコンフィグセットやルールなどを考慮したコンフィグを 1 つのオブジェクトとして受け取り、メソッド経由で値を取り出します。

この関数は a-blog cms のすべての Twig 環境に組み込まれています。管理画面の差し込みだけでなく、公開側テーマの Twig でも使えます(公開側はテーマが Twig で描画される場合)。

設定画面(フォームと保存)を作るための機能は 設定画面を Twig で書く に分けて解説しています。このページでは値を参照するための API を扱います。


対応バージョン: Ver. 3.2.24 以降で利用できます。


基本

acms_config() の戻り値を変数に受けて、メソッドで値を取り出します。

{% set config = acms_config() %}

<p>{{ config.get('site_title') }}</p>

引数なしで呼ぶと、現在のコンテキストに対応するコンフィグセットやルールなどを考慮したコンフィグを参照します。

引数(スコープの指定)

特定のルール・モジュール・コンフィグセットのコンフィグを参照したい場合は、連想配列でスコープを指定します。

{% set config = acms_config({ blogId: 1 }) %}

キー

説明

blogId

int

ブログを指定する

configSetId

int

コンフィグセットを指定する

ruleId

int

ルールを指定する

moduleId

int

モジュールIDを指定する。(指定時は configSetId より優先)

値の重ね合わせ順

コンフィグは次の順に重ね合わされ、後のものが優先されます。

システムデフォルト(config.system.default.yaml, config.system.yaml)
  → ブログ設定(または configSetId 指定時はコンフィグセット)
  → ルール設定/モジュール設定(指定時)
  → POST 値(フォーム送信時)   ← デフォルトで重なる

最後の「POST 値の重ね合わせ」については後述します。公開側で参照する場合、通常 POST 値はないため、保存済みの値がそのまま返ります。

値を参照するメソッド

メソッド

戻り値

説明

get(key, default = null, index = null)

string

単一値を取得する。index で配列値の特定要素を取得

array(key)

array

配列値を取得する

selected(key, value, index = null)

Markup

値が一致すれば selected="selected" を出力

checked(key, value, index = null)

Markup

値が一致すれば checked="checked" を出力

field(key)

array

フィールド 1 件分(valuearray)を取得

group(name)

array

フィールドグループの行ループ配列を取得

all()

array

コンフィグ全体を取得

persisted()

ConfigAccessor

POST 値を重ねない版のアクセサを返す

引数のないメソッドは、Twig のプロパティ記法でも書けます(config.saved のように)。値を取るメソッドは config.get('key') のように呼びます。

単一値と配列値

{# 単一値 #}
<input type="text" value="{{ config.get('site_title') }}">

{# デフォルト値つき #}
{{ config.get('items_per_page', '10') }}

{# 配列値 #}
<ul>
  {% for tag in config.array('default_tags') %}
    <li>{{ tag }}</li>
  {% endfor %}
</ul>

select / checkbox / radio の状態

selected()checked() は、現在値と一致したときだけ属性文字列を返します。戻り値は Twig\Markup なので、自動エスケープを通さずそのまま属性として出力されます。

<select name="status">
  <option value="open" {{ config.selected('status', 'open') }}>公開</option>
  <option value="close" {{ config.selected('status', 'close') }}>非公開</option>
</select>

<input type="checkbox" name="notify" value="on" {{ config.checked('notify', 'on') }}>

フィールド / グループ

カスタムフィールドのように「1 キーに複数値」「グループの繰り返し」を扱う場合は field() / group() / all() を使います。

{# グループの繰り返し #}
{% for row in config.group('links') %}
  <a href="{{ row.url.value }}">{{ row.label.value }}</a>
{% endfor %}

persisted(保存済みの値だけを参照する)

acms_config() はデフォルトで、フォーム送信中の POST 値を最後に重ね合わせます。これはフォームの再描画でユーザー入力を保持するための挙動です。

「ユーザー入力ではなく、純粋に保存済みの値だけを見たい」場合は persisted() を使います。

{# POST 値を考慮せず、保存済みの値だけを参照 #}
{{ config.persisted.get('site_title') }}

閲覧側テーマで参照する場合は通常 POST 値がないため、get()persisted().get() の結果は同じになります。

自動エスケープについて

  • get() などで取り出した値を {{ }} で出力すると、Twig の自動エスケープが効きます(HTML 特殊文字はエスケープされます)。

  • selected() / checked() は属性として出力するため Twig\Markup で返され、エスケープされません。

プラグイン(拡張アプリ)の管理画面を作るには

保存通知・バリデーション・フォーム送信を伴う設定画面を作る場合は、このページの API に加えて posted / valid / errors / invalid などのメソッドと、フォームのバリデーション宣言を組み合わせます。詳しくは次を参照してください。

設定画面を Twig で書く