「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
テンプレートの種類を判断するプラグイン
Movable Typeでは、テンプレートモジュールを使うと、複数のテンプレートの共通部分を一箇所にまとめることができます。
そして、MTIncludeタグを使うことで、テンプレートモジュールを他のテンプレートに組み込むことができます。
日別/月別/カテゴリーの各アーカイブテンプレートは、内容がかなり似通っています。
そこで、テンプレート全体をテンプレートモジュール化して、アーカイブごとに違うところを条件判断で処理を分けるようにすれば、これらのテンプレートをかなり共通化することができます。
そのようなことをするために、テンプレートの種類を判断するプラグインを作成しました。
1.プラグインのインストール
以下のアドレスにアクセスすると、プラグインのソースコードをダウンロードすることができます。
ファイルには「IfTemplateType.pl」という名前をつけて保存します。
プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。
また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。
Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。
ダウンロードが終わったら、そのファイルをMovable Typeの「plugins」ディレクトリにアップロードします。
2.追加されるタグ
このプラグインをインストールすると、「MTIfTemplateType」という条件タグが追加されます。
「type」というアトリビュートを使って、テンプレートの種類を判断します。指定できる値は以下の通りです。
値 | 内容 |
---|---|
Index | インデックステンプレートかどうかを判断する |
Category | カテゴリーアーカイブテンプレートかどうかを判断する |
Monthly | 月別アーカイブテンプレートかどうかを判断する |
Weekly | 週別アーカイブテンプレートかどうかを判断する |
Daily | 日別アーカイブテンプレートかどうかを判断する |
Individual | エントリーアーカイブテンプレートかどうかを判断する |
3.利用例
例えば、テンプレートモジュールを1つ作り、以下のようにタグを組むとします。
<MTIfTemplateType type="Index"> インデックステンプレートです。 </MTIfTemplateType> <MTIfTemplateType type="Category"> カテゴリーアーカイブテンプレートです。 </MTIfTemplateType>
このテンプレートモジュールをインデックステンプレートに組み込むと、組み込んだ位置に「インデックステンプレートです。」と表示されます。
また、カテゴリーアーカイブテンプレートに組み込むと、その位置に「カテゴリーアーカイブテンプレートです。」と表示されます。
そして、それ以外のテンプレートでは、何も表示されません。
4.複数種類のテンプレートで共通の処理をしたい場合
「日別と月別のテンプレートでは前後のアーカイブページへのリンクを表示し、それ以外ではリンクは表示しない」というような場合、「日別」と「月別」のどちらかかどうかを判断して、処理を分ければ良いことになります。
そこで、複数種類のテンプレートのどれかに該当するかを判断することもできます。
それには、typeアトリビュートにテンプレートの種類を指定する際に、コンマで区切ってテンプレートの種類を並べます。
例えば、以下のようなテンプレートモジュールを作り、それぞれのテンプレートに組み込むと、月別または日別アーカイブテンプレートの場合のみ、前後のアーカイブページへのリンクが出力されます。それ以外のテンプレートでは何も表示されません。
<MTIfTemplateType type="Monthly,Daily"> <MTArchivePrevious> <a href="<$MTArchiveLink$>"><< <$MTArchiveTitle$></a> | </MTArchivePrevious> <a href="<$MTBlogURL$>">Main</a> <MTArchiveNext> | <a href="<$MTArchiveLink$>"><$MTArchiveTitle$> >></a> </MTArchiveNext> </MTIfTemplateType>
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください
bzbell
こんにちわ^^
MTIfTemplateTypeプラグイン使わせていただきました。
わたしの中ではかなり重宝しそうなプラグインの1つになりそうです。
ありがとうございます。
footbrain
こんばんは。
本当にお世話になっています。
「再構築不要化カスタマイズ」を利用したダイナミック・パブリッシング化作業に伴い「DivPages.pl」を利用して、ページ分割しておりますが、
テンプレートの種類によってページを移動するためのリンク表記を変えているので、この「テンプレートの種類を判断するプラグイン」は、とても重宝しています。
ありがとうございます
僕のブログでは、Categoryアーカイブにテンプレートを二つ作成して、エントリーの配列を昇順と降順に切り替えるような事を行っているので、できれば、テンプレートの種類に加えて、テンプレート名で判断できるようになると、もっと便利に使えるだろうと思うのですが、いかがでしょう?
対応していただく事は可能でしょうか:pp_06.gif:
壱
>footbrainさん
こんにちは。
ご希望の件ですが、再構築処理の中では、再構築対象のテンプレートの名前を調べる方法がないようです。
そのため、このプラグインでは対処できません。
代わりの策として、MT標準のMTSetVarタグと、拙作のVarHandlerプラグインを組み合わせる方法があります。
個々のテンプレートの先頭に「<$MTSetVar name="tmpl_name" value="テンプレート名"$>」のようなタグを入れておき、テンプレート名を判断したい箇所を以下のように書きます。
<MTIfStrVar name="tmpl_name" value="テンプレート名1">
テンプレート1の時に出力する内容
</MTIfStrVar>
<MTIfStrVar name="tmpl_name" value="テンプレート名2">
テンプレート2の時に出力する内容
</MTIfStrVar>
footbrain
>壱さん
スゴイ!
これは他にも使えそうです。
VarHandlerプラグインは<MTElse>も使えるんですね。
壱さんが作られた4つのプラグインを駆使して、長い間やりたかった事ができるようになりました。
本当にありがとうございます。
実は、まだ昇順にソートしたカテゴリー・アーカイブページを、DivPagesを使って分割したいと思っているのですが、<MTEntriesDivPages sort_order="ascend">と書くと、ページ内でしか昇順にソートされないので、悩んでいます。:pp_02.gif:
<$MTDivPagesInit per_page="10" sort_order="ascend">と書けるのかなと思い、試してみたが駄目でなんですね。:pp_08.gif:
壱
>footbrainさん
こんにちは。
MTEntriesDivPagesタグは、内部的にはMTEntriesタグの処理を呼び出し、以下のようにするのと同じことを行っています。
<MTEntries offset="飛ばすエントリーの件数" lastn="ページあたりのエントリーの数">
これとsort_orderを組み合わせると、お書きになったような現象が起こりました。
ということで、この問題はMTの不具合だと思われます。
とりあえず、シックス・アパートにフィードバックを送っておきました。
footbrain
>壱さん
こんにちは。
いろいろとありがとうございました。
MTの不具合ですか。
これでようやく納得できました。:pp_05.gif: