インクルード

テンプレート内に外部ファイルを読み込む

いくつかのテンプレートファイルを作成していると、サイト内の共通部分を再利用できるように管理をしたい場合があります。a-blog cmsでは、テンプレート内に外部ファイルを読み込むインクルード機能があり、任意のファイルをテンプレート内に表示できます。

Ver. 2.8.0 以上

Ver. 2.8.0 から新しい記法でインクルード文がかけるようになりました。以前のインクルードはただファイルを読み込んでくるだけでしたが、新しいインクルード文には、変数を読み込み先テンプレートに渡せる機能が追加されています。

* Ver. 2.7以下の記法でも動作しますので、バージョンアップしても大丈夫です。

読み込み元

@include("/path/to/file", {"key": "value", "key2": "value2"})

読み込み先

<p>{{key}}</p>
<p>{{key2}}</p>

変数の渡し方は、@include()の第2引数に、JSON形式で渡します。変数の使い方は、通常の変数と違い2重の中括弧で囲むことで表示できるようになります。

デフォルト値

変数が空だったり引数として渡されなかった場合に、デフォルト値を設定できるようになっています。 |(パイプ)で区切り、default(" ") で定義できます。また、|(パイプ)で区切るものはデフォルト値だけでなく、別変数も記述できます。その場合は、左から見ていき空でない値があったときに、その変数が表示されます。

{{key | key2 | default("デフォルト値")}}

例:Ver. 2.7.x 以下

<!--#include file="/include/sample.html"-->
<!--#include file="http://www.example.com/include/sample.txt"-->

上記の表記については、SSI(サーバーサイドインクルード) と同様の記述になりますが、a-blog cms がSSIを使ってインクルードをしているという事ではありません。Adobe Dreamweaver のデザインビューでインクルード後の画面が表示されるように同じ表記としています。

また、インクルードの記述をする際には、相対パスで記述する事も可能ですが、絶対パスで設定する事をおすすめします。絶対パスのルートについてはテーマのディレクトリがルートディレクトリとなり、SSIとは違う解釈となります。

setTemplate setRenderedを使いこなそう

setTemplate及びsetRenderedは Ver. 2.6.0 より追加されたテンプレートエンジンです。setTemplate, setRenderedを使うとテンプレートの変数化ができ、何度も同じテンプレートを使い回したり、複雑なレイアウトのページでも作りやすくなります。

作業場所

作業テーマ: simple2016
作業テンプレート:/themes/simple2016/realestate/index.html
作業URL: http://ドメイン/

ハンズオン内容

  • setTemplateを理解する
  • setRenderedを理解する
  • 変数表(VarsTable)を利用する

SetTemplateを理解する

setTemplateはテンプレートが解決される前のテンプレートを変数化します。 また、setTemplateで囲まれたテンプレートは非表示になります。
例えば、インクルード用のファイルを用意して、そこによく使うようなテンプレートを <!-- BEGIN_SetTemplate id="" --><!-- END_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"として実行される -->

ハンズオン課題1:デフォルトで「a-blog cmsが呼ばれました。」と表示し、「a-blog cms」の部分を変更可能なテンプレートを作成してみましょう。

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" -->

実行結果


ハンズオン課題2:/realestate/のページにてエントリーサマリーを以下の仕様を満たすテンプレートに作り変えましょう

  • 変数でモジュールIDを設定可能、デフォルトでsummary_indexを表示する
  • 変数で日付のあり、なしを設定可能(デフォルトでは日付なし)
  • 変数でページャーのあり、なしを設定可能(デフォルトではページャーなし)

/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を理解する

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/parts/pager.html" -->
      <!-- END_SetRendered -->
    <!-- END_MODULE Entry_Summary -->
  </div>
  <div class="acms-col-md-3">
    <!-- GET_Rendered id="pager" -->
  </div>
</div>

ハンズオン課題3:先ほど作成したテンプレートを編集し下の図のように上下にページャーがつくようにしてみましょう。

完成系のイメージ


※パディングなどの見た目の調整はお好みに合わせて各自でスタイルを調整してください。

