XOOPS のモジュールのブロック定義の開始は 0 ではなく 1なのは、仕様かバグか?
XOOPS のモジュールを作った。
Block を下記のように一つだけ追加していた。
$modversion['blocks'] = array(
array(
'file' => 'block.php',
'name' => _NAME,
'description' => _DESCRIPTION,
'show_func' => 'block_show',
'template' => 'block.html',
),);
インストールも実行もうまくいっていた。
しかし、XOOPSのモジュール管理で、該当のモジュールのアップデートを行うと、ブロックが消えてしまう。
XOOPS本体のソースを追ったところ、アップデート後にも利用されるブロックかのチェックで、ブロックリストのインデックスを1からチェックしている。
具体的には、xoops\modules\system\admin\modulesadmin\main.php の 340行目付近
$blocks = $module->getInfo('blocks');
...
$count = count($blocks);
...
for ($i = 1; $i <= $count; $i++) {
なので、インデックス0で定義されているモジュールはアップデート後利用されないと判定され、ブロックの設定がXOOPSのデータベースから消されてしまう。
他の多くのXOOPSのモジュールを調べたところ、ブロックの定義は、0からではなく、1から始めている。なので、下記に変更したところ、アップデートでも問題は発生しなくなった。
$modversion['blocks'][1]['file'] = 'block.php';
$modversion['blocks'][1]['name'] = _NAME;
$modversion['blocks'][1]['description'] = _DESCRIPTION;
$modversion['blocks'][1]['show_func'] = 'block_show';
$modversion['blocks'][1]['template'] = 'block.html';
これは、XOOPSのモジュール作成時の作法(仕様)なのだろうか?
個人的にはXOOPS本体のバグだと思う。