カスタムBLOG Top >  2007年10月

スポンサードリンク

2007年10月

カテゴリ別RSSの作り方ver.2

まず、インデックステンプレートから、「RSS 2.0 Index」の中身をそのままコピー。
次に、「テンプレート」>「アーカイブ」タブにて、『テンプレートの新規作成』。
その中に上記のテンプレートを貼付け、保存。
名前は「Category Archive RSS 2.0 Index」とでもしておく。
title部分を変更。
<title><$MTBlogName remove_html="1" encode_xml="1"$></title>

<title><$MTBlogName remove_html="1" encode_xml="1"$>: Archives ' <$MTCategoryLabel remove_html="1" encode_xml="1"$> '</title>
つぎにアーカイブのマッピングの設定をする。
「設定」>「公開」タブに、アーカイブ・マッピング項目にて「マッピングを新規作成」をクリック。
アーカイブの種類・・・・「カテゴリー」
テンプレート・・・・先ほど作成した「Category Archive RSS 2.0 Index」
上のように選択し、「追加」をクリック。
cat_<$MTCategoryID$>/index.xml
そして、カテゴリーアーカイブのテンプレートに、RSSへのリンクを作成。
<a title="このカテゴリのRSS" href="<$MTBlogArchiveURL$>cat_<$MTCategoryID$>/index.xml">RSS feed of This Category</a>
なお、メタデータとして、<head>〜</head>にもRSS情報として埋め込んでおく。
<link rel="alternate" type="application/rss+xml" title="RSS 2.0 of This Category" href="<$MTBlogArchiveURL$>cat_<$MTCategoryID$>/index.xml" />
これでカテゴリーアーカイブをリビルドすれば完了。

07.10.27 | カテゴリ別RSSの作り方ver.2 | MTカスタマイズ | |

カテゴリーページにも最新エントリー一覧を表示

トップページにエントリー一覧を表示する方法では、カテゴリーページ(カテゴリーアーカイブ)にも表示しようとすると、該当するカテゴリーのエントリーしか表示されない。

これはMovable Typeの仕様。

解決策は以下。
MTEntriesタグで指定していたところを、MTArchiveListタグに変更する。

もともとのエントリー一覧


<br />
<MTEntries lastn="5"><br />
<$MTEntryDate format="%m/%d"$><br />
<a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br /><br />
</MTEntries><br />

変更後は以下

<br /> <MTArchiveList lastn="5"><br /> <$MTArchiveDate format="%m/%d"$><br /> <a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a><br /><br /> </MTArchiveList><br />

07.10.26 | カテゴリーページにも最新エントリー一覧を表示 | MTカスタマイズ | |

カテゴリ別RSSの作り方

◆テンプレートの編集メニューから「新しいインデックス・テンプレートを作る」へ進む。
◆テンプレートの名前にCategory_(***) RSS1.0index、出力ファイル名に、(***).rdf等と記述。
<?xml version="1.0" encoding="<$MTPublishCharset$>" standalone="yes"?>
<?xml-stylesheet href="index.xsl" type="text/xsl" media="screen"?>
<?xml-stylesheet href="style.css" type="text/css" media="screen"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="<$MTBlogURL$>">
<MTCategories>
<MTEntries category="(***)" lastn="1">
<title><$MTBlogName encode_xml="1"$>: <$MTCategoryLabel$></title>
<link><$MTCategoryArchiveLink$></link>
<description><$MTCategoryDescription encode_xml="1"$></description>
<dc:language>ja</dc:language><dc:creator></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="en"$><$MTBlogTimezone$></dc:date>
</MTEntries>
</MTCategories>
<items>
<rdf:Seq>
<MTEntries category="(***)" lastn="15">
<rdf:li rdf:resource="<$MTEntryPermalink encode_xml="1"$>" />
</MTEntries>
</rdf:Seq>
</items>
</channel>
<MTEntries category="(***)" lastn="15">
<item rdf:about="<$MTEntryPermalink encode_xml="1"$>">
<title><$MTEntryTitle encode_xml="1"$></title>
<link><$MTEntryPermalink encode_xml="1"$></link>
<description><$MTEntryExcerpt encode_xml="1"$></description>
<dc:subject><$MTEntryCategory encode_xml="1"$></dc:subject>
<dc:creator><$MTEntryAuthor encode_xml="1"$></dc:creator>
<dc:date><$MTEntryDate format="%Y-%m-%dT%H:%M:%S" language="en"$><$MTBlogTimezone$></dc:date>
</item>
</MTEntries>
</rdf:RDF>
これをカテゴリごとに作成。
あとは、CategoryArchiveの内で、
<link rel="alternate" type="application/rss+xml" title="RSS" href="
<$MTBlogURL$>
<$MTArchiveTitle$>.rdf" />
と書き換えておけばカテゴリ別RSS配信が完成。

