メインコンテンツまでスキップ

テンプレートの再利用

@include: ディレクティブを使うと、現在のテンプレートに別のコンテンツを挿入できます。

レイアウトの共通化やコンポーネントの再利用に適した構文です。

ひとつのテンプレートに複数のコンテンツを挿入したり、インクルード先で更に別のコンテンツを挿入したりできます。

さらに、インクルード先に引数やクエリパラメータを渡すこともできます。

基本構文

@include: 'content_id';

'content_id' には、パレット CMS のコンテンツ ID を文字列として指定します。

引数(props)の渡し方

with 句で props を指定することで、インクルード先に任意の関数や定数を渡せます。

これらの値は props オブジェクトとして、インクルード先のテンプレート内で参照できます。

インクルード元の例:

@include: 'header' with {
props: {
title: 'マイページ'
}
};

インクルード先の例(header):

<head>
<title>{{ props.title }}</title>
</head>

クエリパラメータ(query)の指定

with 句で query を指定することで、インクルード先にクエリパラメータを付加できます。

インクルード先が検索一覧コンテンツであれば、検索条件をすべて引き継いだり、個別に指定することもできます。

詳細コンテンツであれば、表示対象の ID を渡せます。

フリーワード検索の例:

@include: 'search_form' with {
query: {
keyword: 'apple'
}
};
ヒント

query を明示して値を省略した場合は、現在のテンプレートに渡されているすべてのクエリパラメータ が自動的に引き継がれます。

@include: 'search_form' with { query };

組み合わせ例(props + query)

propsquery を同時に渡すこともできます。

@include: 'list_header' with {
props: {
title: '検索結果'
},
query: {
page: 2
}
};

コンテンツ ID に式を使う

条件に応じて挿入するコンテンツを切り替えたい場合は、式を使って動的にコンテンツ ID を生成できます。

@include: user.logged_in ? 'header_logged_in' : 'header_guest';

propsquery との併用もできます。

@include: user.role === 'admin' ? 'admin_nav' : 'user_nav' with {
props: {
section: 'dashboard'
}
};
まとめ
  • コンテンツ ID は文字列リテラルだけでなく、式も使用できます。
  • with 句でインクルード先に引数(props)や検索条件(query)を渡せます。
  • インクルード先では、props.key のようにして値を参照できます。
  • props および query はトップレベルの予約済みキーであり、必ず {} の直下に記述します。