최근 코멘트 태그팁을 응용해서 코멘트 내용 일부가 보여지는 태그를 사용하고 있습니다. trim_to 어트리뷰트로 전달하는 값만큼 내용을 잘라주는데 문제는 한글이 깨끗하게 잘리지 않는다는 것입니다. 그래서 자료를 찾다가 한글 깨끗하게 자르기를 발견했습니다. 이걸 적용하기 위해 trim_to를 어디에서 사용하는지 검색해보니 lib/MT/Template/Context.pm의 288라인과 2091라인 두 곳에서 trim_to를 사용하는 것을 확인했습니다.
우선 288라인을 확인해보면 아래와 같습니다.
if (my $len = $local_args{trim_to}) {
$str = substr $str, 0, $len if $len < length($str);
}
위의 내용을 아래와 같이 수정합니다.
if (my $len = $local_args{trim_to}) {
if ($len < length($str)){
$str = substr $str, 0, $len ;
$str =~ s/(([\x80-\xff].)*)[\x80-\xff]?$/$1/;
$str .= "...";
}
}
2091라인은 아래와 같이 고칩니다.
MT::Template::Context->add_global_filter(trim_to => sub {
my($str, $len, $ctx) = @_;
if ($len < length($str)){
$str = substr $str, 0, $len ;
$str =~ s/(([\x80-\xff].)*)[\x80-\xff]?$/$1/;
$str .= "...";
}
$str;
});
Template Main Index에서 최근 코멘트 목록을 불러오기 위해서 아래 코드를 사용합니다.
<!--//최근 코멘트 목록-->
<div class="sidetitle">
Recent Coments
</div>
<div class="side">
<MTComments lastn="5" sort_order="descend">
<MTCommentEntry>
<a href="<MTEntryLink archive_type="Individual">"><MTCommentBody
trim_to="15" remove_html="1"></a> from:<MTCommentAuthorLink
spam_protect="1"><br />
</MTCommentEntry>
</MTComments>
</div>
이제 한글이 깨끗하게 잘 잘리는군요. ^^ 저는 최근글 목록이나 최근 트랙백을 표시하는 부분에도 사용하고 있습니다.