SSIを使用し全体再構築なしに更新する。
SSIを活用する
コンテンツデータの詳細ページに、再構築なしで最新情報を反映する方法です。
SSI用の構文をMTタグで出力し、詳細ページで出力した値をもとに、ページごとにコンテンツを出し分けます。
コンテンツデータ詳細ページは、コンテンツ更新時に全てのコンテンツ詳細ページの再構築は行われません。
更新させたいコンテンツがある場合、つどつどサイト全体の再構築が必要になります。
今回はこれを回避するSSIを使用した方法をご紹介します。
例えば、コンテンツデータ「ニュース」のコンテンツデータ詳細ページに、 カテゴリのコンテンツフィールド「ジャンル」に登録されている同じカテゴリのコンテンツを、コンテンツデータ「ニュース」から表示したい場合に使用できます。
サンプルテンプレート
コンテンツデータ詳細ページにて、SSI用の変数に判別したい値を設定します。
その直後に次で紹介するテンプレートから出力されてファイルをSSIで読み込みます。
<mt:ContentField content_field="ジャンル">
<!--#set var="category" value="<mt:CategoryLabel>" -->
</mt:ContentField>
<!--#include virtual="/path/filename.txt" -->
次に、インデックステンプレートにSSIでコンテンツデータの詳細ページに読み込むテンプレートを作成します。
<!--#if expr='v("category") != ""' -->
<mt:CategorySets name="ジャンル">
<mt:TopLevelCategories>
<mt:CategoryLabel setvar="CategoryLabel">
<mt:if tag="CategoryCount">
<!--#if expr='v("category") = "<mt:Var name="CategoryLabel">"' -->
<mt:Contents content_type="ニュース" field:コンテンツフィールドユニークID="$CategoryLabel" limit="3">
<mt:ContentLabel><br>
</mt:Contents>
<!--#endif -->
</mt:if>
</mt:TopLevelCategories>
</mt:CategorySets>
<!--#endif -->
テンプレートを再構築すると、以下のように、結果が出力されます。
詳細ページで出力したSSIの変数に設定した値をもとにコンテンツを判定します。
<!--#if expr='v("category") != ""' -->
<!--#if expr='v("category") = "お知らせ"' -->
コンテンツデータお知らせタイトル1<br>
コンテンツデータお知らせタイトル2<br>
コンテンツデータお知らせタイトル3<br>
<!--#endif -->
<!--#if expr='v("category") = "プレスリリース"' -->
コンテンツデータプレスリリースタイトル1<br>
コンテンツデータプレスリリースタイトル2<br>
コンテンツデータプレスリリースタイトル3<br>
<!--#endif -->
<!--#endif -->
引数を複数用意することで、値の出し分けも可能です。
SSIの記述はサーバーで許可されていれば、Movable Type、PowerCMSで動作します。
apacheのバージョンによっては、ifの構文を 「if expr='v("category") != ""'」から「if expr='$category != ""'」にここに変更してください。
よく使うSSI構文
おまけです。MTサイト構築に使えるSSI構文をまとめました。
SSIを有効にする
初期設定で無効になっています。httpd.conf か .htaccess に以下を追加して有効にします。
AddHandler server-parsed .html
SSIはサーバー負荷がかかりますし、セキュリティレベルも低下します。
有効にする場合はサーバーエンジニアへ事前に伝えておきましょう。
ファイルを読み込む
MTから出力したファイルや、サーバー上のファイルを読み込む際に使用します。
<!--#include virtual="/path/filename.txt" -->
変数を設定する
<!--#set var="変数名" value="値" -->
変数の値を出力する
<!--#echo var="変数名" -->
変数の値を判別する
<!--#if expr='v("変数名") = "値"' -->
---表示したい内容----
<!--#elif expr="($変数名 = 値) && ($変数名 = 値)" -->
---表示したい内容----
<!--#else -->
---表示したい内容----
<!--#endif -->
<!--#if expr='v("変数名") != ""' -->
---変数に値がある場合に実行する----
<!--#endif -->