PEAK XOOPS - xoops_blockプラグインとD3モジュール内ブロック(2) in englishin japanese

Archive | RSS |
XOOPS
XOOPS : xoops_blockプラグインとD3モジュール内ブロック(2)
Poster : GIJOE on 2007-03-29 04:25:25 (17000 reads)

in englishin japanese
というわけで、D3モジュール仕様のブロックの最後の処理部分をこうすることにしました。


	if( empty( $options['disable_renderer'] ) ) {
		require_once XOOPS_ROOT_PATH.'/class/template.php' ;
		$tpl =& new XoopsTpl() ;
		$tpl->assign( 'block' , $block ) ;
		$ret['content'] = $tpl->fetch( $this_template ) ;
		return $ret ;
	} else {
		return $block ;
	}

この仕様って、どうかな、とは自分でも思うのですが、ブロック表示関数の2番目以降の引数を勝手に使うわけにもいかないし、グローバル変数で渡すのもナニなので、苦肉の策として、数値インデックスである$options配列に、文字列インデックスを混ぜてみました。

これで互換性の問題は基本的にないはずです。

あとは、ブロックからアサインを引き出すプラグイン側で、オプション配列に文字列インデックス'disable_renderer'を追加すれば良いのです。

xoops_blockプラグインという名前のままHackしてしまうと、バッティングしてしまうかもしれないので、xugj_blockという名前でプラグインを作ってみました。

mod指定だとどうしてもクエリが余計に入るので、その機能は削って、file指定のみとしてます。あと、optの区切り文字が,だと、,を含んだオプションを指定出来ないので、|にしてます(それでも|を含んだオプションは指定できませんが、それはXOOPSのオリジナル仕様なので)。互換性のために、opt=1,2 でも、options=1|2 でも指定出来るようにしてます。
さらに、コード中のeval()がどうしても気になったので、そのあたりも変更してます。

最後に、xoops_blockでは、assign指定がなければエラーでしたが、このプラグインでは、可能な限り、そのまま表示します。アサイン変数名指定は、foreach()などとの互換性を考え、assign の代わりに item でも指定可能としてます。

class/smarty/plugins/function.xugj_block.php

<?php

function smarty_function_xugj_block( $params , &$smarty )
{
	$assign_name = @$params['item'] . @$params['assign'] ;

	$block_file = XOOPS_ROOT_PATH . '/' . @$params['file'] ;

	if( file_exists( $block_file ) ) {
		include_once $block_file ;
		if( function_exists( @$params['func'] ) ) {
			$options = empty( $params['opt'] ) ? explode( '|' , @$params['options'] ) : explode( ',' , @$params['opt'] ) ;
			if( empty( $assign_name ) ) {
				$block = call_user_func( $params['func'] , $options ) ;
				if( empty( $block['content'] ) ) {
					var_dump( array_keys( $block ) ) ;
					echo 'missing "item" in <{xugj_block}>' ;
				} else {
					echo $block['content'] ;
				}
				$block['content'] ;
			} else {
				$options['disable_renderer'] = true ;
				$block = call_user_func( $params['func'] , $options ) ;
				$smarty->assign( $assign_name , $block ) ;
			}
		} else {
			echo 'invalid "func" in <{xugj_block}>' ;
			return ;
		}

	} else {
		echo 'invalid "file" in <{xugj_block}>' ;
		return ;
	}
}

?>


Printer friendly page Send this story to a friend

Comments list

GIJOE  Posted on 2007/4/3 4:39
Quote:

Tom_G3X wrotes:
Quote:
今読むと、言語を読み込む部分をまるまるハツっちゃってますね
現実には、アサインする部分に言語が必要なケースはほとんどないので、必要な場合だけ、<{xugj_block}>の直前に<{include_php}>してもらえばいいかな、という方針で。
実際には、メニューブロックやユーザーブロックでの利用が大半のようですので、後から言語ファイルの読み込みを追加したんですよ。
実際に使おうと思って、それに気づきました。
う〜ん、オプション追加かなあ。
Tom_G3X  Posted on 2007/3/30 10:46
Quote:

GIJOE wrotes:
xugj_block の読み方は「んぐじぇ・ぶろっく」で
おぉ!!「んぐじぇ」ゲ〜〜ット!!

Quote:
今読むと、言語を読み込む部分をまるまるハツっちゃってますね
現実には、アサインする部分に言語が必要なケースはほとんどないので、必要な場合だけ、<{xugj_block}>の直前に<{include_php}>してもらえばいいかな、という方針で。
実際には、メニューブロックやユーザーブロックでの利用が大半のようですので、後から言語ファイルの読み込みを追加したんですよ。
無くても問題は無いですけどね。
そうですね、<{include_php}>でもいいですね。言語の自動認識が出来ない程度ですからね。

Quote:
Quote:
legacy2.1 では、xoops_explaceholder を使いこなすと、テーマ職人五段って噂もチラホラ。(笑)
プレースホルダーですか?(実は全然判ってない)
いわゆるプレースホルダーだったら、入門したばかり(10級くらい?)の人にも使えるくらい簡単じゃないといけない気もしますが
という僕もまだ良く理解してなかったりするんですが。
使いこなせば、xoops_blockの比じゃないって話だそうです。
難しいゆえに、exプレースホルダー なのか?
GIJOE  Posted on 2007/3/30 4:14
Tomさん、コメントありがとうございます。

xugj_block の読み方は「んぐじぇ・ぶろっく」で

Quote:

Tom_G3X wrotes:
xoops_blockの原石を磨くと、xugj_blockになるって言うのか・・・、
いやあ、実に素晴らしい原石で、そのままでも観賞に堪えるとは思ったのですが、言語を読み込む部分などは、どうしてもD3モジュールとはちょっと相容れないかな、とおもったものでカッティングしちゃいました。

今読むと、言語を読み込む部分をまるまるハツっちゃってますね
現実には、アサインする部分に言語が必要なケースはほとんどないので、必要な場合だけ、<{xugj_block}>の直前に<{include_php}>してもらえばいいかな、という方針で。

Quote:
legacy2.1 では、xoops_explaceholder を使いこなすと、テーマ職人五段って噂もチラホラ。(笑)
プレースホルダーですか?(実は全然判ってない)
いわゆるプレースホルダーだったら、入門したばかり(10級くらい?)の人にも使えるくらい簡単じゃないといけない気もしますが
Tom_G3X  Posted on 2007/3/29 19:03
xoops_blockプラグインを弄っていただき、大変光栄です。ありがとうございます。
OSSって、他人に弄ってもらってナンボのモンって気もしますし。

xoops_blockの原石を磨くと、xugj_blockになるって言うのか・・・、
GIJOEフィルターが掛ると、こういうコーディングになるのかぁ〜と思うと、
自分のコードが恥ずかしくなる今日この頃・・・・。( ..)φメモメモ勉強!
うっ!目から鱗が・・・、(あっ、コンタクトだった・・・)

eval()は、僕も気になってたところでしたが(^^ゞ、放置しておりました。(爆)

legacy2.1 では、xoops_explaceholder を使いこなすと、テーマ職人五段って噂もチラホラ。(笑)
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!