本ページではXoops Cube のブロックの追加方法について説明します。
1.ブロックの追加
ブロックを追加しよう
前回作成したサンプルモジュール(ページナビゲータ)にファイルを追加して今回のサンプルを作成します。
今回は2ファイルを追加し、1ファイルを修正します。
1. sample2_block.php(今回追加ファイル)
2. sample2_block_template.html(今回追加ファイル)
3. xoops_version.php
まずファイルの追加をします。
ファイルの追加をするにあたって、事前にフォルダも2つ作成する必要があります。
sample2モジュールの中に「blocks」というフォルダを作成して下さい。
ここに、「sample2_block.php」ファイルを作成して下さい。
更に「templates」フォルダの下にも 「blocks」 フォルダを作成して下さい。
ここに 「sample2_block_template.html」 ファイルを作成して下さい。
作成後のディレクトリ構成は上記の画像のようになります。
<?php $modversion['name'] = 'サンプル2モジュール'; $modversion['dirname'] = basename(dirname(__FILE__)); $modversion['hasMain'] = 1; $modversion['cube_style'] = true; $modversion['templates'][0]['file'] = 'sample2.html'; // データベース設定 $modversion['sqlfile']['mysql'] = 'sql/mysql.sql'; $modversion['tables'][0] = '{prefix}_{dirname}_data'; // ブロックの追加 $modversion['blocks'][1]['name'] = 'ブロック'; $modversion['blocks'][1]['file'] = 'sample2_block.php'; $modversion['blocks'][1]['class'] = 'Sample2Block'; $modversion['blocks'][1]['template'] = 'sample2_block_template.html'; $modversion['blocks'][1]['func_num'] = 1;
以下にコードの説明をします。
今回の追加部分は13行目から18行目です。
まずブロックの追加を実施する場合には、 $modversion['blocks'][x]['名称'] と記載する。
[x] の x は0から始まる数値を指定します。ブロックが増える毎にこの値を増やしていきます。
14行目はこのブロックの名前を指定しています。
15行目はこのブロック処理が書かれたファイル名を指定しています。
16行目はこのブロックで使用するクラス名を指定しています。クラスの名称は任意の指定が出来ますが、
クラス名の先頭文字列は大文字にしないといけない命名規則があります。
「sample2_block.php」でクラスを作成する際には、Dirname_Class 名で「Legacy_BlockProcedure」の継承クラスを作成します。
「Dirname」はモジュールのディレクトリ名称で先頭文字は大文字にする必要があります。「Class」は16行目で指定したクラス名。
この場合は、 class Sample2_Sample2Block extends Legacy_BlockProcedure となります。
17行目はブロックで使用するテンプレート名を指定しています。はっきりした命名規則は無いようですが、
ここでは、 dirname_block_xxxxx.html の形で命名しています。
18行目については、必須の項目では無いのですが、指定する場合には、ブロックの [x] と同じ値を指定します。
<?php if(!defined('XOOPS_ROOT_PATH')) exit(); class Sample2_Sample2Block extends Legacy_BlockProcedure { function Sample2_Sample2Block (&$block) { parent::Legacy_BlockProcedure($block); } function execute() { $value = 'sample2のブロックです。'; $render = & $this->getRenderTarget(); $render->setTemplateName($this->_mBlock->get('template')); $render->setAttribute('mid', $this->_mBlock->get('mid')); $render->setAttribute('bid', $this->_mBlock->get('bid')); $render->setAttribute('BDATA', $value); $root = & XCube_Root::getSingleton(); $renderSys = & $root->getRenderSystem($this->getRenderSystemName()); $renderSys->renderBlock($render); } }
以下に変更コードの説明をします。
4行目でクラス名を指定しています。上記のxoops_version.phpの修正箇所でも触れているとおり、
クラス名は Sample2_Sample2Block extends Legacy_BlockProcedure としています。
Legacy_BlockProcedure はXoops Cubeでブロックを作成する際には、必要なクラスです。
6行目の function Sample2_Sample2Block (&$block) はクラスのコンストラクタを宣言しています。
子クラスがコンストラクタを有している場合、親クラスのコンストラクタが 暗黙の内にコールされることはありません。
親クラスのコンストラクタを実行するには、子クラスのコンストラクタの 中で parent::__construct() をコールすることが 必要です。参照
11行目の execute() の中で、ブロックの実行処理を記載しています。
15行目の $render = & $this->getRenderTarget(); で レンダーシステム(※) で使用する各種設定のためのオブジェクトを取得しています。
16行目の $render->setTemplateName($this->_mBlock->get('template')); でテンプレート名を設定しています。
このテンプレート名はxoops_version.phpで設定した 「sample2_block_template.html」 となります。
17行目の $render->setAttribute('mid', $this->_mBlock->get('mid')); はこのモジュールのIDを設定しています。
18行目の $render->setAttribute('bid', $this->_mBlock->get('bid')); はこのブロックのIDを設定しています。
19行目の $render->setAttribute('BDATA', $value); はこのブロックのテンプレートに表示する値を設定しています。
21行目の $root = & XCube_Root::getSingleton(); はシングルトンを取得しています。
22行目の $render->setAttribute('BDATA', $value); はレンダーシステムの名称を取得しています。
23行目の $render->setAttribute('BDATA', $value); はレンダーシステムがテンプレートに値を設定しています。
(※)テンプレートなどの管理システム
sample2_block_template.htmlを以下の内容にします。
<{$BDATA}>
以下に修正コードの説明をします。
1行目でテンプレートに表示する値をSmartyの形で取得出来るように記載しています。
修正が完了したら、Xoops Cubeを開きます。
Xoops Cubeを開いたら、管理者画面メニューを押下して下さい。
管理画面から、前回と同様にモジュールのアップデートを実施して下さい。
モジュールのアップデートが終わったら、ブロックのインストールを実施します。
上記の画像と同様に「ブロックのインストール」を押下して下さい。
以上でXoops Cube のブロックの追加を終了します。お疲れ様でした。