03December
2004
: FridayID-340

Blog カスタマイズ vol.36

コメント、トラックバックがない場合はリンクを非表示する

Movable Typeのデフォルトの状態だとリンク、トラックバックがない場合でもMain Indexなどに表示されるそれぞれの項目にはリンクが貼られてしまいます。色々なBlogでたまに投稿がない場合はリンクされていないのを見かけていて、「どうするんだろ?」と常々思ってましたが、優先項目ではないのでやり方を調べるまでには至りませんでした。

先日、ふとMTのタグリストを眺めてたらMTElseというタグがありました。これを使えば可能なんじゃないかと思いやってみることにしました。

drk7.jp Movable Type 取説: ひな形 TAG たち その他もろもろの Tag たち

PS2RC

説明にあるとおり、Ifが付いてるタグの中で機能するようで”そうではない場合”の指定が出来るというものです。元々コメントとトラックバックを表示させている入れ物にIfが付いていたので、

<MTElse>
No Comment
</MTElse>
を追加すればいいと思いやってみましたが、機能しません。めずらしく簡単に終わると思ってたのにな...(泣)。

調べてみると、別に新たにIf指定しないと駄目なようでした。

小粋空間 MTIfNonZeroタグでコメント表示方法を制御する
なるほど。しかし、やってみても駄目でした。どうやらMT3以降で導入されたタグらしいです。更に調べてみたら2.6でもプラグインとして入れれば使用可能になる様子。
SG::Acme true or false
華氏451度 MT無頼控 其の弐(IF文)
MT2.6にはMTElse問題と言われているバグがあるらしいので、
Fenril's BLog MTElse問題
を参考にPMファイルも変更したところ見事、機能しました!

これやるとだいぶ見た目がスッキリするのでおすすめです。簡単ですし。


まず、MTの本体があるフォルダ/lib/MT/Builder.pmを修正しておきます。98行目付近からある以下コードの真下にを付け加えて保存しアップロードします。

            my($tokens, $uncompiled);
my $tokens_else;
省略
$tokens = [ grep $_->[0] ne 'Else', @{ $t->[2] } ];
$tokens_else = [ grep $_->[0] eq 'Else', @{ $t->[2] } ];
省略
$ctx->stash('tokens', $tokens);
$ctx->stash('tokens_else', $tokens_else);
これで自前プラグインでMTElseが機能するようになったので、次はプラグインを作ります。テキストエディタなどで、以下のソースをPerlモードで保存してMTの本体があるフォルダ/Plugins/にアップロードします。
package MT::Plugin::IfTrue;


use vars qw( $VERSION );
$VERSION = 0.1;


MT::Template::Context->add_conditional_tag(IfTrue =>
\&_if_true);


sub _if_true {
my ($ctx, $args) = @_;
$args->{tag} =~ s/^MT//;
my $handler = $ctx->handler_for($args->{tag});
if ( defined $handler ) {
$handler->($ctx, $args) and return 1;
}
return 0;
}


1;

これで、MT3でいうところのMTIfNonZeroと同じ動作をするMTIfTrueというタグが使えるようになりました。これでMTElseを機能させたい場所を囲みます。
コメントなら、
<MTEntryIfAllowComments>
<MTIfTrue tag="MTEntryCommentCount">
コメント表示リンク関連タグ
<MTElse>No Comment</MTElse>
</MTIfTrue>

</MTEntryIfAllowComments>
トラックバックなら、
<MTEntryIfAllowPings>
<MTIfTrue tag="MTEntryTrackbackCount">
トラックバック表示リンク関連タグ
<MTElse>No Trackback</MTElse>
</MTIfTrue>

</MTEntryIfAllowPings>
という具合に、MTIfTrueで0を探す要素を指定して、MTElseで0の時に表示させる物を指定すればよろしいようです。


参考にさせて頂いた方々、分かりやすい説明ありがとうございました。



  • so-su :
  • 10:42 PM
PingURL : http://gamania.s22.xrea.com/x/mt-tb.cgi/352

Comments

カスタマイズの自由がうれしいね
wgetで相対リンクになって通ってるw
繋がりまつ。

酢鶏@mixi進出 : December 18, 2004 11:31 PM (spam度: 0%)

70 http://paul72.08@mail.ru/ vjkjlt;b

balabo3_gp : June 19, 2009 03:25 PM (spam度: 50%)

he .

balabo3_dt : June 20, 2009 01:23 AM (spam度: 50%)

Post a Comment


*

*



コメントをして頂くには、*が必須です。
登録して頂いたメールアドレスは、blog上に表示されませんのでご安心下さい。

名前、アドレスを登録しますか?





タグは使えません。
http:// から始まるアドレスは自動でリンクされます。
「投稿」ボタンで送信した後、稀に送信エラーが起きる場合がありますが、ほとんどの場合が既に投稿済みですので気にしないで下さい。
再度「投稿」すると二重投稿になります。