昨日の日記で書いてた文字コード変換のプラグインをもう少し効率よくしてみた。
[プラグイン名]UTF-8 to Shift_JIS
[イベント]OnWebPageInitのみにチェック
[備考]プラグイン名を変えると動きません
[機能説明]$parentIdに設定したドキュメントIDより下の階層にあるドキュメントはUTF-8からShift_JISにエンコードさせて出力される。
//------------------------------------------------------------------------
//
// UTF-8 to Shift_JIS for MODx
//
// Author : soushi
// Version : 1.10
// Date : 2007/12/26
//
//------------------------------------------------------------------------
// parent id of target document
$parentId = 10;
switch ($modx->Event->name){
case "OnWebPageInit":
$id = $modx->documentIdentifier;
$parentIds =array_flip($modx->getParentIds($id, 100, array($id)));
if( isset($parentIds[$parentId]) ){
$modx->config['modx_charset'] = 'Shift_JIS';
//$modx->addEventListener('OnWebPagePrerender', 'UTF-8 to Shift_JIS'); //MODx 0.9.6ではaddEventListenerが機能しない
//仕方ないので専用処理
$el= &$modx->pluginEvent['OnWebPagePrerender'];
if (empty ($el)){
$modx->pluginEvent['OnWebPagePrerender']= array ();
$el= &$modx->pluginEvent['OnWebPagePrerender'];
}
array_push($el, 'UTF-8 to Shift_JIS');
}
break;
case "OnWebPagePrerender":
$modx->documentOutput = mb_convert_encoding($modx->documentOutput,'SJIS','UTF-8');
break;
}
前回書いたものはイベントをフックするたびに親ドキュメントを探してたのですが、今回は最初のイベントのフックで文字コード変換対象のドキュメントが確定したら、そこから自動的に後のイベントを作成しています。
多分、ちょっとだけ効率はよくなってる…はず。
ちなみにMODx APIでイベントを追加できそうな関数addEventListenerがあったけど動かなかった_| ̄|○
仕方ないのでこの関数を使わないようにした。
あと一緒にテンプレートの切り替え機能とかも実装してみたけど微妙に使いづらいのでまだ非公開。
時間ができたら正式にリリースしようかな。。。と思う今日この頃。
誰か時間をくださいー。
作成日:2007/12/27 01:50:39