パンプキンスパイスラテ

IT系のことが多めの日記帳です

プラグイン開発・モディファイア拡張をconfig.yamlで書く

trim_to モディファイアを拡張してみます。

trim_to
最初の N 文字を取り出します。N はアトリビュートの値として設定します。
使い方

http://www.movabletype.jp/documentation/appendices/modifiers/trim_to.html

目標実行結果

エントリータイトル「モディファイアを拡張してみます」
通常、

<mt:entrytitle trim_to="10" /> #=> モディファイアを拡張

となるところを、

<mt:entrytitle trim_to="10","..." /> #=> モディファイアを拡張...

と続き文字を指定できるようにします。

まずはconfig.yaml

モディファイアのconfig.yamlの書き方がなかなか見つからなくて苦労しました><
config.yaml

id: TrimExpand
name: TrimExpand
description: 'Trim拡張プラグイン'
author_name: takeru-c
author_link: http://www.hachikun.com
version: 0.1

tags:
  modifier:
    trim_to:
      handler: $TrimExpand::TrimExpand::_fltr_trim_to

変数タグや、ブロックタグなら、

tags:
  function:
    xxxxx: $Example::Example::xxxxx
  block:
    yyyyy: $Example::Example::yyyyy

と書けるのに、モディファイアは一段落多く、「handler:」が必要みたいです。
参考:http://www.movabletype.org/documentation/developer/template-tag-modifiers.html

そしてサブルーチンの中身

TrimExpand.pm ※修正しました20090210

package TrimExpand;
use strict;
use MT::I18N qw( substr_text length_text );

sub _fltr_trim_to{
   my ($str, $val, $ctx) = @_;
   my ($value,$trailing) = ( ref($val) eq 'ARRAY'
                             ? ($val->[0],$val->[1])
                             : ($val,'')
                           );

   $str = substr_text($str, 0, $value).$trailing
          if $value < length_text($str);
   $str;
}

1;

こうすることで、
でも
でも
どっちも使用することができます。

ちなみにディレクトリ構成

pligins
`-- TrimExpand
    |-- config.yaml
    `-- lib
        `-- TrimExpand.pm

本当はこう書きたい


でもMTにダメって言われる><
というか「continuation="..."」は完全に無視される><

引数を3つ以上にすることもできます

<mt:entrytitle trim_to="10","...","xxx","yyy","zzz" />

何個増やそうが、
my ($str, $val, $ctx) = @_;
の$valに配列として渡されるので、よしなに処理したってください。

TrimExpandダウンロード

http://www.hachikun.com/mt_plugin/TrimExpand.zip
お試しください。