カスタムBLOG Top >  MTプラグイン

スポンサードリンク

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プラグイン | |

1