PEAK XOOPS - Re: EMLH smarty plugin and smarty default_modifiers in englishin japanese

Re: EMLH smarty plugin and smarty default_modifiers

List posts in the topic

question Re: EMLH smarty plugin and smarty default_modifiers

msg# 1.1
depth:
1
Previous post - Next post | Parent - Children.1 | Posted on 2005/6/20 15:06
domifara  一等兵   Posts: 19
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' ) ;
Votes:5 Average:4.00

Posts tree

  Advanced search


Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!