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で動作します。

よく使う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 -->