変数表を使用する

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
-->
  • id:テンプレートのID名
  • param:テンプレートに代入できる変数名(複数指定可)
  • author:テンプレートの作成者名
  • create:作成日


この変数表はblog2016, site2016, bootstrap2016テーマにおいて /varstable.htmlにアクセスすることで閲覧することが可能になっています。参考にしてください。

ハンズオン課題4:課題2で作成したテンプレートを表示する変数表を作成してみましょう。

site2016テーマよりvarstable.html複製し、同じファイル名でsimple2016テーマに設置してみましょう。

完成系のイメージ


v2.0.0 RC1 ダウンロード

a-blog cms v2.0 のリリース候補版となる a-blog cms v2.0RC1を公開いたします。 a-blog cms v2.0 は、これまでの使いやすさはそのままに、高度な管理機能の追加や、テーマ・管理画面の全面刷新を行い、新たなバージョンとして生まれかわりました。


v2.0 では機能別にライセンスが増えました

v2.0 では機能別にライセンスが増えました

間もなく正式版が公開となりますが、主要な機能やデザインについてご確認いただけます。是非新しいa-blog cmsをお試しください。

このバージョンは開発版になりますので、運用中のサイトにはインストールしないで下さい。また、バージョンアップは手作業で修正しないといけない作業がありますので、新規インストールのみのご利用となります。機能はスタンダードライセンス相当となります。

(RC1のダウンロードは終了いたしました。RC2をご利用ください)

v2.0の新機能

  • 管理ページを刷新
  • メディア管理
  • ゴミ箱
  • タイムラインモジュール(拡張アプリ, iOSアプリ)
  • CKEditorのバージョンアップ
  • ベンチマークモードでの表示項目を追加
  • テキストユニットに拡張フィールドを追加
  • 画像ユニットなどにパーセントサイズ指定が出来るように変更
  • マルチ言語対応ユニットカスタマイズ
  • エントリー系モジュールで複数ID指定を可能に
  • テンプレートエンジンにIF文を追加
  • キャッシュクリアのフックポイントを追加
  • テンプレートのパスを書き換えないオプションを追加
  • config.system.yamlをユーザ定義で上書きできるように変更
  • アーカイブスにある画像パスのドメインを変更できるオプションを追加
  • include virtualでもインクルード出来るように変更
  • カスタムフィールドグループで最大数を制限できるように変更
  • underscore.jsを標準搭載
  • 現在のURLのままログインできるように変更
  • フォームのログで管理者、送信者宛のメールを両方とるように変更
  • 動的フォーム機能
  • バージョン管理機能
  • テーマ類を刷新
  • ユニットグループをクリアするクラスを用意
  • IPが変わってもログアウトしないオプションを用意
  • ダイレクト編集のアップデート
  • 画像の保存・削除のフックポイントを用意
  • ユーザの情報にアイコン画像を追加
  • バックアップでメモリ消費を押さえるロジック変更

リニューアルされた管理ページ

スマホサイズの時

グローバル変数

テンプレートファイルのどこでも使える変数

通常、{title} のように記述される変数はモジュールの中に記述されている必要がありますが、グローバル変数はテンプレートのどこに記述しても編集されます。

グローバル変数の一例

%{BLOG_NAME}表示ページが属するブログの名前
%{CATEGORY_NAME}表示ページが属するカテゴリーの名前
%{KEYWORD}URLコンテキスト上で、指定されたキーワード
%{CID}カテゴリーID
%{EID}エントリーID

他の機能との組み合わせ

グローバル変数とインクルード機能を組み合わせて使うと、表示ページのカテゴリー毎に違うテンプレートファイルを読み込むという使い方もできます。

<!--#include file='/admin/entry/category%{CID}.html'-->

このような組み合わせでテンプレートのカスタマイズをする事は多くあります。特定のカテゴリーの時だけ利用したいカスタムフィールドを書いたテンプレートファイルを読み込む際に大事なテクニックの1つになります。

各種グローバル変数についてはリファレンス内のグローバル変数のページをご覧ください。