当前位置: 首页 > 知识库问答 >
问题:

如何在Laravel中动态显示菜单

蒙才
2023-03-14

我正在尝试用laravel动态显示菜单。

我有两个表,一个是主类,另一个是子类

下面是分类表的结构

  ----------------------------------
  | id | title   | slug  |  type   |
  | 1  | title1  | slug1 | Android |
  | 2  | title2  | slug2 | Android |
  | 3  | title3  | slug3 | Android |
  | 4  | title4  | slug4 | Ubuntu  |
  | 5  | title5  | slug5 | Ubuntu  |
  ----------------------------------

子类别结构

  -----------------------------------------------
  | id | title   | slug  | category_of|
  | 1  | title1  | slug1 | 1          |
  | 2  | title2  | slug2 | 1          |
  | 3  | title3  | slug3 | 1          |
  | 4  | title4  | slug4 | 2          |
  | 5  | title5  | slug5 | 1          |
  -----------------------------------------------

这是我尝试过的

<?php
    $category = App\Models\Menu::where('categories.type', 'Android')
                ->select('categories.*', 'sub_category.slug as sub_slug', 'sub_category.title')
                ->join('sub_category', 'sub_category.category_of', '=', 'categories.id')
                ->get();
            ?>
   @foreach ($category as $value)

<li class="inner-dropdown-item">
    <p>
  <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$value->slug}}/">{{ucwords(str_replace('-', ' ', $value->slug))}}</a>
    </p>
  </li>

  <li class="inner-dropdown-item">
      <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$value->sub_slug}}/{{$value->sub_slug}}">{{ucwords(str_replace('-', ' ', $value->sub_slug))}}</a>
  </li>

 @endforeach

我面临的问题是,由于foreach循环,它每次都会复制主类别,例如

<li class="inner-dropdown-item">
    <p>
       <a href="/category/android/">Android</a>
    </p>
</li>

<li class="inner-dropdown-item">
     <a href="/category/android/calendars">Calendars</a>
</li>

     <!-- /INNER DROPDOWN ITEM -->

<!-- /This Below Android category should not be shown again -->
<li class="inner-dropdown-item">
    <p>
       <a href="/category/android/">Android</a>
    </p>
</li>

<li class="inner-dropdown-item">
    <a href="/category/android/database-abstractions">Database Abstractions</a>
</li>

如您所见,每次显示子类别时,它都会复制主类别。我怎么能显示主要类别一次,然后所有子类别下面它

我有另一个模板,它有不同的菜单HTML结构

<!-- MENU ITEM -->
                <li class="menu-item sub">
                    <a href="#">
                        Designer
                        <!-- SVG ARROW -->
                        <svg class="svg-arrow">
                            <use xlink:href="#svg-arrow"></use>
                        </svg>
                        <!-- /SVG ARROW -->
                    </a>

                    <div class="content-dropdown">
                        <!-- FEATURE LIST BLOCK -->

                        <?php $m_des = ''; ?>
                        @foreach ($design_category as $des_value)

                            @if($m_des != $des_value->slug)
                            <div class="feature-list-block">
                                <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$des_value->slug}}/">
                                    <h6 class="feature-list-title">{{ucwords(str_replace('-', ' ', $des_value->slug))}}</h6></a>
                                <hr class="line-separator">
                                <?php $m_des = $des_value->slug; ?>
                                @endif
                                <!-- FEATURE LIST -->
                                <ul class="feature-list">

                                    <li class="feature-list-item">
                                        <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$des_value->slug}}/{{$des_value->sub_slug}}/">{{ucwords(str_replace('-', ' ', $des_value->sub_slug))}}</a>
                                    </li>

                                </ul>
                                <!-- /FEATURE LIST -->
                            </div>
                        @endforeach
                    </div>

                </li>
                <!-- /MENU ITEM -->

它一次又一次地生成ul和div,从而导致html错误

共有1个答案

夏侯弘光
2023-03-14

也许有更好的解决办法。但是你可以试试这个。按类别排序。id则上次是否打印循环内检查主类别

<?php
    $category = App\Models\Menu::where('categories.type', 'Android')
                ->select('categories.*', 'sub_category.slug as sub_slug', 'sub_category.title')
                ->join('sub_category', 'sub_category.category_of', '=', 'categories.id')
                ->orderBy('categories.id');
                ->get();
