Home > Internet > Movabletype > MT5でのTemplateShelf

MT5でのTemplateShelf

asiamothのアニキに「むきょー!」とまで言わせた、あの伝説のプラグインが帰ってきました。

そうあのプラグイン。「Template Shelf」です。「もう最高:TemplateShelfプラグイン - WolaWola

MT4.0の頃に出て、それからながらくノーメンテのまま、MT4.2あたりからきちんと表示されなくなっていたのですが、つい最近といっても8月ごろ、「arvind's movabletype-templateshelf at master - GitHub」に1.01というのが登場したみたいです。もっとも以前からSubversion上で改修行われていましたし、GitHubに移ってからもしばらく経ってるようです。
ちなみにPlugin Directoryでも1.01が公開されてます。「Template Shelf | MovableType.org - Home of the MT Community

これを最近のMTに入れて試してみると、MT4.24 - 動く・MT4.261 - 動かない・MT4.31 - 動く となりました。
なんか不思議ですが、今回の目的はMT5で動くかどうかです。
まんま入れてみると・・・

TemplateShelf1.01をMT5ベータ3に入れると

ちゃんと動くみたいです。プルダウンを表示させると・・・

ちゃんと他のテンプレートも表示されます

きちんとアーカイブテンプレートやテンプレートモジュールも表示されます。動作するかどうかといえば、問題なく動作しますねぇ。でもちょっと待ってください。なんか表示されてるテンプレート名が、やけに短く折り返されてませんか?後半部分の空白なんだよ!

犯人はコレ

Firebug使って出力されたソース確認しました。犯人はコレ。この選択状態を表すアイコンの表示エリア。モーダル表示でソースを編集するものらしいですが、私は使った事ありませんし、使うためにはMT5用への修正も必要になります。という訳で、消しちゃえ!

TemplateShelf プラグインフォルダの中の「tmpl」フォルダ内にある「template_shelf.tmpl」というのをいじります。
100行目あたりにある「function createRow(tmpl)」の中身、107行目あたりの以下の部分が、表示している部分です。

            html += '<td><a href="#" onclick="return openDialog(this.form, \'view\', \'_type=template&amp;blog_id=' + tmpl.blog_id + '&amp;id=' + tmpl.id + '&amp;dialog=1\')"><img src="<mt:var name="static_uri">plugins/TemplateShelf/images/shape_move_backwards.png" style="float:right;" class="open-dialog" /></a></td>';

この部分が丸々必要ない部分です。静的な編集リンク自体は1行前の部分にあるので、なくなっても問題はありません。Javascript部分なので「//」でコメントアウトするのが簡単です。

            // html += '<td><a href="#" onclick="return openDialog(this.form, \'view\', \'_type=template&amp;blog_id=' + tmpl.blog_id + '&amp;id=' + tmpl.id + '&amp;dialog=1\')"><img src="<mt:var name="static_uri">plugins/TemplateShelf/images/shape_move_backwards.png" style="float:right;" class="open-dialog" /></a></td>';

こうでなくちゃ

ヨシ、うまくいった。アイコン表示CSSっぽかったので、後で改造しても良いかもね。他に気になるところはっと・・・。
あっそういえば、MT4の時はウィジェットも一緒にプルダウンで表示されてたんだけど、分離されてから表示できなくなったんだよね。場所はプラグイン本体(TemplateShelf.pl)の中だったはず。
という訳で、このプルダウンに表示する項目は、約30行目からの「sub _edit_tmpl_param」の中身、38行あたりから「my $filters = 」で一つずつ追加しているのを発見。ここにウィジェットを追加してみる事にしました。

たぶん順番は関係ないと思うけど、なんとなく「module」と「system」の間に、「widget」を追加する事にしました。

        widget => {
            label => 'Widgets',
            type  => 'widget'
        },

ウィジェット表示した

よし、問題なく動いてる。欲張ってウィジェットセットも表示させる事もできるけれど、その場合編集リンクに別な処理をしなくてならなくなるので、表示関係は取りあえずこんなところかな。

という訳で、MT5用に改造してきたわけですが、実はこのプラグインには、とあるバグが存在してます。Template Shelf 1.01になって、表示されるテンプレートにグローバルテンプレートも表示されるようになったのですが、この編集リンクが正常に機能していないんです。編集リンクにブログIDが含まれるのですが、本来グローバルテンプレートでへの編集リンクはブログIDが0にならないとなりません。しかし作成される編集リンクは作業しているブログのIDになっています。その為編集リンクをクリックしても該当テンプレートが存在せずに、ダッシュボードにリダイレクトされます。グローバルテンプレートの場合はブログID0を指定するように修正を行います。

