J2さんとこのコメント欄でちょっと話に出てたMTへのトリップ機能の追加をさらさらっとやってみた。
テストコードはMovable Type 3.151-jaで検証。
多分他のバージョンでもいけるはず。
テスト完了。
ということでこのサイトではトリップが使えるようになりました。
投稿時、DBに格納する前にトリップを生成してますので、管理者にトリップが漏れることはありません。
とりあえずこのエントリあたりで鳥テストしてから使ってみてください。
追記:
プレビューで変換済のトリップが出る件
追記:
プレビューへの対応への注意点追記
6/3 追記:
2chのトリップと同一になるよう、trip()内でシードをShift-JISにエンコードするよう修正。
(trip()3行目と、use Jcode; の行を追加)
10/31 追記:
善さんがMT3.2での修正点をエントリにしてくれました。
MT3.2で導入する場合は先方のエントリを参照してくださいまし。
著::善ポコのタコ部屋::Movable Type 奮闘記::アップグレード 3.171→3.2(番外編::トリップ機能実装に関する備忘録)
{mt dir}/lib/MT/App/Comments.pmの400行目付近_make_comment()のmy $nick = $q->param('author');
の後の行に以下のブロックを追加
$nick =~ s/◆/◇/g; if (index($nick,'#')!=-1){ my $i=index($nick,'#'); my $base=substr($nick,0,$i); my $trip=trip(substr($nick,($i+1),length($nick))); $nick = $base.' ◆'.$trip; }
_make_comment()より前に以下の関数を追加
# make trip sub trip($){ my $seed = shift; $seed = jcode($seed)->sjis ; my $salt = substr($seed, 1, 2); $salt =~ tr/\x00-\x20\x7B-\xFF/./; $salt =~ tr/\x3A-\x40\x5B-\x60/A-Ga-f/; return(substr(crypt($seed, $salt), -10)); }
trip()はこちらから拝借。
Jodeを使えるよう先頭(12行目付近)に宣言追加
use Jcode;
こんだけ。
$nick = $base.' ◆'.$trip;
が2ch風になってるので適当に変更するもまたヨシ。
善さん指摘のプレビュー時のトリップ化対策
※MT3.151-jaだとうまくいくのにここだとうまくいかないので何か違うのかも
{mt dir}/lib/MT/App/Comments.pmの430行目付近_make_comment()の
$comment->author(remove_html($nick));
の後の行に以下の行を追加
$comment->nick(remove_html($q->param(‘author’)));
{mt dir}/lib/MT/Template/Context.pmの1187行目付近_hdlr_comment_fields()の
$comment_author = encode_html($ctx->_hdlr_comment_author()) || "";
を以下の行に置換
my $nickdef = $ctx->stash(‘comment_preview’)->nick;
$comment_author = encode_html($nickdef) || “”;
MT3.151-jaで動作確認済
注意
この修正でプレビュー画面に反映させるためには、MTのテンプレート「コメント・プレビューのテンプレート」の中で、入力フィールドを次のタグで表示させる必要があります。
<MTIfCommentsAllowed> <MTCommentFields preview="1" static="1"> </MTIfCommentsAllowed>
このMTCommentFieldsタグでしか、Context.pmの修正部分を通過しないため、修正が正常に反映されません。
最近のコメント