Twigテンプレートで利用できる関数について説明します。
※ ドキュメントの準備ができていない項目については、Twigの公式サイトへのリンクを用意しています。
ログインユーザーオブジェクトを返します。 未ログイン状態の場合は false を返します。
auth()
パラメータ:
ありません。
ログインユーザーを表示する例:
{{ auth().name }}
※ログイン済みの管理画面以外で利用する場合は、 auth() が false を返さないことを事前に確認する必要があります。
パンくずナビゲーション情報を取得します。
breadcrumbs(categoryId)
パラメータ:
categoryId カテゴリIDを指定します。省略した場合は現在ページのカテゴリIDを元に情報を取得します。
<ol class="breadcrumb">
{% for breadcrumb in breadcrumbs() %}
{% if breadcrumb.url %}
<li class="breadcrumb-item"><a href="{{ breadcrumb.url }}">{{ breadcrumb.name }}</a></li>
{% else %}
<li class="breadcrumb-item active">{{ breadcrumb.name }}</li>
{% endif %}
{% endfor %}
</ol>
子フィールドを出力します。 この関数はコンテナフィールドの出力テンプレートで利用します。
child_field(field, index, parentField)
パラメータ:
field 子フィールド名
index コンテナ内のインデックス番号
parentField 親フィールド名
例:
{{ child_field(childFieldName, index, fieldName) }}
カレンダーコンテンツを表示します。 この関数で出力されるのは1日分のデータになります。
calendar(content)
パラメータ:
content カレンダーモデルのオブジェクトを渡します。
例:
{{ calendar(day.content) }}
引数のカレンダーオブジェクトのタイプを元に、そのカレンダーコンテンツ用のテンプレートを判定します。そのテンプレート使ってカレンダーオブジェクトの内容をレンダリングします。
ディレクトリを指定してカテゴリIDを取得します。
category_id(dir)
例:
{% for item in pages_in_category(category_id('/products/')) %}
<li><a href="{{ item.path }}">{{ item.name }}</a></li>
{% endfor %}
コレクションコンテンツを表示します。
collection(content)
パラメータ:
content コレクションモデルのオブジェクトを渡します。
※コレクションモデルのオブジェクトはクエリ機能やマッピングアクション機能を利用することで取得できます。
例:
{{ collection(collection) }}
引数のコレクションオブジェクトのタイプを元に、そのコレクションコンテンツ用のテンプレートを判定します。そのテンプレート使ってコレクションオブジェクトの内容をレンダリングします。
設定情報を取得します。
config(key, default)
パラメータ:
key 設定キー名を指定します。'cms.site_url' を指定した場合は、設定ファイルの cms.php の site_url 項目が指定されます。
default 設定キーが見つからない場合の利用する値を指定します。
例:
<a class="nav-link" href="{{ config('cms.site_url', '/') }}" target="_blank">
出力例:
<a class="nav-link" href="/" target="_blank">
設定キー名にドットを含めずに次のように 'calendars' を指定した場合は、system/config/calendars.php の内容全てを取得できます。
{% for type, calendar in config('calendars') %}
CSRF(クロスサイトリクエストフォージェリ)対策用トークンを返します。
csrf()
パラメータ:
ありません。
例:
{% set _csrf = csrf() %}
<input type="hidden" name="{{ _csrf.keys.name }}" value="{{ _csrf.name }}">
<input type="hidden" name="{{ _csrf.keys.value }}" value="{{ _csrf.value }}">
現在アクティブなメインメニューとサブメニューをセットします。 管理画面のメインメニューはセットされたグループがハイライト(アクティブ表示)されます。サブメニューにはセットされたグループのリンクリストが表示されて、指定されたサブメニューがハイライトされます。 ※この関数は主に管理画面での利用を想定しています。
current_menu(main, sub)
パラメータ:
main メニューマネージャにセットするメニューグループのキーを指定します。
sub メニューマネージャにセットするサブメニューのキーを指定します。
例:
{% do current_menu('system', 'user') %}
※パラメータの値は、admin.php の navigation 項目に設定したキー名を指定します。
現在のパスを返します。
※この関数は主に管理画面での利用を想定しています。
current_path()
パラメータ:
ありません。
例:
<div><a href="{{ url_for('admin.bookmark.edit', {}, {'name': pageName, 'url': current_path()}) }}">このページを登録する</a></div>
データコンテンツの内容を取得します。
data(path, options)
パラメータ:
path データコンテンツのファイルのパスを指定します。
options データコンテンツのオプション配列を指定します。
例:
{% set data = data('/data/data.ini', {'process_sections': true, 'scanner_mode': 'INI_SCANNER_TYPED'}) %}
dump関数を利用する場合は、基本設定ファイル ( settings.php ) のdebug項目を有効にする必要があります。
拡張子を元にコードエディターで編集可能かどうかを判定します。
※この関数は主に管理画面での利用を想定しています。
edit_with_code_editor(path)
パラメータ:
path パスまたはファイル名を渡します。
例:
{% if not file.is_dir and edit_with_code_editor(file.path) %}
<a class="btn btn-primary" href="{{ url_for('admin.theme.editFile', {}, {'path': file.path}) }}">編集</a>
{% endif %}
フィールドを出力します。 この関数はページやコレクションなどの各コンテンツのテンプレートで利用します。
field(field, content)
パラメータ:
field フィールド名
content コンテンツモデル(Page, Collection, Module, Calendar)のオブジェクト。現在のコンテンツを出力する場合は省略可能です。
text フィールドの内容を出力する例:
{{ field('text') }}
コンテンツ編集画面で text フィールドに入力した内容が、該当フィールドのテンプレートを使ってレンダリングされます。
コンテンツのオブジェクトを指定して出力する例:
{% for item in archive.items %}
...
{{ field('content', item) }}
...
{% endfor %}
たとえば、ページテンプレートでは該当のページコンテンツのフィールドには {{ field('text') }} というように第2引数なしで出力できます。 この例のようにアーカイブ用に取得したコンテンツが持つフィールドを出力したい場合には、第2引数にそのコンテンツオブジェクトを指定します。
コンテンツ編集画面の属性設定機能で入力された id, class, style 属性を出力します。
field_attr(field, defaultClass)
パラメータ:
field フィールド名
defaultClass デフォルトクラス(入力値の有無に関わらず出力される)
例:
<div {{ field_attr(field, 'card') }}>
data-id 属性にフィールドIDを出力します。
この関数はフィールドの出力テンプレートで利用します。
コンテンツ編集画面のプレビューパネルでは、フォーム部品と位置をあわせるために data-id属性が必要になります。
※フィールド設定で preview_input を指定している場合はこの関数の利用は不要です。
field_data_id(input)
パラメータ:
input インプット名を指定します。
例:
<div class="card-header" {{ field_data_id('title') }}>
{{ field.title }}
</div>
※data-id属性はコンテンツ編集画面のプレビューパネルに表示される場合のみ出力されます。
ファイルタイプ別のアイコン用クラス文字列を返します。
※この関数は主に管理画面での利用を想定しています。
file_type_icon(path)
パラメータ:
path ファイルコンテンツのパス
例:
<i class="{{ file_type_icon(filename) }}"></i> {{ filename }}
フラッシュメッセージオブジェクトを取得します。
※この関数は主に管理画面での利用を想定しています。
flash()
パラメータ:
ありません。
{% set flash = flash() %}
インプット部品のオプション設定を取得します。 フィールド設定の内容により、テーブルコンテンツの内容を返す場合と、設定ファイル内の設定値を返す場合があります。
get_options(input, $config)
パラメータ:
input インプット名を指定します。
config フィールド設定配列を指定します。
フィールドの入力テンプレートで利用する例:
<select id="{{ input_id('select') }}" name="{{ input_name('select') }}" class="form-control">
{% for optionKey, optionLabel in get_options('select', field) %}
<option value="{{ optionKey }}" {{ form.selected(input_id('select'), optionKey)|raw }}>{{ optionLabel }}</option>
{% endfor %}
</select>
get_options() で入力部品 select 用のオプションリストを取得しています。
フィールドの出力テンプレートで利用する例:
{{ get_options('select', config)[field.select] }}
この例では、get_options() 関数でオプションを取得して、返される配列のキーを直接指定しています。
画面遷移履歴を確認します。
管理画面の編集画面は複数の画面から遷移できる場合があります。その場合に戻るボタンのリンク先を確認するために利用します。
※この関数は主に管理画面での利用を想定しています。
history(name)
パラメータ:
name ヒストリー保存名
例:
{% if history('page') == 'category' %}
{% set back_path = url_for('admin.category.show', {'id': form.get('category_id')}) %}
{% else %}
{% set back_path = url_for('admin.page.listing', {'type': type}) %}
{% endif %}
カスタムフィールドのインプット部品のattr属性設定(配列)を、HTMLの属性としてキーと値に割り当てて出力します。
input_attr(input)
パラメータ:
input インプット名を指定します。
例:
<textarea class="form-control" id="{{ input_id('textarea') }}" name="{{ input_name('textarea') }}"
{{ input_attr('textarea')|raw }}>{{ form.field('textarea') }}</textarea>
{{ form.error(input_id('textarea'))|raw }}
カスタムフィールドの入力部品のid属性値を出力します。 この関数はフィールドの入力テンプレートで利用します。
input_id(input)
パラメータ:
input インプット名を指定します。
例:
<input type="text" id="{{ input_id('text') }}" name="{{ input_name('text') }}" class="form-control"
value="{{ form.field('text') }}" placeholder="">
このフィールド名が heading の場合は、id="heading-text" になります。 このid属性はコンテンツ編集画面のプレビュー側の出力部品の位置を合わせる場合などに利用されます。
カスタムフィールドのインプット部品のname属性値を出力します。 この関数はフィールドの入力テンプレートで利用します。
input_name(input, multiple)
パラメータ:
input インプット名を指定します。
multiple 値に true を指定すると、name属性値の最後の "[]" が追加されます。同じ名前のチェックボックスで複数選択させたい場合に指定します。
例:
<input type="text" id="{{ input_id('text') }}" name="{{ input_name('text') }}" class="form-control"
value="{{ form.field('text') }}" placeholder="">
content という名前のコンテナフィールド内に、text フィールドを配置した場合のname属性は次のようになります。
name="fields[content][0][text][text]"
入力テンプレートパスを返します。
フィールド設定からファイル名を決定し、公開テーマまたはCmsパッケージのテーマ内で該当テンプレートを探します。
※この関数は主に管理画面での利用を想定しています。
input_template_path(field, config)
パラメータ:
field フィールド名
config フィールド設定
例:
{{ include input_template_path(field, field) }}
現在リクエストのパスと指定されたパスが一致する場合は指定されたクラス名を返します。
is_current(path, class)
パラメータ:
path 比較するパス
class 一致した場合に出力するクラス名。省略時は cms設定ファイルの is_current 項目が採用されます。
例:
<a href="/products/" title="製品情報" class="nav-link {{ is_current('/products/') }}"><strong>製品情報</strong></a>
現在リクエストのディレクトリ部分のパスと指定されたパスが一致する場合は指定されたクラス名を返します。
is_current_dir(path, class)
パラメータ:
path 比較するディレクトリのパス
class 一致した場合に出力するクラス名。省略時は cms設定ファイルの is_current_dir 項目が採用されます。
例:
<a href="/products/" title="製品情報" class="nav-link {{ is_current_dir('/products/') }}"><strong>製品情報</strong></a>
現在リクエストのパスが指定されたパスを含む(指定パス配下の)場合は指定されたクラス名を返します。
is_parent(path, class)
パラメータ:
path 比較するパス
class 一致した場合に出力するクラス名。省略時は cms設定ファイルの is_parent 項目が採用されます。
例:
<a href="/products/" title="製品情報" class="nav-link {{ is_parent('/products/') }}"><strong>製品情報</strong></a>
コンテンツ編集画面のプレビュー表示かどうかを判定します。 ページテンプレートやフィールドの出力テンプレートは編集画面でプレビューとして表示される場合と、公開側のページとして表示される場合があります。 プレビューとして表示されている場合のみ何らかの出力をしたい場合や、その反対のケースでもこの関数を活用することができます。
is_preview()
例:
{% if is_preview() %}
<{{ config.preview_tag|default('span') }} {{ field_data_id('text') }}{{ field_attr(field) }}>
{{ field.text }}
</{{ config.preview_tag|default('span') }}>
{% else %}
{{ field.text }}
{% endif %}
日付フィールドが新しい順にコンテンツを取得します。新着情報のように最新データを数件だけ取得したい場合に活用できます。
latest(type, limit, baseType)
パラメータ:
type コンテンツタイプを指定します。
limit 取得件数を指定します。省略した場合のデフォルト値は 3 です。
baseType ベースタイプ(page, collection, module, calendar のいずれか)を指定します。各ベースタイプでユニークなコンテンツタイプを type パラメータに指定する場合は省略できます。
例:
{% for item in latest('info_article', 3) %}
...
{% endfor %}
ベースタイプを指定する例:
{% for item in latest('event', 10, 'calendar') %}
...
{% endfor %}
ベースタイプ(baseType)は基本的に省略可能です。たとえば、コレクションとカレンダーの両方に event というコンテンツタイプが存在する場合は、ベースタイプを区別するために指定してください。
メインメニュー情報を取得します。
※この関数は主に管理画面での利用を想定しています。
main_menu()
パラメータ:
ありません。
例:
{% for menu in main_menu() %}
<li class="nav-item px-3 {{ menu.active|then('active') }}">
<a class="nav-link" href="{{ url_for(menu.route) }}">{{ menu.name }}</a>
</li>
{% endfor %}
モジュールコンテンツを表示します。
module(type)
パラメータ:
type モジュールコンテンツのタイプ名または、モジュールコンテンツオブジェクトを渡します。
例:
{{ module('staff_links') }}
月カレンダーを表示します。
monthly_calendar(type, date, months)
パラメータ:
type カレンダーコンテンツのタイプ名を指定します。
date 表示するカレンダーの最初の日を Y-m-d (例:2018-02-01)形式で指定します。
months 表示する月数を指定します。デフォルト値は 1 です。
カレンダーアクションのテンプレートでの使用例:
{{ monthly_calendar(options.content, archive.getDateString(), options.month) }}
event タイプの今月の月カレンダーを表示する例:
{{ monthly_calendar('event') }}
event タイプの 2018年4月の月カレンダーを表示する例:
{{ monthly_calendar('event', '2018-04-01') }}
event タイプの今月と来月の月カレンダーを表示する例:
{{ monthly_calendar('event', months = 2) }}
※名前付き引数を使っているので第2パラメータの date は省略しています。引数を順番に指定する場合は、第2パラメータに null を指定すると今月になります。
月カレンダーのデータを取得します。 取得したデータを使い、表示を調整したい場合に利用できます。
monthly_calendar_data(type, date, months)
パラメータ:
type カレンダーコンテンツのタイプ名を指定します。
date 取得するカレンダーの最初の日を Y-m-d (例:2018-02-01)形式で指定します。
months 取得する月数を指定します。デフォルト値は 1 です。
例:
{% set calendar = monthly_calendar_data('event', months = 2) %}
{% for key, weeks in calendar.monthly() %}
<div class="col-md-6">
<h4>{{ key|date('Y年n月') }}</h4>
<table class="table table-bordered text-center">
<thead>
<tr>
{% for key, dayOfWeek in calendar.daysOfWeek %}
<th class="cal-{{ key }}">{{ dayOfWeek }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for week in weeks %}
<tr>
{% for day in week %}
<td class="{{ day.content.fields.holiday.checkbox|then('cal-holiday') }}">
{% if day %}
{{ day.date|date('j') }}
{% endif %}
</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
※赤色背景の日は休業日です。
</div>
{% endfor %}
data-id属性を出力します。 この関数はページやコレクションなどの各コンテンツのテンプレートで利用します。 コンテンツ編集画面のプレビューパネルではフォーム部品の位置を合わせるために data-id 属性が必要になります。 field() 関数を使っている場合は、field() 関数から呼び出さた各フィールドの出力テンプレート内で data-id 属性が出力されます。 ページテンプレートなどで、field() 関数を使わずに内容を直接出力している場合には data-id属性が出力されません。 その場合にこの関数を利用します。
page_data_id(id)
パラメータ:
id data-id 属性値
例:
<a href="{{ page.fields.left_link.href }}" {{ page_data_id('left_link-href') }} class="btn btn-primary">{{ page.fields.left_link.text }}<i class="fa fa-angle-right pull-right"></i></a>
field_data_id() 関数ではインプット名を指定しますが、page_data_id() 関数では、フィールド名とインプット名をハイフンで繋いだ値を指定します。 この場合、コンテンツ編集画面のプレビューパネルで表示する場合のみ data-id="left_link-href" が出力されます。
指定したカテゴリ内のページコンテンツを取得します。
pages_in_category(categoryId)
パラメータ:
categoryId カテゴリID
例:
{% for item in pages_in_category(page.category_id) %}
<li><a href="{{ item.path }}">{{ item.name }}</a></li>
{% endfor %}
ポートレットの内容を表示します。
※この関数は主に管理画面での利用を想定しています。
portlet(name)
パラメータ:
name ポートレット名を指定します。
例:
{% for name in portlets.top %}
{{ portlet(name) }}
{% endfor %}
クエリを実行してその結果を取得します。
query(key, params)
パラメータ:
key クエリ設定ファイル(query.php)に定義したクエリのキー名を指定します。
params パラメータ(プレースホルダ)が定義されたクエリの場合は、パラメータを指定します。
パラメータを持たないクエリの例:
{% set recommend = query('product_recommend') %}
パラメータを配列で指定する例:
{% for item in query('display_priority', {'number': 5}) %}
<li><a href="{{ item.path }}">{{ item.name }}</a></li>
{% endfor %}
単一のパラメータを指定する例:
{% for item in query('display_priority', 5) %}
<li><a href="{{ item.path }}">{{ item.name }}</a></li>
{% endfor %}
※ 複数のパラメータを持つクエリの場合にはこの方法では指定できません。
現在フィールド情報をセットします。
※この関数は主に管理画面での利用を想定しています。
set_field(field, parentField , index)
パラメータ:
field フィールド名
parentField 親フィールド名
index コンテナ内のインデックス番号
例:
{% for fieldName, field in config.fields %}
{{ set_field(fieldName) }}
{{ include(input_template_path(fieldName, field)) }}
{% endfor %}
コンテンツ編集画面でカスタムフィールドの入力部品を出力する前にループの現在のフィールド情報をセットしています。
サイトマップ情報を取得します。ページコンテンツでサイトマップ項目に「表示」を選択したコンテンツがサイトマップのアイテムとして取得されます。 「ルート直下のカテゴリグループ」と「カテゴリ」と「ページ」という3層の配列で情報が返されます。
sitemap()
例:
{% for root in sitemap() %}
<ul>
<li>
{% for item in root %}
{{ item.category.name }}
<ul>
{% for pageItem in item.pages %}
<li><a href="{{ pageItem.path }}">{{ pageItem.name }}</a></li>
{% endfor %}
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
現在メニューグループの報を取得します。
※この関数は主に管理画面での利用を想定しています。
sub_menu()
パラメータ:
ありません。
例:
{% for menu in sub_menu() %}
<li class="nav-item">
<a class="nav-link" href="{{ url_for(menu.route) }}"><i class="{{ menu.icon }}"></i> {{ menu.name }}</a>
</li>
{% endfor %}
指定したタイプのテーブルコンテンツを取得します。 Tableモデルのオブジェクトではなくデータのみが返されます。
table(type)
パラメータ:
type テーブルコンテンツのタイプ名を指定します。
{% set pref_code = table('pref_code') %}
公開サイトテーマのサイトルートパスを返します。
theme(path)
パラメータ:
path 公開サイトテーマディレクトリからのパスを任意で指定します。
例:
<link rel="stylesheet" href="{{ theme('css/site.css') }}">
テーマディレクトリ(cms.php の themes_dir 項目)に '/themes' が指定されていて、公開サイトテーマ(cms.php の theme 項目)に 'site' が指定されている場合は、上の例では次の内容を出力します。
<link rel="stylesheet" href="/themes/site/css/site.css">
テーマディレクトリのサイトルートパスを返します。
※ この関数は主に管理画面での利用を想定しています。
themes(path)
パラメータ:
path テーマディレクトリからのパスを任意で指定します。
例:
<link rel="stylesheet" href="{{ themes() }}/admin/css/style.css">
テーマディレクトリ(cms.php の themes_dir 項目)に '/themes' が指定されている場合は、上の例では次の内容を出力します。
<link rel="stylesheet" href="/themes/admin/css/style.css">
渡されたルートのパスを返します
url_for(routeName, data, queryParams)
パラメータ:
routeName ルート名を指定します。
data ルートプレースホルダを指定します。
queryParams クエリパラメータを指定します。
例:
<a href="{{ url_for('staff_detail', {'name': staff.name}) }}">{{ staff.name }}</a>
このHTMLファイルは Twig Team の著作物を複製・改変したドキュメントが含まれています。
著作物:https://twig.symfony.com/
著作権:Copyright (c) 2009-2020 by the Twig Team
ライセンス:https://twig.symfony.com/license