<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Suinasia(ブロック)</title>
<link>http://suin.asia/tag/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF</link>
<description>「ブロック」なエントリー</description>
<language>ja</language>
<lastBuildDate>Fri, 10 Feb 2012 18:01:23 +0900</lastBuildDate>
<docs>http://backend.userland.com/rss/</docs>
<category>ブロック</category>
<item>
<title>Legacyではブロック周りをクラス化できる</title>
<link>http://suin.asia/2008/07/14/block-class-legacy-xoops.html</link>
<description><![CDATA[<p>私もごく最近になって知ったのですが、XOOPS Cube Legacy(以下XCL)ではブロックの処理をクラス化してしまうことが可能です。XOOPS2ですと、<code>b_{モジュール名}_{関数名}_show</code>などの関数を作って対応していましたが、XCLではクラスを作って対応する方法が用意されています。exmapleという名前のモジュールを作る前提で説明します。</p>

<p>まず、xoops_version.phpの記述ですが、従来のshow_funcやedit_funcは使わずにclassを使うのですが、大体こんな感じで書きます。</p>
<pre><code class="php">$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;
</code></pre>
<p>さらに、xoops_root_path/modules/example/blocks/に['file']で指定したファイルを作ります。この場合、example.phpです。example.phpの中身はこんな感じです。</p>
<pre><code class="php">&lt;?php<br />// {モジュール名}_{クラス名}<br />class ExmapleModule_ExampleClass extends Legacy_BlockProcedure<br />{<br />	function __construct(&amp;$block)<br />	{<br />		parent::__construct($block);<br />	}<br /><br />	// これがXOOPS2時代の['show_func']に該当するもの<br />	public function execute()<br />	{<br />		// いったんレンダー側に値を預けます。<br />		$render =&amp; $this-&gt;getRenderTarget();<br />		$render-&gt;setTemplateName($this-&gt;_mBlock-&gt;get('template'));<br />		$render-&gt;setAttribute('mid', $this-&gt;_mBlock-&gt;get('mid'));<br />		$render-&gt;setAttribute('bid', $this-&gt;_mBlock-&gt;get('bid'));<br /><br />		/* ここにやりたいことを書く */<br /><br />		// 預けた値をレンダーシステムが取得します。<br />		$root =&amp; XCube_Root::getSingleton();<br />		$renderSystem =&amp; $root-&gt;getRenderSystem($this-&gt;getRenderSystemName());<br />		$renderSystem-&gt;renderBlock($render);<br />	}<br /><br />	// これがXOOPS2時代の['edit_func']に該当するもの<br />	public function getOptionForm()<br />	{<br />		$options = explode('|', $this-&gt;_mBlock-&gt;get('options'));<br />		$options[0] = (int) $options[0];<br /><br />		// 戻り値はオプションフォームのHTML<br />		// Legacyのレンダーシステムでレンダリングした結果を返すなり、<br />		// XOOPS2風にHTMLをべた書きで返すなり自由にどうぞ。<br />		$result = '';<br /><br />		return $result;<br />	}<br />}<br />?&gt;</code></pre>]]></description>
<pubDate>Mon, 14 Jul 2008 14:42:02 +0900</pubDate>
<guid>http://suin.asia/2008/07/14/block-class-legacy-xoops.html</guid>
<category domain="http://suin.asia/tag/XOOPS">XOOPS</category>
<category domain="http://suin.asia/tag/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF">ブロック</category>
</item>
</channel>
</rss>