編集するのは先ほどの「template_shelf.tmpl」です。同じく先ほど編集した部分の、1行上が編集リンクを作成している部分です。思いっきり「blog_id=<mt:var name="blog_id">」とブログIDで指定しています。

            html += '<td class="template-name"><a href="<mt:var name="script_url">?__mode=view&amp;_type=template&amp;blog_id=<mt:var name="blog_id">&amp;id=' + tmpl.id + '">' + tmpl.name + '</a></td>';

ちょうど5行ほど上の部分で、グローバルテンプレートかどうかの判断をして、クラス指定している部分があります。「if(tmpl.blog_id == 0)」が判断部分です。この変数を利用して分岐処理する事にします。判断処理を追加して長くなるので、上の行を3行に分割しました。その上でブログID指定部分の処理を分岐させました。

            html += '<td class="template-name"><a href="<mt:var name="script_url">?__mode=view&amp;_type=template&amp;blog_id='
            if (tmpl.blog_id != 0) { html += '<mt:var name="blog_id">'; } else { html += '0'; }
            html += '&amp;id=' + tmpl.id + '">' + tmpl.name + '</a></td>';

グローバルテンプレート以外の場合は元のままの処理を、グローバルテンプレートの場合はブログIDに0を出力します。これで問題なく動作します。あまりキレイな解決ではないですが、そこは勘弁してください。

という訳で、私なりのMT5対応+バグ対応は終わりです。久しぶりに使えるようになると、やっぱりこのプラグインは便利です。もしかしたら、「むきょー!」という奇声がいきなり聞こえてくるかもしれません。
最後に一つだけ、このプラグインを使う上での注意点を挙げておきます。
プルダウン部分には、すべてのテンプレートを表示する「All Templates」という項目があります。むやみにこれを選択しないでください。選択項目を選ぶと、このプラグインは管理画面の裏側で条件に合致するテンプレートを取得します。表示されるテンプレートが多いと、それなりに時間がかかりますし、取得が終了するまでの間管理画面がハングアップしたような状態になります。通常の項目数ではさほど問題になりませんが、テンプレート数が多い場合には注意が必要です。実は「All Templates」というのは普段表示されないバックアップされたテンプレートなどのすべてのテンプレートを表示します。その為「All Templates」を選んだせいで、ブラウザーがハングアップ状態になり、泣く泣く強制終了させなくてはならない時があります。
先ほど書き終わる寸前のこの記事で、やってしまい、3時間を無駄にしました。十分に注意してください。これ表示しないようにカスタマイズしたほうが良いのかも。

ping a Trackback

TrackBack URL for this entry.(1)

Comments:(2)

footbrain`s user-pic footbrain said October 22, 2009 10:20 AM | ReplyThis!

ありがとうございました。早速修正してみました。
ところで、template_shelf.tmplの105行目あたりにある

// html += '<td class="cb"><input type="checkbox" name="id" class="select" value="' + tmpl.id + '" /></td>';

ってなんでしょう?一度に複数のテンプレートを開く事ができるんじゃないかと思って、"//"を外してみましたが、思うようには動きませんでした。

「All Templates」という項目は、僕には必要ないですね。やっぱり「外しちゃえ」って思ってしまいます。

なんでしょうね。何かの残骸かと思ってたんですけど、そうでもないですね。普通に考えると、リストアクションと連携させようと思っていたのかも知れないですね。
一括削除とか複製とか・・・
何にしろ、これだけだと動作はしませんね。

スクリプトの読み込みが完了していません。

メールフォーム(Javascriptを使用していません)や、twitter.pngTwitter経由のCommentでもReplyいたします。ただし返信はブログのコメントとして行う事もあります。

Comment Form

QuickTagsHere

EmoticonHere

(入力しない場合「Anonymous」で代替されます)
(公開はされませんが、Gravatarアイコンの取得や、Comment Subscribeの送信先アドレスとして使われます)
(入力すると、コメント表示でユーザー名にリンクが貼られます)
(この情報は、JavascriptによりCookieに保存されます。)

NotifyMail Powered by Comment Subscribe

はてブコメント:

Home > Internet > Movabletype > MT5でのTemplateShelf

AjaxSearch
(5)
(6)

別ページに遷移します。

Powered by 暴想&Dakiny/DigiClo

Tag Cloud

Style References

OpenID accepted here

Accepted OpenID
OpenID認証に対応しています

OpenIDについて

Feeds
Link Status
Read Together
  • LOADING...

ブログ/RSS/キーワードAPI - sidetools

In One

なかのひと

位置情報ブログパーツ「なかのひと」

Links
Powered By

Return to page top