RealtimeRebuild/DivPagesプラグインを使ったページ分割(MTと公開サイトが別ドメインの場合)

以前に「RealtimeRebuild/DivPagesプラグインを使ったページ分割」という手法を紹介しました。
これに対して、「MTの管理画面のドメインと、公開サイトのドメインが異なり、分割後のページのアドレスにMTの管理画面のドメインが出ないようにしたい」という質問を受けました。
その方法を紹介します。

1.必要な環境

今回のカスタマイズではPHPのfile_get_contents関数を使います。
公開サイトにPHPを設置し、そこからRealtimeRebuildプラグインのアドレスにアクセスして、その結果を出力するという手法を取ります。
このため、公開サイトのドメインで、PHPが動作し、なおかつfile_get_contents関数でWebページを取得できる(allow_url_fopenがonになっている)ことが必要です。

2.一通り作業する

まず、以下の記事に沿って、とりあえずページ分割を行えることを確認しておきます。

3.「ページ選択」テンプレートモジュールの書き換え

次に、「ページ選択」テンプレートモジュールを以下のように書き換えます。

<mt:DivPagesIfMulti>
<div>
<mt:DivPagesLoop all="1">
  <mt:DivPagesIfCurPage>
    <span class="pager current"><$mt:DivPagesNumber$></span>
  <mt:Else>
    <span class="pager"><a href="<mt:If tag="DivPagesNumber" eq="1"><$mt:Var name="page_link"$><mt:Else><mt:SetVarBlock name="pager_link"><$mt:RealtimeRebuildPHPLink tmpl_name="$tmpl_name" tmpl_type="$tmpl_type" context="$context"></mt:SetVarBlock><$mt:GetVar name="pager_link" replace="mt-realtime-rebuild.php","pager.php"$>&page=<$mt:DivPagesNumber$></mt:If>"><$mt:DivPagesNumber$></a></span>
  </mt:DivPagesIfCurPage>
</mt:DivPagesLoop>
</div>
</mt:DivPagesIfMulti>

テンプレートモジュールを保存したら、このテンプレートモジュールをインクルードしている各テンプレートを再構築します。

4.PHPの設置

次に、対象のブログ(またはウェブサイト)にインデックステンプレートを1つ作り、以下のコードを入力します。
テンプレート名は任意で、出力ファイル名は「pager.php」にします。
また、「mt.cgiのディレクトリのアドレス」は、実際のアドレスに合わせて置き換えます。

<?php
$rr_url = 'http://mt.cgiのディレクトリのアドレス/plugins/RealtimeRebuild/mt-realtime-rebuild.cgi';
$allow_params = array('blog_id', 'tmpl_id', 'tmpl_type', 'cat_id', 'author_id', 'startdate', 'page');
$params = array();
foreach ($allow_params as $param) {
    if (isset($_GET[$param])) {
        $params[] = $param . "=" . $_GET[$param];
    }
}
$url = $rr_url . '?' . implode('&', $params);
echo file_get_contents($url);
?>

入力が終わったら、テンプレートを保存して再構築します。

これで作業は終わりです。
メインページ等から、分割後の各ページにアクセスしてみて、動作を確認します。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください