« 続:カテゴリー毎にスタイルを | メイン | 吉野葛 »
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