07.10.26 | カテゴリ別RSSの作り方 | MTカスタマイズ | |

長いエントリータイトルをトリミング。

# 指定された文字数(半角文字数)にトリミングするフィルタ package MT::Plugin::Trimj;

use MT::Template::Context;
use MT::ConfigMgr;

MT::Template::Context->add_global_filter(trimj_to => sub {

my($str, $nstr, $ctx) = @_;
my $sippo = '...';

my $tmpstr = $str;

my $c = MT::ConfigMgr->instance->PublishCharset;
my $conv_in;
if (lc $c eq lc 'Shift_JIS') {
$conv_in = 'sjis';
} elsif (lc $c eq lc 'ISO-2022-JP') {
$conv_in = 'jis';
} elsif (lc $c eq lc 'UTF-8') {
$conv_in = 'utf8';
} elsif (lc $c eq lc 'EUC-JP') {
$conv_in = 'euc';
}

my $jcnv;
eval 'use Jcode;';
if($@){
require 'jcode.pl';
$jcnv = 'jcode::convert';
}else{
$jcnv = 'Jcode::convert';
}
if ($conv_in ne 'euc') {
&$jcnv(\$str, 'euc', $conv_in);
}

# 比較をここに移動
my $lenstr = length($str);
if($lenstr <= $nstr) {
return $tmpstr;
}

my $out = substr($str,0,$nstr);

if ($out =~ /\x8F$/ or $out =~ tr/\x8E\xA1-\xFE// % 2) {
chop $out;
if($out =~ /\x8F$/){
chop $out;
}
}
$out .= $sippo;
# 尻尾を付けたくない場合は、コメントアウトのこと。

if ($conv_in ne 'euc') {
&$jcnv(\$out, $conv_in, 'euc');
}

return $out;
});

1;


やたらと長いエントリータイトルを、文字数指定して表示させるもの。
上記のスクリプトを使用MTの文字コードで保存し(ファイル名はmt-trimj.plとか適当に付ける)、/pluginsディレクトリに入れる。trimj_to=""で文字数(半角文字数)を指定する。

例:<$MTEntryTitle trimj_to="20"$>

上記の例の場合、半角20文字分できっちり切れる場合は半角20文字分が、切れない場合はきっちり切れるまで1バイトずつ切りつめたものが返される。

オリジナルのtrim_toにない機能として、指定長さ以上の場合(切りつめた場合)には最後に尻尾が付くようになっている。
以下のソースでは「...」が付くようにしてあるが、好みによって変えたり、コメントアウトする。


参考:http://www.villagewood.net/blog/archives/000195.html

07.10.26 | 長いエントリータイトルをトリミング。 | MTプラグイン | |

基本タグ

<MTBlogs> … </MTBlogs>
システム内の全ブログを対象にするコンテナタグです。アクセス権のある全ブログ名をリスト表示する時などに利用します。

<$MTBlogID$>
ブログのID番号。作成したブログごとに自動的に割り振られる番号です。

<$MTBlogName$>
ブログの名前。設定画面で指定します。

<$MTBlogDescription$>
ブログの説明。設定画面で指定します。

<$MTBlogTimezone$>
ブログのタイムゾーン。UTC(協定世界時)からの時差で表示されます。設定画面で指定します。

<$MTBlogURL$>
ブログの絶対URL。設定画面で指定します。

<$MTBlogSitePath$>
ローカルサイトパス。設定画面で指定します。

<$MTBlogArchiveURL$>
アーカイブのURL。設定画面で指定します。

<$MTBlogHost$>
ブログの絶対URLのホスト名部分です。

<$MTBlogRelativeURL$>
ブログの相対URL。絶対URLからホスト名を除いたパスです。

<$MTVersion$>
Movable Typeのバージョン。

<$MTPublishCharset$>
Movable Typeで使用する文字のエンコードの種類。

<$MTCGIPath$>
Movable TypeがインストールされているCGIディレクトリのパス。

<$MTStaticWebPath$>
Movable Typeの管理画面用の画像ファイルやCSS等が保存されているディレクトリのパス。

<$MTBlogEntryCount$>
ブログに登録したエントリー数。

<$MTBlogCommentCount$>
ブログに投稿されたコメント数。

07.10.26 | 基本タグ | MTタグ | |