夫です。
このサイトはDrupal(http://drupal.org/)を使用して作成しています。
Drupalはオープンソース、PHPで作成されたCMSのフレームワークです。
DBにはMySQL,postgresqlのいずれでも動作可能です。
母体には基本的な機能のみがあり、モジュールというソフトウェアを追加することで、機能を拡充していくことができます。
そのモジュールの中に管理メニューを使いやすくする、YUIMENUモジュールというものがあります。
このYUIMENUモジュール(yuimenu-6.x-1.1-beta2.tar.gz)を追加したところ、イメージにあるような警告
warning: Invalid argument supplied for foreach() in /var/www/html/modules/yuimenu/yuimenu.module on line 355. warning: Invalid argument supplied for foreach() in /var/www/html/modules/yuimenu/yuimenu.module on line 232.
が出てしまいました。
モジュールもPHPで配布されているため、ある程度問題の原因を調査することが可能です。(その気になれば)
このエラーが出ている箇所を確認すると、
function script_menu($menu_id) {
$menu = load_menu($menu_id);
$i=0;
foreach ($menu as $menu_item) {
$mlid = $menu_item['link']['mlid'];
if ($menu_item['link']['hidden'] == 0) {
if ($menu_item['link']['has_children'] != 0)
{
$output .= 'this.getItem('. $i .').cfg.setProperty("submenu", oSubmenuData['.$i.']);'."\n";
}
$i++;
}
}
return $output;
}
というところででていました。
もう1つのエラーもほぼ同じ内容です。この原因は$menuがNULLにもかかわらず、foreach処理で評価しようとしているために、実行時にWarningが出ています。
ですので、以下のように、あらかじめNULL評価をしてあげれば解消できます。
function script_menu($menu_id) {
$menu = load_menu($menu_id);
$i=0;
if(isset($menu)==TRUE){
foreach ($menu as $menu_item) {
$mlid = $menu_item['link']['mlid'];
if ($menu_item['link']['hidden'] == 0) {
if ($menu_item['link']['has_children'] != 0){
$output .= 'this.getItem('. $i .').cfg.setProperty("submenu", oSubmenuData['.$i.']);'."\n";
}
$i++;
}
}
}
return $output;
}
これで、Wariningが表示されなくなります。
その他の部分の修正まで含めたパッチを添付しておきます。
diff -urpN yuimenu/yuimenu.module yuimenu-new/yuimenu.module --- yuimenu/yuimenu.module 2008-07-19 00:37:52.000000000 +0900 +++ yuimenu-new/yuimenu.module 2008-07-23 13:13:32.000000000 +0900 @@ -229,17 +229,17 @@ function script_menu($menu_id) { $menu = load_menu($menu_id); $i=0; - foreach ($menu as $menu_item) { - $mlid = $menu_item['link']['mlid']; - if ($menu_item['link']['hidden'] == 0) { - if ($menu_item['link']['has_children'] != 0) - { - $output .= 'this.getItem('. $i .').cfg.setProperty("submenu", oSubmenuData['.$i.']);'."\n"; - } - $i++; - } + if(isset($menu)==TRUE){ + foreach ($menu as $menu_item) { + $mlid = $menu_item['link']['mlid']; + if ($menu_item['link']['hidden'] == 0) { + if ($menu_item['link']['has_children'] != 0){ + $output .= 'this.getItem('. $i .').cfg.setProperty("submenu", oSubmenuData['.$i.']);'."\n"; + } + $i++; + } + } } - return $output; } @@ -352,17 +352,18 @@ function create_menu($menu_id) { $menu = load_menu($menu_id); $j=1; - foreach ($menu as $menu_item) { - if ($menu_item['link']['hidden'] == 0) - { - $mlid = $menu_item['link']['mlid']; - $output .= "\n{\n".'id: "' . rep_char($menu_item['link']['title']) . '",'."\nitemdata: [\n"; - if ($menu_item['link']['has_children'] > 0) { - $output .= create_inner_menu($menu_item['link']['menu_name'].':'.$mlid); - } - $output .= ']}'.($j++0) { + $output .= create_inner_menu($menu_item['link']['menu_name'].':'.$mlid); + } + $output .= ']}'.($j++
すぐに直ると思いますが、念のためこのパッチを本家のモジュール管理サイトのほうにも投稿しておきました。
