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

Archive | RSS |
XOOPS
XOOPS : xoops_blockプラグインとD3モジュール内ブロック(1)
Poster : GIJOE on 2007-03-28 05:36:49 (12170 reads)

in englishin japanese
TinyDのコンテンツをテーマなどに埋め込むために、tinyDプラグインを使うケースが結構ある、という話をjidaikoboさんから聞きました。
TinyDプラグイン
TinyDを開発終了とするなら、このあたりの手当もしなければならないかな、と、5分くらいでpicoプラグインを作りました。

作ってみてからふと思ったのは、「こんなプラグインをいちいち作らなくても、Tomさんがxoops_blockプラグインを作っていたから、それを使えばいいだけでは?」ということです。
xoops_blockプラグイン

さっそく落としてみて思い出したのは、このプラグインはブロックがテンプレートを使う、という前提で、Smartyの別の変数にアサインをし直してくれるものだったのです。確かに、こっちの方が自由度という点でもはるかに使いやすく、プロ向きの仕様と言えます。

でも、D3モジュールのブロックは、ブロック表示関数内で、自分自身でテンプレート処理してしまうので、返すのはレンダー後の結果のみ。これは使いづらい!

同じpicoでも、コンテンツ内容表示ならそもそも構造を持たないので問題になりませんが、コンテンツ一覧となれば、明らかに構造があります。これをアサインという形で得られないのは痛い。

とりあえず、D3モジュールブロック仕様を変更して、XoopsTplでのレンダリングをするか、アサインしたものをそのまま返すか、処理分けできるようにしたいと思います。

class/smarty/plugins/function.pico.php


<?php
function smarty_function_pico( $params , &$smarty )
{
	$dirname = @$params['dir'] . @$params['dirname'] ;
	$content_id = @$params['id'] + @$params['content_id'] ;
	$template = @$params['template'] ;

	if( empty( $dirname ) ) {
		echo 'error smarty_function_pico [specify dir]';
		return ;
	} else if( empty( $content_id ) ) {
		echo 'error smarty_function_pico [specify id]';
		return ;
	}

	require_once XOOPS_TRUST_PATH.'/modules/pico/include/common_functions.php' ;
	require_once XOOPS_TRUST_PATH.'/modules/pico/blocks/content.php' ;

	$block = b_pico_content_show( array( $dirname , $content_id , $template ) ) ;

	echo @$block['content'];
}
?>

USAGE: <{pico dir="pico" id="1"}>


Printer friendly page Send this story to a friend

Comments list

GIJOE  Posted on 2007/3/29 3:53
Tomさん、コメントありがとうございます〜

Quote:

Tom_G3X wrotes:
こんなマニアックなプラグインを引っ張り出してきていただいて恐縮です(^^ゞ
当時、自分の中では画期的なプラグインだったんですけどね。完全に自己満足ですが。(笑)
jidaikoboさんも使っていた、といいますし、決してマニアックじゃないんじゃないですかね。
Smartyの仕組みを知れば知るほど、このプラグインは役立つわけで、これを使いこなせればテーマ職人初段を認定できる、って感じかもしれません

プラグインにありがちな「表示する」ではなく「アサインする」っていうアイデアが何より素晴らしいです。

Quote:
ですので、ブロック表示関数内で、自分自身でテンプレート処理する直前までを別に関数化して、
xoops_blockで表示したい時、その関数を引っ張ってくる、
また、通常のブロック処理では、その後、自分自身でテンプレート処理する、
ってのなら、出来るかもですね。
実はそれも考えました。
ただ、ブロック表示関数名は、xoops_version.php に記述してありますし、newblocksテーブルから引っ張ってくることもできますが、その共通関数はソースコードを追わなきゃどうしようもないですよね。

Quote:
更には、file="" で好きなファイルを指定できます。(爆)
もし、TinyD や pico のようなプラグインを多数作る必要があるのでしたら、
それらの関数を1ファイルにした関数集的なファイルを1つ作っておいて、
xoops_block から、ファイル名、関数名を指定して、Smarty変数にアサインすれば、
もしかしたら楽かもしれませんよ。
これも面白いかもしれませんね。
でも、そこまで汎用的に使うものがどれだけあるかというと微妙です。

とりあえず、xoops_blockという究極手段のプラグインが一つデーンとある以上、「それを使いこなせ」、だけで済んじゃいますね。
Tom_G3X  Posted on 2007/3/28 18:46
こんなマニアックなプラグインを引っ張り出してきていただいて恐縮です(^^ゞ
当時、自分の中では画期的なプラグインだったんですけどね。完全に自己満足ですが。(笑)

僕自身、このxoops_block を、D3モジュールで使ったことが無いので、なんですが・・・・。
ようは、このプラグインは、何の関数を引っ張ってきて、何の変数にアサインするか、って事をしてるだけです。
で、更に、func="" の指定は必須です。
それを逆手にとれば、func="" は好きな関数を指定できます。

ですので、ブロック表示関数内で、自分自身でテンプレート処理する直前までを別に関数化して、
xoops_blockで表示したい時、その関数を引っ張ってくる、
また、通常のブロック処理では、その後、自分自身でテンプレート処理する、
ってのなら、出来るかもですね。

xoops_blockの為だけに、そこまでするかぁ〜!って話もありそうですし、
D3モジュールのブロックの仕組みを、僕自身理解してない可能性ありますので、
トンチンカンな事言ってたら、ごめんなさいね。


更には、file="" で好きなファイルを指定できます。(爆)
もし、TinyD や pico のようなプラグインを多数作る必要があるのでしたら、
それらの関数を1ファイルにした関数集的なファイルを1つ作っておいて、
xoops_block から、ファイル名、関数名を指定して、Smarty変数にアサインすれば、
もしかしたら楽かもしれませんよ。
でも記述は面倒かも(爆)、マニアックなプラグインゆえ、お許しを(^^ゞ
(あっ!、これTRUST側にも置ける仕組みがあるといいですね。PUBLIC側は、ちと不安ですし。)
Login
Username or e-mail:

Password:

Remember Me

Lost Password?

Register now!