« 続:カテゴリー毎にスタイルを | メイン | 吉野葛 »

2005年08月25日

これはMT関係の記事であります。IEで見るとソースコード部のスクロールバーが変だったのに対処してみました。直った、のかな?

続々:カテゴリー別に

まだまだ続くカテゴリーIDでアレコレするシリーズ、今度は条件分岐タグを作ってみました。
まずは使い方、テンプレートの中でこんな感じに指定します。

<MTEntryIfCID cid="3">
主カテゴリーIDが3の場合のみ有効な記述
</MTEntryIfCID>

例えばこのエントリでタイトルの前に入っているこれはMT関係の記事〜部分はこのタグを使って表示しています。今回はstatic版とphp版をまとめて作りました。
まずはstatic版のplugin、EntryIfCID.pl (もちろんファイル名はどうでもいい)

package MT::plugin::EntryIfCID;
use strict;
use MT::Template::Context;
MT::Template::Context->add_conditional_tag(EntryIfCID => sub {
    my ($ctx, $args) = @_;
    my $entry = $ctx->stash('entry');
    unless ($entry->{__my_categoryID}) {
        use MT::Placement;
        my @p = MT::Placement->load({ blog_id => $entry->blog_id,
                                      entry_id => $entry->id,
                      is_primary => 1
                                   });
        for my $p (@p) {
        $entry->{__my_categoryID} = $p->category_id
            if $p->is_primary;
        }
    }
    my $cid;
    $cid = $args->{category} if (defined $args->{category});
    $cid = $args->{cid} if (defined $args->{cid});
    my @ids = split(/,/, $cid);
    my $exist = 0;
    for my $id (@ids) {
        if ($entry->{__my_categoryID} == $id) {
            $exist = 1;
            last;
        }
    }
    return $exist;
 }
);
1;

php版のpluginはblock.MTEntryIfCID.php、こちらはファイル名と関数名を合わせないと駄目。

<?php
function smarty_block_MTEntryIfCID($args, $content, &$ctx, &$repeat) {
    if (!isset($condition)) {
        $entry = $ctx->stash('entry');
        $cid = 0;
        if (isset($args['cid'])) {
            $cid = $args['cid'];
        }
        if (isset($args['category'])) {
            $cid = $args['category'];
        }
        if ($entry['placement_category_id']) {
            $cat = $ctx->mt->db->fetch_category($entry['placement_category_id']);
            if ($cat) {
                $cid_entry = $cat['category_id'];
                $cids = split(",", $cid);
                $exist = 0;
                foreach ($cids as $cid) {
                    if ($cid == $cid_entry) {
                        $exist = 1;
                        break;
                    }
                }
                return $ctx->_hdlr_if($args, $content, $ctx, $repeat, $exist);
            }
        }
    }
    return $ctx->_hdlr_if($args, $content, $ctx, $repeat);
}
?>

もーちょっとあぁせいこぉせいが有ったら御指摘ください。

Updated: 2005-08-26 17:56:12 複数のカテゴリをcid="1,3,5"とまとめて指定できるように改造した。

ついでにMTEntryIfNotCIDというのも作りました、中身は条件判定を反転させてる以外は一緒(最初からこっちも作る予定だったのでわざわざexistなんて変数を使用してた)なので違うところのみ太字で。
static版のEntryIfNotCID.pl

package MT::plugin::EntryIfNotCID;
use strict;
use MT::Template::Context;
MT::Template::Context->add_conditional_tag(EntryIfNotCID => sub {
(ずっと略して)
    return !$exist;
 }
);
1;

php版のblock.MTEntryIfNotCID.php

<?php
function smarty_block_MTEntryIfNotCID($args, $content, &$ctx,&$repeat) {
(ずっと略して)
                return $ctx->_hdlr_if($args, $content, $ctx, $repeat, !$exist);
            }
        }
    }
    return $ctx->_hdlr_if($args, $content, $ctx, $repeat);
}
?>

ただいまカテゴリー別にデザインを変える試験中、カテゴリーがMTかゲームだとサイドバーが出ないわさ。

Updated: 2005-08-27 11:27:45 MTEntryIfNotCIDを追加。


投稿者 kade : 2005年08月25日 18:35 | MT

トラックバック

このエントリーのトラックバックURL:
http://www.kadesoft.com/cgi-bin/mt3/mt-tb.cgi/106

コメント大歓迎




保存しますか?