ホーム > サポート・マニュアル > マニュアル > カスタマイズの方法 > 仕様・特徴 > システムの処理順序

マニュアル

システムの処理順序

ドキュメント最終更新日時:2010/07/05 17:12

タグ:グローバル変数 インクルード ローカル変数 

ここでは、a-blog cmsのシステムがテンプレートに記述されたモジュールや変数などをどのような順序で処理をしているのかについて、説明します。

例1 グローバル変数・インクルード・ローカル変数の処理順

a-blog cmsはモジュールやグローバル変数、インクルードを使用してテンプレートを記述しますが、これらの専用のコードは、システムが処理する順番が以下のようになっています。

  1. グローバル変数(ex. %{BID})
  2. インクルード(ex. <!--#include file="example.html" -->)
  3. モジュール内のローカル変数(ex. {categoryUrl})

それでは以下のようなコードの場合、システムはどのような順序で処理を実行するでしょうか。

<!-- BEGIN_MODULE Entry_Headline -->
<ul><!-- BEGIN entry:loop -->
	<li><a href="{url}">{title}</a><!-- BEGIN category:veil --> 【{categoryName}】<!-- END category:veil -->{date#y}年{date#m}月{date#d}日( {date#week} )</li><!-- END entry:loop -->
</ul>
<p><!--#include file="%{CCD}Sample.html" --></p>
<!-- END_MODULE Entry_Headline -->

1. グローバル変数

まずは、グローバル変数が処理されますので、5行目にある%{CCD}が出力されます。この例では、現在表示中のページのURLコンテキストがhttp://www.example.com/news/で「news」というカテゴリーを表示している場合、カテゴリーコードの%{CCD}が出力されますので、「%{CCD}Sample.html」の部分のグローバル変数が処理されて「newsSample.html」となります。

これで5行目のコードは「newsSample.html」というファイルをインクルードする、という内容になります。

<!-- BEGIN_MODULE Entry_Headline -->
<ul><!-- BEGIN entry:loop -->
	<li><a href="{url}">{title}</a><!-- BEGIN category:veil --> 【{categoryName}】<!-- END category:veil -->{date#y}年{date#m}月{date#d}日( {date#week} )</li><!-- END entry:loop -->
</ul>
<p><!--#include file="newsSample.html" --></p>
<!-- END_MODULE Entry_Headline -->

2. インクルード

次にインクルードが処理されます。インクルードするファイルを参照し、そのファイルがあれば内容をインクルードし、ファイルがなければ何も出力されません。

今回の例では、項目1でグローバル変数が出力され「newsSample.html」というファイルをインクルードする、という内容になりました。「newsSample.html」というファイルが適用中のテーマ内にあれば「newsSample.html」に記述されているコードを出力し、ファイルがなければ何も出力されない状態になります。

以下のソースは「newsSample.html」というファイルが存在し、その内容がインクルードされた状態のものです。(5行目)

<!-- BEGIN_MODULE Entry_Headline -->
<ul><!-- BEGIN entry:loop -->
	<li><a href="{url}">{title}</a><!-- BEGIN category:veil --> 【{categoryName}】<!-- END category:veil -->{date#y}年{date#m}月{date#d}日( {date#week} )</li><!-- END entry:loop -->
</ul>
<p>newsSample.htmlに書いてある内容がインクルードされました。</p>
<!-- END_MODULE Entry_Headline -->

3. モジュール内のローカル変数

最後に、モジュール内のローカル変数が処理されます。以下のコードはローカル変数が処理された後の状態のものです。

<ul>
	<li><a href="entry-3.html">エントリー3</a> 【お知らせ】2010年07月01日( 木 )</li>
	<li><a href="entry-2.html">エントリー2</a> 【お知らせ】2010年06月30日( 水 )</li>
	<li><a href="entry-1.html">エントリー1</a> 【お知らせ】2010年06月28日( 月 )</li>
</ul>
<p>newsSample.htmlに書いてある内容がインクルードされました。</p>

処理順序の関係でうまく出力されない例

インクルードする部分にローカル変数を記述すると、ローカル変数よりもインクルードが先に処理されます。

<!--#include file="{categoryCode}.html" -->

例えばカテゴリーコードをキーにしてファイルをインクルードしたい場合(カテゴリーコードが「news」のときに「news.html」というファイルをインクルードしたい場合)、上のコードだとうまく出力されません。システムの処理順序はグローバル変数→インクルード→ローカル変数ですので、上のコードの場合にはローカル変数である{categoryCode}よりも先にインクルードが処理されてしまいます。

この場合には、ローカル変数ではなくグローバル変数で記述すると処理順序により正常に出力されるようになります。

<!--#include file="%{CCD}.html" -->

↓ 1. グローバル変数が処理される

<!--#include file="news.html" -->

↓ 2. インクルードが処理される

news.htmlの内容

例2 モジュールの入れ子の処理順

モジュールは、異なるモジュール同士であれば入れ子にすることができます。モジュールを入れ子にすると、システムは入れ子の一番内側から外側に向けて処理していきます

<!-- BEGIN_MODULE Entry_Body -->
<!-- BEGIN_MODULE Comment_List -->
<!-- END_MODULE Comment_List -->
<!-- END_MODULE Entry_Body -->

上のコードの場合、内側にあるモジュールの「コメントリスト」→「エントリー本文」の順に処理されます。



携帯アクセス解析