我正在使用一种通过递归为我的网站构建导航的方法,但我在添加样式时遇到了麻烦。我的方法的构建方式我似乎无法找到一种方法让父类成为父类,子类成为子类,所以在 CSS 中我可以设置两者的样式。如果它会让事情更容易理解,这里是我的数据库的一个例子:
这是我试图实现的输出示例:
<ul>
<li class="parent">Parent
<ul>
<li class="child">Child 1</li>
<li class="child">Child 2</li>
<li class="child">Child 3</li>
<li class="child">Child 4</li>
</ul>
</li>
</ul>
当前代码将 child 放在<li>
. 我尝试了很多不同的事情,这让我很生气。这是代码:
/* i'm using pdo to pull all the categories out of MySQL, NULL means it will be a parent category */
$array = $categoryVIEW->fetchAll(PDO::FETCH_ASSOC);
$this->buildSide($array,NULL)
private function buildSide($items,$parent)
{
$hasChildren = false;
$outputHtml = '<ul>%s</ul>';
$childrenHtml = '';
foreach($items as $item)
{
if ($item['parent'] == $parent)
{
$hasChildren = true;
$childrenHtml .= '<li><a href="?c='.$item['category_id'].'">'.$item['category_name'];
$childrenHtml .= $this->buildSide($items,$item['category_id']);
$childrenHtml .= '</a></li>';
}
}
if (!$hasChildren)
{
$outputHtml = '';
}
return sprintf($outputHtml,$childrenHtml);
}
我确定这很容易,但我被卡住了:(
感谢您的关注!
更新
我一直在玩弄我的代码并添加了一个条件来检查$parent
存在NULL
,如果是这样$class
,则成为父母,否则成为$class
孩子。我遇到的问题是我<ul></ul>
在每个孩子之后都会得到一个不需要的东西?奇怪的是,当我改变$child = false;
它时,它消除了我的错误<ul></ul>
,但让一切都成为父母。
private function buildSide($array,$parent)
{
$child = ($parent === NULL)?false:true;
$html = '';
$tag = '<ul>%s</ul>';
$class = ($child)?'child':'parent';
foreach($array as $item)
{
if($item['parent'] === $parent)
{
$child = true;
$html .= '<li class="'.$class.'">'.$item['category_name'];
$html .= $this->buildSide($array,$item['category_id']);
$html .= "</li>\n";
}
}
if(!$child)
{
$tag = '';
}
return sprintf($tag,$html);
}