I've modified D3 module's blocks can return both "array for template" and "string rendered by the template" by specifying $options['disable_renderer'].
Then I've made a smarty plugin named "xugj_block" based on "xoops_block".
eg)
<{xugj_block file="modules/pico/blocks/blocks.php" func="b_pico_list_show" options="pico|0|"}>
It displays the block.
eg2)
<{xugj_block file="modules/pico/blocks/blocks.php" func="b_pico_list_show" options="pico|0|" assign="myblock"}>
It never displays the block.
You can use a new template variable <{$myblock}> instead.
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 ;
}
}
?>
Tom_G3X wrotes:
Quote:実際には、メニューブロックやユーザーブロックでの利用が大半のようですので、後から言語ファイルの読み込みを追加したんですよ。今読むと、言語を読み込む部分をまるまるハツっちゃってますね
現実には、アサインする部分に言語が必要なケースはほとんどないので、必要な場合だけ、<{xugj_block}>の直前に<{include_php}>してもらえばいいかな、という方針で。
GIJOE wrotes:
xugj_block の読み方は「んぐじぇ・ぶろっく」で
今読むと、言語を読み込む部分をまるまるハツっちゃってますね
現実には、アサインする部分に言語が必要なケースはほとんどないので、必要な場合だけ、<{xugj_block}>の直前に<{include_php}>してもらえばいいかな、という方針で。
Quote:プレースホルダーですか?(実は全然判ってない)legacy2.1 では、xoops_explaceholder を使いこなすと、テーマ職人五段って噂もチラホラ。(笑)
いわゆるプレースホルダーだったら、入門したばかり(10級くらい?)の人にも使えるくらい簡単じゃないといけない気もしますが
Tom_G3X wrotes:
xoops_blockの原石を磨くと、xugj_blockになるって言うのか・・・、
legacy2.1 では、xoops_explaceholder を使いこなすと、テーマ職人五段って噂もチラホラ。(笑)