2014-03-12 109 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>