我正在尝试将一个小型CMS附加到我正在创建的网站上.但是我遇到了一个小问题.CMS使用PHP函数插入菜单,这些PHP函数创建HTML.我想使用的特定函数(treemenu)创建了一个嵌套的ul li,然后可以用于下拉菜单.但是嵌套的ul li的结构如下:
<li>Projects (Menu Level 1)</li>
<ul>
<li>Project 1 (Menu Level 2)</li>
<li>Project 2 (Menu Level 2)</li>
<li>Project 3 (Menu Level 2)</li>
</ul>
<li>News (Menu Level 1)</li>
<li>Contact (Menu Level 1)</li>
Run Code Online (Sandbox Code Playgroud)
在CSS中创建下拉菜单时,我认为菜单级别1应该像这样包装其子项:
<li>Projects (Menu Level 1)
<ul>
<li>Project 1 (Menu Level 2)</li>
<li>Project 2 (Menu Level 2)</li>
<li>Project 3 (Menu Level 2)</li>
</ul>
</li>
<li>News (Menu Level 1)</li>
<li>Contact (Menu Level 1)</li>
Run Code Online (Sandbox Code Playgroud)
我以前从未使用过PHP,因此不知道如何更改函数以完成上述操作.我希望这将是一个简单的改变.下面是输出第一个示例结构的PHP函数:
function treemenu($generat=0) {
global $pagenum, $menu, $selected, $extension, $set;
$count=0;
$out="\n";
$intend=0;
while($menu[$count][0] != "") {
if(strpos($menu[$count][3],"#") === false) {
if($menu[$count][2]=="0" && $intend==2) {
$intend--;
$out.="</ul>\n";
}
if($menu[$count][1]=="0" && $intend==1) {
$intend--;
$out.="</ul>\n";
}
if($menu[$count][1]!="0" && $intend<1) {
$intend=1;
$out.="<ul>\n";
}
if($menu[$count][2]!="0" && $intend<2) {
$intend=2;
$out.="<ul>\n";
}
$out.="<li class=\"LNE_menu\"><a ";
if($menu[$count][4]==$selected['name'])
$out.= 'class="selected" ';
if(strpos($menu[$count][3],"*"))
$out.='href="'.str_replace("*", "",$menu[$count][3]).'">';
elseif($generat)
$out.='href="'.$menu[$count][3].".".$set['extension'].'">';
else
$out.='href="'.$set['indexfile'].'?page='.$menu[$count][3].'">';
$out.=$menu[$count][4]."</a></li>\n";
}
$count++;
}
return $out;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可能指出我正确的方向,如何使一级菜单项的结束li标签立即包装ul,如第二个例子?
这将是使用递归的一个很好的例子.数组(其中包含子数组)定义每个级别,并且函数循环,每当找到要处理的新数组时调用它自己.只要该功能适当地清理(关闭</li> & </ol>),它就很大程度上是自动的.
<?php
// I know which function I'd rather write....
$tree = array('Projects (Menu Level 1)',
array('Project 1 (Menu Level 2)',
'Project 2 (Menu Level 2)',
'Project 3 (Menu Level 2)'),
'News (Menu Level 1)',
'Contact (Menu Level 1)');
// now quake beneath the power of this fully operational recursive function!
function olLiTree($tree)
{
echo '<ul>';
foreach($tree as $item) {
if (is_array($item)) {
olLiTree($item);
} else {
echo '<li>', $item, '</li>';
}
}
echo '</ul>';
}
olLiTree($tree); // kick off from the top level
Run Code Online (Sandbox Code Playgroud)