【问题标题】:Reusable view layout in Laravel 5Laravel 5 中的可重用视图布局
【发布时间】:2015-06-07 18:28:46
【问题描述】:
在我的项目中,我有很多包含导航链接列表的视图。我已经将它作为一个视图分开,并为其他视图使用 @include('menu') 。但是,根据每个视图,我想向某些元素询问一些类(用于样式),但我不知道该怎么做
menu.blade.php
<ul class="menu">
<li class="menu-item active">
<a href="#">Product Manager</a>
</li>
<li class="menu-item">
<a href="#">Categories Manager</a>
</li>
<li class="menu-item">
<a href="#">Order Manager</a>
</li>
</ul>
更多解释:如果视图是产品经理,我只想在第一个“li”元素上添加“活动”...
【问题讨论】:
标签:
laravel-5
blade
reusability
【解决方案1】:
如果可以像下面这样构建你的 menu.blade.php:
<?php
$activeMenu = isset($activeMenu) ? $activeMenu : '';
$menuItems = [
'Product Manager' => '#',
'Categories Manager' => '#',
'Order Manager' => '#',
];
?>
<ul class="menu">
@foreach($menuItems as $name => $link)
<li class="menu-item {{ $activeMenu === $name ? 'active' : ''}}">
<a href="{{ $link }}">{{ $name }}</a>
</li>
@endforeach
</ul>
这允许您在单个数组中轻松定义菜单项,并且当它循环渲染每个菜单项时,它会检查是否需要添加活动类。
在您的其他视图中,当您使用 @include('menu') 时,您可以传入一个可选参数来设置活动菜单项:
{{-- Menu without any item active --}}
@include('menu')
{{-- Menu with Product Manager active --}}
@include('menu', ['activeMenu' => 'Product Manager'])
{{-- Menu with Order Manager active --}}
@include('menu', ['activeMenu' => 'Order Manager'])
【解决方案2】:
另一种选择:
<ul class="menu">
<li class="menu-item @if (Request::is('product-manager*')) active @endif">
<a href="product-manager">Product Manager</a>
</li>
<li class="menu-item @if (Request::is('categories-manager*')) active @endif">
<a href="categories-manager">Categories Manager</a>
</li>
<li class="menu-item @if (Request::is('order-manager*')) active @endif">
<a href="order-manager">Order Manager</a>
</li>
</ul>