gpt4 book ai didi

php - 如何在 Laravel 中动态显示菜单

转载 作者:行者123 更新时间:2023-11-28 23:12:57 25 4
gpt4 key购买 nike

我正在尝试在 Laravel 中动态显示菜单。

我有两个表,一个包含主类别,另一个包含子类别

这是Category表的结构

  ----------------------------------
| 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 错误

最佳答案

可能有更好的解决方案。但你可以试试这个。按 categories.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>

关于php - 如何在 Laravel 中动态显示菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45125443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com