• カテゴリ 開発用メモ の最新配信
  • RSS
  • RDF
  • ATOM

ブログ - XCL ブロック開発

XCL ブロック開発

カテゴリ : 
開発用メモ » XCL開発資料
執筆 : 
masa 2008/7/27
XCL流のブロック開発はクラスを使ったもの?

■従来のブロック定義
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」が設定されている。
ここでオーバーライドすれば複製対応が可能と思われる。
  • トラックバック (0)
  • 閲覧 (4596)