You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 12:24:03