ブログ - XCL ブロック開発
XCL流のブロック開発はクラスを使ったもの?
■従来のブロック定義
xoops_version.phpの定義
(modules/legacy/admin/class/ModuleInstallUtils.class.php参照)
■XCL2.1のブロック定義
■クラスを作る
ファイル blocks/foobar.php
class {Module}_{BlockName}Block extends Legacy_BlockProcedure
■Legacy_BlockProcedure
・XCube_RenderTarget &getRenderTarget()
・string getRenderSystemName()
//
・int getId()
ブロックIDを得る
・string getName()
ブロック名を得る
・string getTitle()
ブロックタイトルを得る
・bool isEnableCache()
・int getCacheTime()
・int getEntryIndex()
ブロック位置を得る
・int getWeight()
優先度を得る
・bool isDisplay()
(デフォルト=true)
// virtual
・virtual bool prepare()
・virtual execute()
従来のブロック表示関数部分
・virtual string getOptionForm()
コントロールパネル用のオプションフォームHTMLを得る
■ブロックの起動
(modules.legacy/kernel/Legacy_PublicControllerStrategy.class.php参照)
(modules/legacy/class/Legacy_Utils.class.php参照)
createBlockProcedure
■xugj_block との関係
クラス化されているものだと、xugj_block で扱うことができないのでは...?
■D3対応への考察
$modversion['blocks'][]['file'] にはファイル名しか書くことができないので、このままでは公開側にproxyファイルを必要とする。
さらに問題なのはブロッククラス名。
ucfirst(モジュールディレクトリ名)."_".'class名'
という形なので、複製に対応できない...
■
Legacy_Utils::createBlockProcedure() にはデリゲート「Legacy_Utils.CreateBlockProcedure」が設定されている。
ここでオーバーライドすれば複製対応が可能と思われる。
■従来のブロック定義
xoops_version.phpの定義
(modules/legacy/admin/class/ModuleInstallUtils.class.php参照)
$modversion['blocks'][] = array(
'file' => ファイル名
'name' => ブロック名(ブロックタイトル)*
'description' => ??? 使っているのか?
'file' => ブロック関数のあるファイル
'show_func' => ブロック表示関数名
'edit_func' => ブロック編集関数名
'options' => ブロックオプション
'template' => ブロックテンプレート
'visible' =>
'visible_any' =>
'func_num' => ブロック関数番号?
);
■XCL2.1のブロック定義
$modversion['blocks'][] = array(
'file' => ファイル名
'name' => ブロック名(ブロックタイトル)*
'description' => ??? 使っているのか?
'file' => ブロッククラスのあるファイル
'class' => ブロッククラス名
'options' => ブロックオプション
'template' => ブロックテンプレート
'func_num' => ブロック関数番号?
);
■クラスを作る
ファイル blocks/foobar.php
class {Module}_{BlockName}Block extends Legacy_BlockProcedure
■Legacy_BlockProcedure
・XCube_RenderTarget &getRenderTarget()
・string getRenderSystemName()
//
・int getId()
ブロックIDを得る
・string getName()
ブロック名を得る
・string getTitle()
ブロックタイトルを得る
・bool isEnableCache()
・int getCacheTime()
・int getEntryIndex()
ブロック位置を得る
・int getWeight()
優先度を得る
・bool isDisplay()
(デフォルト=true)
// virtual
・virtual bool prepare()
・virtual execute()
従来のブロック表示関数部分
・virtual string getOptionForm()
コントロールパネル用のオプションフォームHTMLを得る
■ブロックの起動
(modules.legacy/kernel/Legacy_PublicControllerStrategy.class.php参照)
(modules/legacy/class/Legacy_Utils.class.php参照)
createBlockProcedure
■xugj_block との関係
クラス化されているものだと、xugj_block で扱うことができないのでは...?
■D3対応への考察
$modversion['blocks'][]['file'] にはファイル名しか書くことができないので、このままでは公開側にproxyファイルを必要とする。
さらに問題なのはブロッククラス名。
ucfirst(モジュールディレクトリ名)."_".'class名'
という形なので、複製に対応できない...
■
Legacy_Utils::createBlockProcedure() にはデリゲート「Legacy_Utils.CreateBlockProcedure」が設定されている。
ここでオーバーライドすれば複製対応が可能と思われる。