Artisteer で作成した Drupal テーマで垂直メニューを使う場合、サーバーの PHP 環境に DOM が組み込まれていないと、サブメニュー項目の表示がおかしくなる件。
エクスポートしたテーマに含まれる common_methods.php の art_menu_worker() 関数に次のようなコードがある。
…
if (class_exists('DOMDocument')) {
$output = art_menu_xml_parcer($output, $show_sub_menus, $menu_class);
/* Support Block Edit Link module */
$output = str_replace('<!DOCTYPE root>', $empty_str, $output);
}
else {
$output = preg_replace('~(<a [^>]*>)([^<]*)(</a>)~', '$1<span class="l"></span><span class="r"></span><span class="t">$2</span>$3', $output);
}
return $output;
DOM が組み込まれていなくても else ブロックが実行されてエラーにはならないが、メニューのサブ項目にも余計な span が追加されてレイアウトが崩れる模様。
対策は DOM をインストールすること。
CentOS の場合は次のコマンドラインを実行する。
# yum install php-xml
DOM がインストールされれば、サブ項目も含めて垂直メニューが正常に表示されるようになる。
以上、Artisteer の便利な垂直メニューの階層表示を使うには PHP に DOM が必須っぽいということでメモ。