xoops_blockプラグインとD3モジュール内ブロック(1)

Date 2007-03-28 05:36:49 | Category: XOOPS

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"}>



You can read more news at PEAK XOOPS.
http://xoops.peak.ne.jp

The URL for this story is:
http://xoops.peak.ne.jp/md/news/index.php?page=article&storyid=415