Re: EMLH smarty plugin and smarty default_modifiers
easiestmlをテンプレートの編集プラグインとして呼び出すものを作って試してみました。
これを作った理由は、Nu-nrgさんの希望と同じで
記事の管理に手を抜きたいがためで
easiestmlの編集で
複数の言語タグ en , ja , zh
と指定した場合
[en] [ja]
の記事しか書いてなくても
zh のときに
初期値[en]の記事を表示したいけど
ob_startでの一括処理だと対象の範囲が広くて
判定が難しい
それで、全smartyの変数に対して
個々に、easiestmlの編集させてしまおう
という方式にするために作成しました。
(以前からの使用している自作のプラグインがこういう仕様でしてたので)
コードはこんだけです
すごく手抜きですが、
対象範囲内に指定した言語タグが無い場合、
配列の最初(初期値)の言語タグを指定したことに一時的にしてしまう
これでなぜ、変わるかというと
smartyプラグイン方式にすると
下記のテンプレートの標準値に指定できる
そうすると、テンプレートの変数一つ一つに対して
easiestmlの編集をするので範囲が限定される
それで、タグのあるなし判定が効いてくる
というつもり
html/class/smarty/plugins/modifier.domi_easiestml.php
function smarty_modifier_domi_easiestml($str)
{
//option initialize
if (!isset($str)) {
return $str;
}
if (empty($str) || !is_string($str)) {
return $str;
}
global $easiestml_lang;
if (function_exists('easiestml') && isset($easiestml_lang) && defined( 'EASIESTML_LANGS' )) {
$original_easiestml_lang = $easiestml_lang ;
$easiestml_langs = explode( ',' , EASIESTML_LANGS ) ;
if ($easiestml_lang != $easiestml_langs[0] && !preg_match('/\['.preg_quote($easiestml_lang).'\]/i' , $str)) {
$easiestml_lang = $easiestml_langs[0] ;
}
$str = easiestml($str);
$easiestml_lang = $original_easiestml_lang ;
}
return $str;
}
これだけだと、普通の編集用プラグインですが
このプラグインの編集を
EMLHと同様にテンプレートの改造なしで
標準で適用させるために
html/class/template.php
function XoopsTpl()
のコンストラクタの最後に
smarty標準編集の宣言を追加
追伸:書き忘れた
この標準指定が有効になるのはsmartyのテンプレートコンパイルだけなので
一度 template_c/の中のコンパイルキャシュファイルを削除する必要があります。
(英語での説明は面倒なので書かない)
すでに、smartyブラグイン作成済?でしたか?
本買ったけど、まだあまり読んでない
$this->default_modifiers = array('domi_easiestml');
この方法の欠点は、処理がよけいにかかるので
表示が遅くなる可能性があることなので
html/class/template.php
のob_startは、処理として必要がなくなるので、
ここの行だけコメントする程度の変更は必要かな?
スピードが変わらないなら変更しなくても良いですね
html/class/template.php
// ob_start( 'easiestml' ) ;