カスタムCMSの関数から出力されるナビゲーションHTMLにクラスを追加する必要があります。
必要な出力を取得する唯一の方法は、PHPを使用してHTMLを解析することです。
<li>
PHPのDOMメソッドを使用してHTMLを調べ、子を含む要素<ul>
(トップレベルのナビゲーションアイテム)にクラスを追加しています。
これまでのところ機能していますが、2つの質問があります。
このDOMデータを調べるためのより効率的な方法はありますか?面倒に思えますが、それは私の経験不足かもしれません。
場合によっては、
<li>
要素にすでにクラスがある場合がありますが、既存のクラス属性に、すでに存在する場合と存在しない場合があるものを破棄せずに追加するにはどうすればよいですか?
-
<?
$mcms_nav = getContent(
// call to cms that returns navigation html as a string
// ex. <ul id="pnav"><li><a href="/">home</a></li>....</ul>
);
$dom = new DOMDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->loadHTML($mcms_nav);
$x = new DOMXPath($dom);
foreach($x->query('//ul/li/ul') as $node)
{
$parent = $node->parentNode;
$parent_attr = $dom->createAttribute('class');
$parent_attr->value = 'has-flyout';
$parent->appendChild($parent_attr);
$flyout_attr = $dom->createAttribute('class');
$flyout_attr->value = 'flyout';
$node->appendChild($flyout_attr);
}
$mcms_nav = $dom->getElementByID('pnav');
echo $dom->saveHTML($mcms_nav);
?>