Laravel中无下级子分类的主分类如何移除对应下拉箭头图标
实现方案
你只需要调整showCategories方法的拼接逻辑,先判断当前主分类是否存在子分类,再决定是否渲染下拉箭头即可,修改后代码如下:
public static function showCategories($categories, $parent_id = 0) { $html = ""; // 初始化HTML内容 foreach ($categories as $row) { if ($row['parent_id'] == $parent_id) { $link = self::linkCategory($row['category_id'], $row['name']); // 先遍历拼接当前主分类的子分类内容 $subHtml = ''; foreach ($categories as $subcat) { if ($subcat['parent_id'] == $row['category_id']) { $subLink = self::linkCategory($subcat['category_id'], $subcat['name']); $subHtml .= '<li><a href="'.$subLink.'">'.$subcat['name'].'</a></li>'; } } // 拼接主分类结构 $html .= '<ul class="accordion"> <li> <div class="link accordion-title"><a href="'.$link.'">'.$row['name'].'</a>'; // 存在子分类才输出下拉箭头 if (!empty($subHtml)) { $html .= '<i class="fa fa-chevron-down"></i>'; } $html .= '</div>'; // 存在子分类才输出子菜单容器 if (!empty($subHtml)) { $html .= "<ul class='submenu'>" . $subHtml . "</ul>"; } $html .= "</li> </ul>"; } } return $html; }
核心改动点
- 新增
$subHtml变量单独存储当前主分类的子分类HTML片段,先完成子分类的遍历拼接再做判断 - 只有
$subHtml不为空(即存在子分类)时,才渲染fa fa-chevron-down下拉箭头图标和子菜单容器,无子分类时自动隐藏对应元素
可选优化
原代码中每次循环都输出id="accordion",会导致页面存在多个相同ID的元素,不符合HTML规范,建议将固定ID改为类名或拼接分类ID生成唯一标识。
Blade模板的调用逻辑不需要修改,原有调用代码$menu = URL::showCategories($itemCategory);可正常使用。
内容的提问来源于stack exchange,提问作者Thang Nguyen
相关产品推荐
相关产品推荐

