suin.io

Legacyではブロック周りをクラス化できる

suin2008年7月14日

私もごく最近になって知ったのですが、XOOPS Cube Legacy(以下XCL)ではブロックの処理をクラス化してしまうことが可能です。XOOPS2ですと、b_{モジュール名}_{関数名}_showなどの関数を作って対応していましたが、XCLではクラスを作って対応する方法が用意されています。exmapleという名前のモジュールを作る前提で説明します。

まず、xoops_version.phpの記述ですが、従来のshow_funcやedit_funcは使わずにclassを使うのですが、大体こんな感じで書きます。

$modversion['blocks'][1]['name'] = '例えばのブロック';
$modversion['blocks'][1]['file'] = 'example.php';
$modversion['blocks'][1]['class'] = 'ExampleBlock';
$modversion['blocks'][1]['options'] = '1|2|3';
$modversion['blocks'][1]['template'] = 'example_block_template.html';
$modversion['blocks'][1]['func_num'] = 1;

さらに、xoops_root_path/modules/example/blocks/に['file']で指定したファイルを作ります。この場合、example.phpです。example.phpの中身はこんな感じです。

<?php
// {モジュール名}_{クラス名}
class ExmapleModule_ExampleClass extends Legacy_BlockProcedure
{
function __construct(&$block)
{
parent::__construct($block);
}

// これがXOOPS2時代の['show_func']に該当するもの
public function execute()
{
// いったんレンダー側に値を預けます。
$render =& $this->getRenderTarget();
$render->setTemplateName($this->_mBlock->get('template'));
$render->setAttribute('mid', $this->_mBlock->get('mid'));
$render->setAttribute('bid', $this->_mBlock->get('bid'));

/* ここにやりたいことを書く */

// 預けた値をレンダーシステムが取得します。
$root =& XCube_Root::getSingleton();
$renderSystem =& $root->getRenderSystem($this->getRenderSystemName());
$renderSystem->renderBlock($render);
}

// これがXOOPS2時代の['edit_func']に該当するもの
public function getOptionForm()
{
$options = explode('|', $this->_mBlock->get('options'));
$options[0] = (int) $options[0];

// 戻り値はオプションフォームのHTML
// Legacyのレンダーシステムでレンダリングした結果を返すなり、
// XOOPS2風にHTMLをべた書きで返すなり自由にどうぞ。
$result = '';

return $result;
}
}
?>
RELATED POSTS