XCL専用モジュールでのブロックの書き方

あちこちにあるサンプル、わかりにくすぎます。

そんなわけで正しい書き方
まずはsampleモジュールのxoops_version.php

$modversion['blocks'][1]['name'] = 'sampleblock';
$modversion['blocks'][1]['file'] = 'sampleblock.php';
$modversion['blocks'][1]['class'] = 'SampleBlock';
$modversion['blocks'][1]['template'] = 'sampleblock_template.html';
$modversion['blocks'][1]['func_num'] = 1;
$modversion['blocks'][1]['options'] = "1|2|3";

'class'にクラス名を記述…するわけですが本物のクラス名を書くわけではないです。実装クラスの名前は"Sample_SampleBlock"つまり(モジュール名_xoops_versionに書いたクラス名)。これを"class SampleBlock"と書いたり"class SampleClass"と書いたり"class SampleBlockClass"と書いたり"class Sample_SampleClass"と書いても動きません。

<?php
class Sample_SampleBlock extends Legacy_BlockProcedure{
	function __construct(&$block)
	{
		echo "dddd";
		parent::__construct($block);
	}

	function Sample_ExampleBlock(&$block){
		echo "aaaa";
		parent::Legacy_BlockProcedure($block);
	}
	function execute(){
		echo "bbbb";
		// いったんレンダー側に値を預けます。
		$render =& $this->getRenderTarget();
		$render->setTemplateName($this->_mBlock->get('template'));
		$render->setAttribute('mid', $this->_mBlock->get('mid'));
		$render->setAttribute('bid', $this->_mBlock->get('bid'));
		echo "cccc";

		/* ここにやりたいことを書く */
		$render->setAttribute("value","スケルトンBLOCK");

		// 預けた値をレンダーシステムが取得します。
		$root =& XCube_Root::getSingleton();
		$renderSystem =& $root->getRenderSystem($this->getRenderSystemName());
		$renderSystem->renderBlock($render);
		echo "eeee";
	}
	// これがXOOPS2時代の['edit_func']に該当するもの
	public function getOptionForm()
	{
		$options = explode('|', $this->_mBlock->get('options'));
		$options[0] = (int) $options[0];

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

		return $result;
	}
}

?>

コンストラクタ2つ書いてますが深い意味はないです。PHP5だから専用コンストラクタ使うのか?呼ばれないのか?とか色々悩んだ末の残骸です。