MTElse問題

MovableTypeで、もともと組み込み済みのMTIf系の条件タグを使うと、それと組み合わせでMTElseというのが使えますよね。でも、自前でつくったプラグインの条件タグはこのMTElseがうまく作動しないようです。

そこで、ネットで調べてみたところ自前プラグインでも、このMTElseを動作させる方法が書いてありました。ソースが英語なので、修正方法を日本語で書いておきます。

修正方法は続きをどうぞ。

/path/to/mt/lib/MT/Builder.pmの修正(sub buildの中、MT 2.63だと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);
を追加

MT2.63以下の場合は加えて修正してください(2.64以上は修正の必要なしです)
/path/to/mt/lib/MT/Template/Context.pmの修正(sub add_condtion_tagの中、MT 2.63だと43行目)

if ($condition->(@_)) {
    return _hdlr_pass_tokens(@_);
} else {
    return '';
}

if ($condition->(@_)) {
    return _hdlr_pass_tokens(@_);
} else {
    my($ctx, $args, $cond) = @_;
    return $ctx->stash('builder')->build($ctx, $ctx->stash('tokens_else'), $cond);
}
に置き換える

April 13, 2004 20:27 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク

コメント

コメントする