見れば、エントリーのタイトルが長すぎて、折り返し表示されているところが多い。ここを決めた文字数で切れれば、スペースを稼げるんだが……。
そう思って探してみたら、以下の記事でビンゴ。
M’s folder: MT 長いタイトルをトリミングするより
そこで、EUC-JP限定だが、日本語対応のフィルタを作ってみた。
MT標準のtrim_toだと日本語文字コードに対応していないため、イケナイところでぶった切ってしまう。そんなわけで僕もtrim_toは利用しないようにしていたのですが、太鉄さんがなにやら見つけたご様子。しかし、そこには「EUC-JP限定だが」の一文が・・・。
うちはUTF-8なんですが、ここであきらめるのもいやなので、他の文字コードにも対応してみました。JcodeでEUC-JPに変換し、フィルタ後元の文字コードに戻すようにしてるだけです。ただし、UTF-8&Jcode.pmな環境でしか動作チェックしてません。
2004/3/1追記:このソースにはバグがあります。最新版はこの記事を参照してください。
# 指定された文字数(半角文字数)にトリミングするフィルタ 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 $lenstr = length($str); if($lenstr < = $nstr) { return $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 $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;
13 Comments
Pingback: 人生迷い箸
Pingback: 人生迷い箸
Pingback: kinoの旅
Pingback: COLOR NO.A
Pingback: Blog VINAPARK
Pingback: デジタル番長