パスの書き換えについて
a-blog cms のパス書き換え
a-blog cmsでは /themes/テーマ/ が ドキュメントルート的な扱いになります。 しかし、このままではパスがおかしくなるので、書き換えを行っています。 この機能より静的なサイトをそのまま themes に入れても動くようになります。
a-blog cmsでは /themes/テーマ/ が ドキュメントルート的な扱いになります。 しかし、このままではパスがおかしくなるので、書き換えを行っています。 この機能より静的なサイトをそのまま themes に入れても動くようになります。
タッチモジュールは、特定の条件に当てはまる場合にのみ動作するモジュールです。条件が満たされない場合は、その部分は一切出力されません。
以下の例では Touch_Entry モジュールを使って、詳細ページのときだけ表示することができます。詳細ページでない場合は <!— BEGIN_MODULE Touch_Entry —> で囲われた範囲は表示されなくなります。
<!-- BEGIN_MODULE Touch_Entry -->
<p>詳細ページです</p>
<!-- END_MODULE Touch_Entry -->タッチモジュールは大きく2つに分けられ、条件に合致する場合に動作するタッチモジュール、条件に合致しない場合に動作するNot系タッチモジュールがあります。
タッチモジュール例: Touch_Entry
Not系タッチモジュール例 Touch_NotEntry
各種タッチモジュールの機能や変数表・スニペットについてはリファレンス内のタッチモジュールのページをご覧ください。
独自のTwig関数 touch() を使って呼び出します。関数の戻り値は真偽値になっているので、if文をつかい表示・非表示を行います。
{% if touch('Touch_Entry') %}
<p>詳細ページです</p>
{% endif %}
touch関数は、module関数と違い既存のすべてのタッチモジュールを呼び出せます。
表示・非表示を制御しているのは、単なる「ifタグ」なので、条件式をtouch関数だけではなく組み合わせて利用することもできます。
{% if touch('Touch_Login') and IS_ADMIN %}
<p>ログイン中 かつ 管理ページの場合</p>
{% endif %}
setTemplate及びsetRenderedは Ver. 2.6.0 より追加されたテンプレート要素になります。setTemplate, setRenderedを使うとテンプレートの変数化ができ何度も同じテンプレートを使い回したり、複雑なレイアウトのページでも作りやすくなります。
作業テーマ: simple2016
作業テンプレート:/themes/simple2016/realestate/index.html
作業URL: http://ドメイン/
setTemplateはテンプレートが解決される前のテンプレートを変数化します。 また、setTemplateで囲まれたテンプレートは非表示になります。
例えば、インクルード用のファイルを用意して、そこによく使うようなテンプレートを で囲います。これで、そのインクルードファイルを一つインクルードするだけで、複数のテンプレートセットを使えるようになります。インクルード数が減り、テンプレートの管理がしやすくなります。
下のソースコードはsetTemplateでテンプレートを定義し、そしてgetTemplateでそれを実際に呼び出すサンプルとなります。
(例) /themes/simple2016/include/set_template.html に記述
<!-- インクルードファイル --> <!-- BEGIN_SetTemplate id="summary_a" --> <p>Aが呼ばれました。</p> <!-- END_SetTemplate --> <!-- BEGIN_SetTemplate id="summary_b" --> <p>Bが呼ばれました。</p> <!-- END_SetTemplate -->
(例)/themes/simple2016/entry.html に記述
<!-- 上のインクルードファイルをインクルード 。この時点では何も表示されません。--> <!--#include file="/include/set_template.html" --> <!-- 以下の一行のコードを呼び出すと、Aが呼ばれました。と表示されます。--> <!-- GETは一度だけではなく何度でも呼び出せます。 --> <!-- GET_Template id="summary_a" -->
またsetTemplate内で使える変数があります。この変数は呼び出し元(getTemplate)から値を代入できます。例えばページに応じて別のモジュールIDを使いたいときなどに便利です。この際の変数は{{}}(二重カッコ)で括ります。
以下の例では、defaultというモジュールIDでエントリーサマリーを呼び出しています。
<!-- GET_Template id="summary_a" module_id="default" -->
<!-- BEGIN_SetTemplate id="summary_a" -->
<!-- BEGIN_MODULE Entry_Summary id="{{module_id}}" -->
<!-- エントリーサマリーのソースが入ります -->
<!-- END_MODULE Entry_Summary -->
<!-- END_SetTemplate -->
またsetTemplateには変数の初期値を設定する機能があり、何も変数が代入されていない場合の値を以下のように決めておくことができます。
<!-- BEGIN_SetTemplate id="summary_a" module_id="default" -->
<!-- BEGIN_MODULE Entry_Summary id="{{module_id}}" -->
<!-- エントリーサマリーのソースが入ります -->
<!-- END_MODULE Entry_Summary -->
<!-- END_SetTemplate -->
<!-- GET_Template id="summary_a" --> <!-- モジュールIDがdefaultとして実行される -->
<!-- GET_Template id="summary_a" module_id="news_summary" --> <!-- モジュールIDが"news_summary"として実行される -->
simple2016テーマに/include/vars/all.htmlというファイルを作成し、それを/realestate/index.htmlでincludeします。 下記のようにgetTemplateすると下の図のような実行結果が得られるように/include/vars/all.html内でsetTemplateを定義しましょう。 nameに値が入っていればその値が出力結果に反映され、入っていなければデフォルトでa-blog cmsが表示されるようにしてください。 また、実行結果は ドメイン名/realestate/ で確認できるようにしてください。
<!-- GET_Template id="summary_a" --> <!-- GET_Template id="summary_a" name="hands-on" -->
実行結果
/realestate/index.htmlを編集して、
<!-- #include file="/include/entry/summaryCustom.html" -->
と書いてある部分をgetTemplateで呼び出せるようにしてください。その際、setTemplateが定義されたファイルは下記のように別途読み込んでください。 /include/entry/summaryCustom.html に書いてある内容を /include/vars/all.html にコピーして作業を開始すると便利です。 なお、物件情報にはエントリーがデフォルトで3件しか登録されていませんので、エントリー数を増やすか、モジュールの設定でエントリーの表示件数を減らすかしてページャーが表示されるようにしてください。
... <body> <!-- #include file="/include/vars/all.html" --> ...
実装のヒント:ページャーの有無、日付の有無にはそれぞれ以下のソースコードをご利用ください。
<!-- BEGIN_IF [{{date}}/eq/true] -->
<time>{date#Y}/{date#m}/{date#d}</time>
<!-- END_IF -->
<!-- BEGIN_IF [{{pager}}/eq/true] -->
<!-- #include file="/include/parts/pager.html" -->
<!-- END_IF -->
GET_Templateの例
<!-- GET_Template id="summary" date="true" pager="true" module_id="property_entry_summary" -->
完成系のイメージ
setRenderedはsetTemplateとは違い、テンプレートが解決された後に変数化します。IFブロックよりも後で実行されるということになります。
以下のソースコードはEntry_Summaryのページャーにあたる部分を変数化して、それを全く別の場所に表示している例になります。
<div class="acms-container">
<div class="acms-grid-r">
<div class="acms-col-md-9">
<!-- BEGIN_MODULE Entry_Summary id="summary" -->
...
<!-- BEGIN_SetRendered id="pager" -->
<!-- #include file="/include/module/entry/pager.html" -->
<!-- END_SetRendered -->
<!-- END_MODULE Entry_Summary -->
</div>
<div class="acms-col-md-3">
<!-- GET_Rendered id="pager" -->
</div>
</div>
完成系のイメージ
※パディングなどの見た目の調整はお好みに合わせて各自でスタイルを調整してください。
Ver.2.6.1よりsetTemplateを定義したファイル群をTemplate_VarsTableモジュールで囲うことで、変数表を生成できるようになりました。以下がそのサンプルのソースになります。
<!-- BEGIN_MODULE Template_VarsTable --> <!-- すべてのパーツの読み込み --> <!--#include file="/include/vars/base.html" --> <!--#include file="/admin/template/vars-table.html"--> <!-- END_MODULE Template_VarsTable -->
また、以下のようなコメント文をsetTemplate前に記述することでVarsTableに表示する内容を調整できます。
<!--@doc -->
この変数表はblog2016, site2016, bootstrap2016テーマにおいて /varstable.htmlにアクセスすることで閲覧することが可能になっています。参考にしてください。
site2016テーマよりvarstable.htmlをsimple2016テーマに同じファイル名で複製してみましょう。
完成系のイメージ
カスタムフィールドの情報を表示するには、フィールドモジュールを使う方法と、各ビルトインモジュールを使う方法があります。
フィールドモジュールの中にカスタムフィールドの変数を記述すると内容を出力することができます。
この記事は開発段階のものです。最終的な仕様のIFブロックのドキュメントの記事をご覧ください。
次期バージョン(執筆時1.7.0最新)でテンプレートエンジンの改良を考えています。 実はもう動いているものがあったりするのですが。 そこで今回は現在出来ているものを紹介したいと思います。
今回のテンプレートエンジンの改良点はIF(条件分)を使用できるようにした事です。 if文がなくても十分にサイトを作製する事は出来るのですが、どうしても細かい所で if文が必要な場合があります。そこで今回実装してみました。
<!-- BEGIN_IF [%{PAGE}/gte/5] -->
5ページ以上です
<!-- ELSE -->
4ページ以下です。
<!-- END_IF -->