2014-03-12 114 views
2

我有一个项目数组,代表服务器上目录的文件和目录结构。刀片模板递归包括

$items数组构造是这样的:

Array 
(
    [folder1] => Array 
     (
      [folder1_1] => Array 
       (
        [0] => filenameX.txt 
        [1] => filenameY.txt 
       ) 
     ) 
    [pages] => Array 
     (
     ) 
    [0] => filename.txt 
    [1] => filename1.txt 
) 

我们想要的东西,基本上是<ul><li>为每个节点。

生成的HTML应该像

  • 文件夹1/
    • folder1_1/
      • filenameX.txt
      • filenameY.txt
  • 页/
  • filename_1.txt
  • filename_2.txt

现在,我的问题是关于与laravel的刀模板引擎嵌套包括做。

我有以下内容

<div class="listing"> 
    @include('submenu', array('items', $items)) 
</div> 

的图list.blade.php和我通过它在阵列是这样的:

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> 

I @如果$value是数组(目录)

首先,这是否可能?

如果没有,是否有另一种方法来达到所需的结果?

TIA,

+0

记住,该递归可veeeery长。 –

+1

你是否尝试过? – jah

+0

好吧,我没有... 'PHP致命错误:允许内存大小为134217728字节耗尽' –

回答

4

是的,这确实是可能的。

然而,有一个问题,在你包括你:

@include('submenu', array('items', $value)) 

它应该是:

@include('submenu', array('items' => $value)) 

值得一提的还有另一个隐藏刀片statment,@each。你可以使用这个,而不是通过自己的数组中,这样的循环:

<ul> 
    @each('item.detail', $items, 'item') 
</ul> 

然后创建一个名为item.detail新的刀片文件,弹出您以前在该文件中环有什么。它有助于清理拥有越来越多嵌套循环的视图。

当你有新的刀片文件中的项目的数据将在第三个参数举行,在这种情况下$item

0

而不是使用数组,用雄辩的集合。而不是使用@include,使用\ View :: make。它清理了一下代码。下面是一个例子下拉菜单为基金会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>