組み込み 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 件分(value と array)を取得 |
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() の結果は同じになります。
自動エスケープについて
プラグイン(拡張アプリ)の管理画面を作るには
保存通知・バリデーション・フォーム送信を伴う設定画面を作る場合は、このページの API に加えて posted / valid / errors / invalid などのメソッドと、フォームのバリデーション宣言を組み合わせます。詳しくは次を参照してください。
→ 設定画面を Twig で書く