« シンガポールとマレーシア | メイン | テレビ番組と個人ブログが映像ごとリンクされる? »

September 17, 2005

タイトルをトリミング(短く)して表示するプラグイン

タイトルが長いと2行にまたがっちゃたりする。このプラグインは表示数を制限してくれる。

M's folderさんのMT 長いタイトルをトリミングする
人生迷い箸さんの日本語対応トリミングフィルタ(再度バグ修正)
re-in-car-na-tionさんのトリミングプラグインを改造してみる
と文字コードの関係でちょっとずつ修正されているようです。

設置方法は、
*vitalage*blogさんの長いタイトルをトリミングする
機械忍者さんのMT3.1でもエントリやタイトルに字数制限をかけて文字数を調整できる、その方法
が参考になりました。

トラックバックとか見ると、みんなトップページの最近のエントリーが気になっているようだけども、ウチは個別エントリーの上の「前の記事|メイン|次の記事」が2行になるのが気になってたんだよね。UTF=8なので、機械忍者さんのとこの説明のようにやりましたが、文字数とかカタカナとかの関係でバグみたいに表示される場合があるのであきらめ。結局re-in-car-na-tionさんのmt-trimj2プラグインを使うことにしました。これならすっきり表示されるみたい。

re-in-car-na-tionさんとこからスクリプトをコピぺして(以下です)、


# 指定された幅にトリミングするフィルタ(文字種を考慮)
package MT::Plugin::Trimj2;

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

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

my($str, $nstr, $ctx) = @_;
my $sippo = '...';
# 幅定数設定
my($zenwid, $ucwid, $lcwid, $digwid, $symwid) = (2, 1.8, 1, 1, 0.8);

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 $wid = 0;
my $out = '';
my @chrs = split(//, $str);
my $code;
for (my $i = 0; $wid < $nstr && $i <= $#chrs; $i++) {
$code = ord($chrs[$i]);
if($code == 0x8f) { # 半角かな
$wid+=$ucwid;
$out .= $chrs[$i] . $chrs[$i+1];
$i+=2;
} elsif ($code >= 0x80) { # 全角
$wid+=$zenwid;
$out .= $chrs[$i];
$i++;
} elsif ($code <= 0x7a && $code >= 0x61) { # 小文字
$wid+=$lcwid;
} elsif ($code <= 0x5a && $code >= 0x41) { # 大文字
$wid+=$ucwid;
} elsif ($code <= 0x39 && $code >= 0x30) { # 数字
$wid+=$digwid;
} else { # 記号(その他)
$wid+=$symwid;
}
$out .= $chrs[$i];
}
# 尻尾を付けたくない場合は、コメントアウトのこと。
if($out ne $str) {
$out .= $sippo;
}

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

return $out;
});

1;

エディタでmt-trimj2.plの名前を付けてUTF-8で保存。
できたプラグインを/pluginsフォルダーにいれたら、該当箇所に記述を加える。
ウチの場合は、個別エントリーのテンプレートを開いて、

<$MTEntryTitle$> → <$MTEntryTitle trimj2_to="46"$>
のようにしました。再構築すれば反映されるはずです。

ついでに、センタリングしようと思ったけど、なんだかできない。
CSSだとややこしいので「前の記事|メイン|次の記事」のとこのスクリプトをspan style="text-align:center"でくくったんだけど、なんだか効かないんだよねえ。なぜ?仕方ないので、ほっといてまたいじります。

でもそれよりホントは、indexページにコメントが表示されない原因を探そうと思ってたんだけど。結局よくわからず。もしかしたらMYSQLの権限の問題かもって。最初出てたような気もするから違うとは思うけど。以下は覚書き。

BananaBlogさんWeblog改造日記その4~ 文字コードとデータベース内の「・最新のコメントが表示されない」
雑記帳さんのMySQLインストールmemo
こちらはソフト、かねやんMySQLAdmin

投稿者 it : September 17, 2005 01:55 PM

コメント

Nice site!
http://emzeqzaa.com/ihvn/mqkp.html | http://jjeckhdy.com/htwl/qltc.html

投稿者 Marla : May 4, 2006 05:45 AM

Good design!
[url=http://emzeqzaa.com/ihvn/mqkp.html]My homepage[/url] | [url=http://xihuqxlr.com/mztm/gqor.html]Cool site[/url]

投稿者 Troy : May 4, 2006 05:44 AM

Soryy, I don't know.
Go to the re-in-car-na-tion site and ask the same quesiton.

投稿者 it : October 3, 2005 02:36 PM

Hi,

Sorry, I don't understand Japanese words.

This plugin also can be applied for UTF-8 Chinese encoding?

投稿者 Dave : October 1, 2005 04:34 PM