Movable Type
何かと不便なエントリータグを、メニューとして使える形にしてみました。
「Movable Type 3.3」になって新しく付いた機能にエントリータグがあります。エントリーの下部に付けて、表示させる分には費用順の機能だけで問題ないのですが、コレをメニューにして、サイドバー取り付けるとすると、標準で付いてくるタグクラウドを使う事になるんですが、エントリータグを制御するタグに、表示数をソートする機能が付いてないので、全てのエントリーに登録してあるタグが全部表示されてしまって大変な事になってしまうんですヨ。「Naga BLOG」の場合、幅広い話題で書いているモンですから、3ヶ月前ぐらいのエントリーに、エントリータグを付けただけで、エライ長いタグクラウドになって閉口してしまいました。どうにか解決方法は無いかと考えて、タグクラウドの使用は止めて、プルダウンメニュー化することにしました。
まず、ブログの管理画面から、「テンプレート」に入り、「インデックス」の項目で、「テンプレートを新規作成」押して、新しくテンプレートを作ります。テンプレート名を「ジャバスクリプト・ジャンプ」、出力ファイル名を「jumpmenu.js」して、下記のリストをテンプレートの内容に書き込み保存します。(既にジャンプメニューのJavaScriptを組まれている人は飛ばしてください。)
function MM_jumpMenu(targ,selObj,restore){ //v3.0 eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'"); if (restore) selObj.selectedIndex=0; }
次に、エントリータグのプルダウンメニューを表示させたいテンプレートのheadの部分に、下記の一文を入れて下さい。これで下準備は終わりです。
<script type="text/javascript" src="<$MTBlogURL$>jumpmenu.js"></script>
後は、下記のリストを、エントリータグのプルダウンメニューを表示させたいテンプレートの好きな場所に貼り付けて、再構築すれば、使っている全てのエントリータグをプルダウンで選択できるようになります。また、メニュー関係を、widget化している場合は、「モジュール」の項目で、「モジュールを新規作成」押して、新しくモジュールを作ります。テンプレート名をWidget: タグドロップダウンとかにして、下記のリストを書き込んで保存。その後、「Widget Manager」で表示したい場所にセットして、再構築をすればOKです。
<h2>Tags most used</h2> <form name="pulldown_entrytag" action=""> <select name="menu" onChange="MM_jumpMenu('parent',this,0)"> <option value="【使われているタグ】" selected="selected">【使われているタグ】</option> <MTTags> <option value="<$MTTagSearchLink$>">● <$MTTagName> (<$MTTagCount$>)</option> </MTTags> </select> </form>
これで、表示場所をとる事はなくなったのですが、たためるだけで、ダラダラと長いリストを表示する事には変わりが無く、使用頻度や更新時刻でソートして、しかも表示数も指定できるという方法は無いかと思っていたところ、「Ogawa::Memoranda」さんの「タグ機能はCompare/Collate Pluginと組み合わせて使うべし、なぜにゃらば!!」エントリーで、コレを実現できる方法を紹介されていたので、渡りに船とばかりに、即、実行しちゃいました。
実は、一つのプラグインで実現は難しくて、「Compare Plugin」と、「Collate Plugin」のプラグインを組み合わせて使います。「Compare Plugin」はフィルターとしての機能、「Collate Plugin」はソーターとしての機能を持っています。必要な項目だけを取り出すには「Compare Plugin」、適当な条件に対してソートしたり、ソートして最初の数件を取り出すというのに「Collate Plugin」を使います。この2つの機能を組み合わせて、エントリータグ郡から抽出したリストにソートをかけるという事が可能になります。
というわけで、ここからは、覚え書きも兼ねて手順を書いていきます。ただし、「Naga BLOG」向けにやった方法のみ記入しますので、別のやり方をしたい方は、「Ogawa::Memoranda」さんの「タグ機能はCompare/Collate Pluginと組み合わせて使うべし、なぜにゃらば!!」エントリーを読んで挑戦してみて下さい。
とりあえず、何はなくとも、プラグインが必要なので下記からダウンロードしてきます。
ダウンロードして、圧縮ファイルを解凍したら、「Compare.pl」と「MTCollate.pl」を、
FTPソフトでpluginディレクトリにアップロードして下さい。
次に、使用頻度の高いエントリータグを数個リストしたいので、Collate Pluginの機能を使います。まず先に、MTCollateCollectでタグ情報を取り出しておく必要があるので。下記のリストを、エントリータグを表示させたいテンプレートのheadの部分辺り(headじゃなくても問題なし)に入れて下さい。
<MTCollateCollect> <MTTags> <MTIfLessOrEqual a="[MTTagRank]" b="3" numeric="1"> <MTCollateRecord> <MTCollateSetField name="tag_name"><$MTTagName$></MTCollateSetField> <MTCollateSetField name="tag_id"><$MTTagID$></MTCollateSetField> <MTCollateSetField name="tag_count"><$MTTagCount$></MTCollateSetField> <MTCollateSetField name="tag_rank"><$MTTagRank$></MTCollateSetField> <MTCollateSetField name="tag_search_link"><$MTTagSearchLink$></MTCollateSetField> <MTCollateSetField name="tag_last_updated"><$MTTagLastUpdated format="%Y%m%d%H%M%S"$></MTCollateSetField> </MTCollateRecord> </MTIfLessOrEqual> </MTTags> </MTCollateCollect>
使わない命令の部分は削除しても問題無いのですが、今後の事も考えて、自分の場合はそのままで入れています。
次に、下記のリストを表示させたいページに貼り付けます。Widgetを使っている場合は、テンプレートを作って、「Widget Manager」で表示したい場所にセットして下さい。「MTTagRank」の値が3以下のエントリータグを、「Compare Plugin」で取り出して、「Collate Plugin」で、使用頻度や更新時刻でソートして20項目だけ表示させるように設定しています。
<h2>Tags most used</h2> <ul> <MTCollateList limit="20" sort="tag_count:#:-"> <li> <a href="<$MTCollateField name="tag_search_link"$>"><$MTCollateField name="tag_name" encode_html="1"$></a> </li> </MTCollateList> </ul>
後は、再構築して、ちゃんと表示されていたら完了です。
で、最終的にエントリータグのプルダウンメニューは、外してしまおうかとも考えたのですが、コレはコレで、1回しか使っていないようなエントリータグで、検索する時には重宝するので残しておきました。あんまり読者の皆様には関係ないとは思うのですが、エントリーを書く時に便利なので、勘弁して下さいナ。
というわけで、エントリータグを、より効率的に使いたい人は必須のカスタマイズだと思うので、是非挑戦してみて下さい。
--追記--
この2つプラグインって、処理的にかなり重いらしく、再構築をかけると500エラーが連発して処理が止まってしまう事態になってしまいました。色々対処してみたのですが、500エラーの連発は止まらず、特にカテゴリーアーカイブテンプレートが絡む部分で、必ず引っ掛かるといった具合です。
仕方がなく、カテゴリーアーカイブ、日付アーカイブ、個別アーカイブから削除しました。エントリーアーカイブと、月別アーカイブでは、500エラーが出なくなったのですが、カテゴリーアーカイブだけは500エラーが手続けるのです。基本的にエントリー数の増加で重いページが多くなっていて、それに使っている全てのエントリータグをプルダウンメニューで表示するという処理をさせているので、エントリータグが多くなるにつれて、より重くしているのが原因のようです。
ということで、カテゴリーアーカイブ、日付アーカイブ、個別アーカイブからは、エントリータグに絡む部分を全て外してしまう事になりました。で、思った通り、それから再構築時の500エラーは発生しておりません。
結論としては、このカスタマイズは、インデックスページだけにしておいた方が無難なようです。特にLOLLIPOP!とかの遅いサーバを使っている場合はです。