$latest_category = "";
            ?>
   @foreach ($category as $value)
<?php if($latest_category != $value->slug){ ?>
<li class="inner-dropdown-item">
    <p>
  <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$value->slug}}/">{{ucwords(str_replace('-', ' ', $value->slug))}}</a>
    </p>
  </li>
<?php 
$latest_category = $value->slug;
} ?>
  <li class="inner-dropdown-item">
      <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$value->sub_slug}}/{{$value->sub_slug}}">{{ucwords(str_replace('-', ' ', $value->sub_slug))}}</a>
  </li>

 @endforeach

编辑

<div class="content-dropdown">
                        <!-- FEATURE LIST BLOCK -->

    <?php $m_des = ''; 
    $end_div = '';
    ?>
    @foreach ($design_category as $des_value)

        @if($m_des != $des_value->slug)
        {{$end_div}}
        <div class="feature-list-block">
            <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$des_value->slug}}/">
                <h6 class="feature-list-title">{{ucwords(str_replace('-', ' ', $des_value->slug))}}</h6></a>
            <hr class="line-separator">
            <?php $m_des = $des_value->slug; 
            $end_div = "</div>";
            ?>
            @endif
            <!-- FEATURE LIST -->
            <ul class="feature-list">

                <li class="feature-list-item">
                    <a href="{{ Config::get('constants.url.BASE_URL') }}category/{{$des_value->slug}}/{{$des_value->sub_slug}}/">{{ucwords(str_replace('-', ' ', $des_value->sub_slug))}}</a>
                </li>

            </ul>
            <!-- /FEATURE LIST -->        
    @endforeach
    {{$end_div}}
</div>
 类似资料:
  • 如何在活动启动上显示“滑动菜单”?我正在使用导航抽屉显示幻灯片菜单如下代码 `public class MainActivity extends Base_Activity{private DrawerLayout MDrawerLayout;public static ListView MDrawerList;private ActionBarDrawerToggle MDrawerToggle

  • 问题内容: 我正在显示由HTML表和图像组成的屏幕,而HTML表是完全动态的。 代码工作流程 当用户正在加载页面(带有URL)时,我将在不同部分呈现HTML表,这意味着该页面已加载。我一次获取所有表数据为’JSON’格式,然后在加载满表时UI的gap(Interval)中一次显示3-3行,3 seconds然后显示图像一段时间,然后再显示一次加载表并在加载表后显示图像,所以它工作正常,现在我想做的

  • 我希望我的Laravel应用程序在开发期间在浏览器中输出断言错误。虽然我已经把一些断言在我的Laravel代码,肯定会失败,我从来没有看到任何错误输出在浏览器? Laravel中是否有断言报告配置可以强制显示这些错误? 在生产中,我希望断言失败调用回调方法并通过电子邮件向我发送错误。

  • 问题内容: 我需要使用D3.js在SVG:Text中显示多行文本。 示例数据如下所示,我想为每个作者在单个节点下显示“所有”标题,而不是在强制方向布局中显示为单个节点。 样本数据 SVG:text仅需要输入一个文本并显示在一行中,因此我添加了更多文本并调整了“ dy”?还是收回节点信息并替换? 感谢您的提示。 问题答案: 您有以下选择。 如前所述,您可以添加多个具有适当间距的元素。 您还可以在一个

  • 我遵循这个例子:https://docs.mapbox.com/android/maps/examples/symbol-layer-info-window/ 也在这里: https://github.com/mapbox/mapbox-android-demo/blob/master/MapboxAndroidDemo/src/main/java/com/mapbox/mapboxandroid

  • 我正在开发一个NetBeans插件,它需要使用“动态”菜单,因为目前必须在专用于某个菜单项及其操作的类中硬编码。然而,我希望允许用户通过插件提供的UI更改菜单项的值(它们的作用-这将在主方法中处理变量,我不允许用户为主方法本身编写代码-它们被调用的内容及其关联的键盘快捷键),以及添加和删除菜单项。我的插件可能会从一个文件中读取这些首选项,理想情况下,只有一个类可以创建所有这些动态菜单项,其值在首选