福岡のWEBデザイン・ホームページ制作スタジオ|STUDIO KAZOO | スタジオ・カズー
福岡のWEB制作会社スタジオ・カズーが、あなたの想像力を最大限に引き出し、より美しく、より機能的なWEBサイトをご提供いたします。


ひさびさのブログ、かつMTネタです。
現在進行中の案件でMT5.0xのブログ記事一覧のページのカスタマイズをすることになりそうなため、テスト環境で試行錯誤してみました。
まず、管理画面のテンプレートはmt/tmpl/にあります。テンプレートをカスタマイズする場合は、ここのオリジナルファイルには手をつけずに、mt/alt-tmpl/ディレクトリを作成し、このalt-templにテンプレートファイルを複製してカスタマイズします。そうすると自動的にalt-tmple内のテンプレートが優先的に使用されるようになっています。ちなみに、カスタマイズしないテンプレートファイルは複製する必要はなく、カスタマイズするファイルのみalt-templに入れておきます。
今回の記事一覧ページのカスタマイズでは記事一覧にデフォルトで表示されている「タイトル」や「カテゴリ」、「ユーザー」、「作成」などを非表示にし、カスタムフィールドの内容を表示することをゴールとします。
ちなみに、MT5.1xでは管理画面の仕様が様変わりし、「表示オプション」の設定で簡単に表示したい項目を指定できるようになっていますがカスタムフィールドには対応していません。ただし、藤本壱氏が提供するプラグイン「CustomFieldsListing」を利用すると「表示オプション」からカスタムフィールドの表示設定もできるようになります。(欲しいプラグインを探すと、いつでも藤本氏のプラグインに行き着きます。感謝感謝。)
さて、とても便利な「CustomFieldsListing」ですが、残念ながら今回の案件はMT5.0xなため利用できません。よって、テンプレートをゴリゴリ書き換えるしかなさそうです。「ListingCustomField」というプラグインもあり、こちらはMT5.0xでもカスタムフィールドを記事一覧に表示できるようになりますが、残念ながらMT5.0xではデフォルトで表示されている「カテゴリ」や「ユーザー」などの項目を非表示にすることができないため今回は要件を満たしませんでした。
今、この記事を書きながら思ったのですが、テンプレートファイルをカスタマイズをしてデフォルトの項目ほ非表示にして、カスタムフィールドの表示に「ListingCustomField」を使うという手もアリかもしれません。これに関しては後日検証してみたいと思います。
では、記事一覧ページのカスタマイズの詳細です。今回は記事一覧の項目分部のカスタマイズはtmpl/cms/indlude/entry_table.tmplが対象となります。このファイルをalt-tmpl/cms/indlude/に複製し書き換えます。(alt-tmpl配下のディレクトリはオリジナルと同じになるように作成する必要があります)
テンプレートを開いて見ると、見慣れたMTタグとHTMLタグで構成されているのがわかります。記事一覧はテーブルで作られているためthタグの分部を修正すると項目名の修正ができます。例えば記事のタイトルを表示する部分には<__trans phrase="Title">と書かれています。この分部が日本語環境では翻訳されて「タイトル」と入るようになっているようです。
一行ずつ丁寧に内容を追っていけば、何がどこにあるかは直ぐに判ると思います。
ひとつ気をつけたいのは、記事一覧ページには「一括編集」の機能があり、選択した記事のタイトルやカテゴリなどを一覧のまま修正できる機能があります。一括編集の際の表示内容もこのテンプレートに書かれているため、不用意にフォームタグを削除すると一括編集ができなくなります。
テンプレートの内容を見ていて気づいたのですが、例えば通常のテンプレートの場合には記事タイトルを表示する際は<$mt:entryTitle$>などと書きますが、この管理画面のテンプレートでは<$mt:var name="title" .......略.......$>となっており、変数からタイトルの値を読んでいます。試しにこの分部を<$mt:entryTitle$>と書き換えてみると、うまくタイトルが表示されません。ということは、カスタムフィールドの値も通常の書き方ではうまく行かないのではと試してみたところ案の定ダメでした。
果たして変数はどこで定義されているのか??
色々調べているうちに「Movable Type5 プロフェショナルガイド」(p351)にピッタリの記述がありました。これによると管理画面に出力する情報はPerlのハッシュ変数paramに設定されおり、そこから値を取得している、とのことでした。さらにここでは管理画面のテンプレート内で通常のテンプレートタグを利用可能にするプラグイン「CMSContext」が紹介されていました。これで丸っと解決です。さらにこのプラグインは設定でブログごとにテンプレートファイルが指定できるため、マルチブログを構築する場合にもテンプレートの使い分けが出来て便利です。
さて、これでカスタムフィールドの内容を記事一覧に表示できるようになったのですが、問題が発生しました。カスタムフィールドの値はmt:entriesタグ内で取得して変数に格納した後に一覧のテーブルの中で読み出すようにしたのですが、記事が「下書き」の状態になるとmt:entriesでは値が取得できずに、記事一覧内の表示がズレてしまいました。カスタムフィールドの値はmt:entriesで囲まないと取得できないけれど、mt:entriesは公開されている記事の内容を取得するものなので「未公開」の記事は対象外となってしまいます。
色々調べたところ「RebuildPreview」というプラグインを発見しました。またまた、藤本壱氏のプラグインです。この方、本当に凄いです。
さて、このプラグイン、結構古いプラグインですが、MT5.0xでも問題なくインストールできました。もともとは公開前の記事をプレビューするのが目的のプラグインのようですが、このプラグインをインストールすると<MTEntriesWithDraft>というタグが使えるようになります。なんと、下書き状態の「未公開」記事も公開中の記事と併せて表示することができます!!素晴らしい。
これで、下書き中の記事のカスタムフィールドも無事に表示することができるようになりました。いやぁ、なかなか面白かったです。
しかし、やはりMTの醍醐味はプラグインです。プラグインがなければMTもここまで普及しなかっただろうと思います。プラグインを提供している方々に感謝です。