拙著「上手に稼ぐカラ売りテクニック」が発売されました。
株価が下がる局面で利益を得ることができる「空売り」について、詳しく解説した本です。
自由国民社刊で、定価1,512円(税込)です。
特定のカテゴリの記事だけ2種類のページを出力する
mixiのMovable Typeのコミュニティで、以下のような質問が出ていました。
ある特定のカテゴリに属したブログ記事だけ、2つの違ったフォーマットでページを出力したい
Movable Typeの標準機能だけではそのようなことはできませんが、擬似的に行うことは可能です。
その方法を紹介します。
1.ブログ記事アーカイブテンプレートを2種類作る
まず、ブログ記事アーカイブテンプレートを2種類作ります。
また、それぞれのアーカイブマッピングが別になるようにして、出力ファイル名が重複しないようにします。
例えば、以下のように2種類のブログ記事アーカイブテンプレートを作ります。
このようにすると、「ブログ記事」のテンプレートからは、「~/年/月/記事のベースネーム.html」のようなファイルが出力されます。
また、「ブログ記事2」のテンプレートからは、「~/年/月/記事のベースネーム-2.html」のようなファイルが出力されます。
用途 | テンプレート名 | アーカイブマッピング |
---|---|---|
すべてのブログ記事で使うテンプレート | ブログ記事 | yyyy/mm/entry-basename.html |
特定のカテゴリのブログ記事だけで使うテンプレート | ブログ記事2 | %y/%m/%-b-2.html |
2.エラーページへのリダイレクト
前述したように、「特定のカテゴリだけブログ記事アーカイブページを出力する」ということはできません。
1.のように2種類のテンプレートを作れば、すべてのブログ記事に対して、2種類のページが出力されます。
そこで、2種類目の(特定のカテゴリだけで使う)ページにアクセスがあったら、エラーページにリダイレクトするように、2種類目のブログ記事テンプレートを組むようにします。
例えば、A/B/Cの3つのカテゴリがあって、カテゴリAの記事だけ2種類のアーカイブページを出力したいとします。
この場合、カテゴリBとCの2種類目のアーカイブページにアクセスがあった場合に、エラーページへリダイレクトするように、テンプレートを組みます。
上にあげたような場合だと、2種類目のブログ記事アーカイブページのテンプレートを、以下のように組みます。
<MTSetVarBlock name="cat_label"><$MTEntryCategory$></MTSetVarBlock> <MTIf name="cat_label" eq="カテゴリAの名前"> カテゴリAのブログ記事の2種類目のブログ記事アーカイブページを出力する処理 <MTElse> エラーページへリダイレクトする処理 </MTIf>
「エラーページへリダイレクトする処理」の部分ですが、2種類目のブログ記事アーカイブページをhtmlファイルとして出力するなら、metaタグを利用して以下のようにすると良いでしょう。
<html> <head> <meta http-equiv="refresh" content="0; エラーページのアドレス"> </head> <body> </body> </html>
また、2種類目のブログ記事アーカイブページをphpファイルとして出力するなら、「エラーページへリダイレクトする処理」の部分を以下のようにして、phpのheader関数を使ってリダイレクトすることができます。
<?php header('Location: エラーページのアドレス'); ?>
3.プラグインを作ればスマートに解決可能
Movable Typeの標準機能だけで問題を解決しようとすると、ここまでであげたような手順になります。
しかし、プラグインを使えば、もっとスマートに解決することができます。
「build_file_filter」というタイプのプラグインを作ると、「特定の条件を満たす場合はテンプレートを再構築しない」というようにすることができます。
これを利用して、「カテゴリがAのブログ記事のみ、ブログ記事テンプレートXを再構築する」といった処理をすることができます。
4.WriteToFileプラグインを使う方法も
もう1つの方法として、先日公開したWriteToFileプラグインを使う方法もあります。
以下のように、通常のブログ記事アーカイブテンプレートに、特定のカテゴリだけ出力したい部分を入れ、その部分をMTWriteToFileタグで囲んで、別ファイルに出力するようにすることが考えられます。
・ ・(ブログ記事テンプレートの内容) ・ <MTSetVarBlock name="cat_label"><$MTEntryCategory$></MTSetVarBlock> <MTIf name="cat_label" eq="カテゴリAの名前"> <MTSetVarBlock name="fname">出力ファイル名を決める処理</MTSetVarBlock> <MTWriteToFile file="$fname"> カテゴリAのときだけ出力したい内容 </MTWriteToFile> </MTIf>