PEAK XOOPS - EMLHの要望 in englishin japanese

EMLHの要望

  • You cannot open a new topic into this forum
  • Guests cannot post into this forum

question EMLHの要望

msg# 1
Previous post - Next post | Parent - Children.1 | Posted on 2005/4/25 11:34
Nu-nrg  企霹始   Posts: 10
お世話さまです。
EMLHを便利に使わせていただいてます。
EMLHの要望がありまして、宜しければご検討いただけないでしょうか?

3つ以上の言語を使う場合、
ブロックタイトル等文字数の制限がありますが、
今の機能ですと全くタグを使用しないか、または全ての言語タグを記入しなければなりません。
翻訳をしきれていないもの(後回しとか)に対応できないです。

例)英語、日本語、フランス語を使っているがフランス語約がわからないので後回しにし、とりあえず英語で記載しておこうとなって、全てタグで記載しないといけない
[英語]hogehoge[/英語]
[日本語]ほげほげ[/日本語]
[フランス語]hogehoge[/フランス語]

これを横着して[フランス語]hogehoge[/フランス語]と記入しないとすると、
hogehoge[日本語]ほげほげ[/日本語]と記入し、日本語を選択すると表示は、''hogehogeほげほげ''と表示される。
英語、フランス語を選択すると日本語は表示されないのでOK。

まとめると、タグではさまないものは常に表示されてしまうので、
タグではさんでいないものを選択した場合に、デフォルトで表示されるタグみたいなものを新設です。
[全て]とかで
[全て]hogehoge[/全て][日本語]ほげほげ[/日本語]とすませてしまう。


説明が難しくわかりにくく、またニッチですが、
ご一考いただければ嬉しいです。
宜しくお願いいたします。
Votes:0 Average:0.00
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
Previous post - Next post | Parent - Children.1 | Posted on 2005/6/20 16:47
GIJOE  黎扦烦菱   Posts: 4110
なるほど。コンパイラフックですか!
どこでもXOOPSコメントと似ていながら違う方式で、かなり面白い手ですね。
確かにこれなら、デフォルト値の設定が可能ですね。

ただ、私の場合、どうしてもキャッシュを有効に効かせたい、という大前提があります。
私自身、サーバ管理者なので、「重い処理は勘弁して」というのが本音ですから

同じフック処理なら、各HTMLキャッシュの読み出し部分を乗っ取る、なんてのも手としてはアリかもしれませんね。それならキャッシュとしては効いていますし、全体のフィルターよりは副作用も少ないでしょう。

Votes:0 Average:0.00
Previous post - Next post | Parent - No child | Posted on 2005/6/24 13:26
domifara  办霹始   Posts: 19
その後、情報として書き残しておきます
現時点でわかったこと
$this->default_modifiers = array('domi_easiestml'); 
default_modifiers の指定を使う方法場合の別の副作用ありました、
これに引っかかると面倒

症状:
最初は、Xoopsのsmartyデバグがエラーで表示されなかっただけなので後回しでしたが

smaryのdebug.tplを調べた結果
テンプレートの記述のうち
致命的な影響でるものがあることがわかりました
(現時点は、smartyデバグテンプレートしか影響はでてないけど)

テンプレートの記述でissetを使っているところがエラーになります(現在smarty2.6.9)

{if isset($_smarty_debug_output) 以下略
のような指定を指定いるところでは
Quote:
Parse error: parse error, unexpected '(', expecting T_VARIABLE or '$' in /home/XXXXXX/xo/templates_c/%%XX^XXX^XXXXXXXXXXXX%%debug.tpl.php on line 10

となります。
回避策としては、issetを使っている箇所に
{if isset($_smarty_debug_output|smarty:nodefaults) 以下略
と |smarty:nodefaults の指定を追加すれば動きます

Xoopsのテンプレートで
マニュアルに無いように思うので
issetを使っているものは、少ないと思いますが

やはり、既存使用しているテンプレートの記述との相性がでるようです
if (isset ( ((is_array($_tmp=$this->_tpl_vars['_smarty_debug_output'])) ? $this->_run_mod_handler('domi_easiestml', true, $_tmp) : smarty_modifier_domi_easiestml($_tmp)) )
影響が出ると思われるのは 、smartyのコンパイルキャシュ
ソースを見ると、smartyテンプレートの記述で
default_modifiers
の関数編集が自動で追加されているけど?
構文として?括弧のつけ方はあっていると思うけど
この場所でこの使い方、出来ないのかな?
んーphp文法エラーかな?smartyのコンパイルが悪いのかな?

ともかく、これが前述のエラーとなってテンプレートが表示できないです

ついでに調べた参考:
smarty security モードでもsmarty関数として、
ifの中で使える初期の関数
'array', 'list','isset', 'empty','count', 'sizeof','in_array', 'is_array',
は、smartyマニュアルに使えるとは書いてないような気がするけど?default_modifiers の指定を使うと全滅する可能性があります

Votes:3 Average:3.33

  Advanced search


Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!