拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
アーカイブの制御(その10・アーカイブページを部分的に出力しない)
サイトによっては、アーカイブページを部分的に出力したくないこともあり得ます。
例えば、以下のような例が考えられます。
- サイトには「新着情報」と「商品情報」のカテゴリがあります。
- 「新着情報」カテゴリでは、月別のアーカイブページを出力します。
- 「商品情報」のカテゴリでは、月別のアーカイブページは出力しません。
今日は、プラグインを利用して、アーカイブページの再構築を部分的に行わないようにする方法を紹介します。
1.build_file_filterについて
Movable Typeの通常の再構築では、アーカイブテンプレートの再構築は、すべてのブログ記事を対象にして行われます。
ところが、Movable Typeの内部の「build_file_filter」という仕組みを使うと、再構築を部分的に抑止することができます。
build_file_filterは、各ページの再構築を始める前に、Movable Typeがプラグインに対して「再構築しても良い?」と尋ねる仕組みです。
ここで、プラグインが「再構築するな」という返事をすると、そのページは再構築されなくなります。
2.NoRebuildプラグインのインストール
build_file_filterを利用するためのごくシンプルなプラグインとして、「NoRebuild」を作りました。
以下からダウンロードすることができます。
ダウンロードしたZipファイルを解凍すると、「NoRebuild」というフォルダができます。
このフォルダを、Movable Typeの「plugins」ディレクトリにアップロードします。
また、このプラグインをインストールすると、ファイル名に「*no_rebuild*」を含むページは、再構築されないようになります。
3.事例
以下のような事例を元に、NoRebuildプラグインを使う方法を解説します。
- ブログのIDは1番です。
- サイトには「新着情報」と「商品情報」のカテゴリがあります。
- 「新着情報」カテゴリの記事は、月別のアーカイブページを出力します。
アーカイブページのファイルの名は「カテゴリ/サブカテゴリ/年/月/index.html」にします。 - 「商品情報」のカテゴリの記事は、月別のアーカイブページは出力しません。
3-1.カテゴリ月別アーカイブの作成
この事例を実現するには、以下の手順を取ります。
- カテゴリ別に月別のアーカイブページを出力するようにします。
- アーカイブのパスを設定し、「商品情報」カテゴリの月別ページの出力ファイル名を「*no_rebuild*」に変えて、再構築されないようにします。
まず、アーカイブマッピングを新規作成して、カテゴリ月別アーカイブを出力できるようにします。
Movable Type 4.2の標準のテンプレートセットだと、「カテゴリ別ブログ記事リスト」というアーカイブテンプレートがあります。
このテンプレートを元に、カテゴリアーカイブが出力されています。
このテンプレートにアーカイブマッピングを追加して、カテゴリ月別アーカイブも出力できるようにします。
3-2.アーカイブのパスを決めるためのテンプレートモジュールを作成
次に、アーカイブのパスの設定を変えて、、「商品情報」カテゴリの月別ページの出力ファイル名が「*no_rebuild*」になるようにします。
以前に、アーカイブのパスにMTIncludeタグを使う方法を紹介しましたが、この方法を利用します。
まず、パスを出力するためのテンプレートモジュールを作ります。
今取り上げている例だと、以下のようにすると良いでしょう。
また、テンプレートモジュールの名前は、「カテゴリ月別アーカイブのパス」等にしておくとよいでしょう。
<mt:ApplyModifier trim="1"> <$mt:CategoryLabel setvar="cat_label"> <mt:If name="cat_label" eq="新着情報"> <$mt:FileTemplate format="%c/%y/%m/%i"$> <mt:Else name="cat_label" eq="商品情報"> *no_rebuild* </mt:If> </mt:ApplyModifier>
このテンプレートモジュールでは、2行目のタグで、カテゴリの名前を変数cat_labelに代入しています。
3行目のMTIfタグで、カテゴリの名前が「新着情報」であるかどうかを調べ、その条件が成立している場合は、4行目によってアーカイブのファイル名が「カテゴリ/サブカテゴリ/年/月/index.html」になります。
また、5行目のMTElseタグでは、カテゴリの名前が「商品情報」であるかどうかを調べ、その条件が成立している場合は、6行目によって、アーカイブのファイル名が「*no_rebuild*」になります。
3-3.アーカイブのパスの設定
最後に、アーカイブのパスの設定を変えます。
「カテゴリ別ブログ記事リスト」のアーカイブテンプレートを開き、アーカイブマッピングの部分を編集する状態にします。
そして、「カテゴリ-月別」のパスの部分で「カスタム」を選び、以下を入力します。
<$mt:Include module="カテゴリ月別アーカイブのパス" blog_id="1"$>
これによって、カテゴリ月別アーカイブの個々のページのファイル名は、「カテゴリ月別アーカイブのパス」のテンプレートモジュールによって決まるようになります。
そして、「商品情報」カテゴリのカテゴリ月別アーカイブのファイル名が「*no rebuild*」になります。
最終的に、NoRebuildプラグインの効果によって、「商品情報」カテゴリ月別アーカイブは出力されなくなります。