我有一个项目数组,代表服务器上目录的文件和目录结构。
$items
数组的构造如下:
Array
(
[folder1] => Array
(
[folder1_1] => Array
(
[0] => filenameX.txt
[1] => filenameY.txt
)
)
[pages] => Array
(
)
[0] => filename.txt
[1] => filename1.txt
)
我们想要的是,<ul>
每个节点都有<li>
。
生成的HTML应该类似于
现在,我的问题与使用laravel的刀片模板引擎的嵌套包含有关。
我有一个包含以下内容的list.blade.php
视图
<div class="listing">
@include('submenu', array('items', $items))
</div>
我将数组传递给它:
View::make('list')->with('items', $items)
包含的模板(submenu.blade.php
)具有以下内容:
<ul>
@foreach($items as $key=>$value)
@if (is_array($value))
<li>{{$key}}/
@include('submenu', array('items', $value))
</li>
@else
<li>{{$value}}</li>
@endif
@endforeach
</ul>
如果$value
是一个数组(目录),我@inlude自己内部的相同模板但使用新数据
首先,这有可能吗?
如果没有,是否有其他方法可以达到预期效果?
TIA,
答案 0 :(得分:6)
是的,这确实是可能的。
但是,您的套餐中存在问题,您有:
@include('submenu', array('items', $value))
应该是:
@include('submenu', array('items' => $value))
值得注意的是另一个隐藏的刀片状态@each
。您可以使用它而不是自己循环遍历数组,如下所示:
<ul>
@each('item.detail', $items, 'item')
</ul>
然后,您创建一个名为item.detail
的新刀片文件,并在该文件中弹出您之前在循环中的内容。它有助于清理您的视图,使其具有越来越多的嵌套循环。
当您进入新刀片文件时,该项目的数据将保留在第三个参数中,在本例中为$item
答案 1 :(得分:0)
使用雄辩的集合,而不是使用数组。而不是使用@include,使用\ View :: make。它稍微清理了代码。以下是Foundation 5框架的示例下拉菜单,使用具有父/子关系的雄辩模型:
我的模型有父 - >子关系
public function children() {
return $this->hasMany('Category', 'parent_id');
}
我在我的控制器中生成我的结果
$categories = \Category::where('parent_id', '=', '0')->with('children')->get();
刀片模板:_partials.dd-menu.blade.php
<ul class="{{$class}}">
@foreach($items as $item)
<?php
$active = $item->id == \Input::get('category') ? 'active' : '';
$hdd = $item->children->count() ? 'has-dropdown' : '';
?>
<li class="{{$hdd}} {{$active}}">
<a href="?category={{$item->id}}">{{$item->name}}</a>
@if ($item->children->count())
{{ View::make('_partials.dd-menu')->withItems($item->children)->withClass('dropdown')}}
@endif
</li>
@endforeach
在您的父级刀片中:
<nav class="top-bar" data-topbar role="navigation">
<ul class="title-area">
<li class="name">
<h1><a href="?category=">Categories</a></h1>
</li>
<!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
<li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
</ul>
<section class="top-bar-section">
<!-- Right Nav Section -->
{{ View::make('_partials.dd-menu')->withItems($categories)->withClass('right')}}
</section>
</nav>