読者です 読者をやめる 読者になる 読者になる

XOOPS のモジュールのブロック定義の開始は 0 ではなく 1なのは、仕様かバグか?

XOOPS のモジュールを作った。

 

Block を下記のように一つだけ追加していた。

xoops_version.php

$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から始めている。なので、下記に変更したところ、アップデートでも問題は発生しなくなった。

xoops_version.php

$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本体のバグだと思う。