Laravel 4/Zurb基金会多级动态菜单

Laravel 4/Zurb基金会多级动态菜单

问题描述:

我想从数据库中创建一个多级菜单。在数据库中,我有这些collumns:'id','name','parent_id','url'。如果项目没有孩子,“PARENT_ID”设置为0Laravel 4/Zurb基金会多级动态菜单

我已经使用这个教程:Laravel 4 - Eloquent. Infinite children into usable array?,和它的伟大工程,这是结果:

  • 首页
    • 注册
      • 你好
    • 登录
            • 心灵

的问题是:如何设置所需的类,用于Zurb基金会工作?在这种情况下,我只想看[Home],然后点击它[Register]并且[Login]应该出现,依此类推。

的最后一个功能,打印出HTML是这样的:

private function htmlFromArray($array) { 
    $html = ''; 
    foreach($array as $k=>$v) { 
     $html .= "<ul>"; 
     $html .= '<li><a href="#">'.$k."</a></li>"; 
     if(count($v) > 0) { 
      $html .= $this->htmlFromArray($v); 
     } 
     $html .= "</ul>"; 
    } 
    return $html; 
    } 

这是下拉菜单从Zurb网站的例子:

<a href="#" data-dropdown="drop1">Has Dropdown</a> 
    <ul id="drop1" class="f-dropdown" data-dropdown-content> 
     <li><a href="#">This is a link</a></li> 
     <li><a href="#">This is another</a></li> 
     <li><a href="#">Yet another</a></li> 
    </ul> 

所以我的HTML看起来应该像这个:

<a href="#" data-dropdown="drop1">Home</a> 
    <ul id="drop1" class="f-dropdown" data-dropdown-content> 
     <li><a href="#" data-dropdown="drop2">Register</a></li> 
      <ul id="drop1" class="f-dropdown" data-dropdown-content> 
      <li><a href="#">Hello</a></li> 
      </ul> 
     <li><a href="#" data-dropdown="drop3">Login</a></li> 
      <ul id="drop1" class="f-dropdown" data-dropdown-content> 
      <li><a href="#">Yeah</a></li> 
      <li><a href="#" data-dropdown="drop4">Where</a></li> 
       <ul id="drop1" class="f-dropdown" data-dropdown-content> 
        <li><a href="#">Is</a></li> 
       </ul> 
      </ul> 
    </ul> 

而我不知道,如何实现这一点,所以任何帮助,将不胜感激。 或者如果有人有另一种创建动态,多级菜单的方式,请分享!

从我可以看到你的原始数组看起来是这样的:

$array = array(
    'Home' => array(
      'Register' => array(
       'Hello' => array() 
      ), 
      'Login' => array(
       'Yeah' => array(), 
       'Where' => array(
        'Is' => array(
         'My' => array() 
        ) 
       ), 
      ) 

    ) 
); 

我选择来处理在一个单独的功能,顶级的链接,这些不会有UL /李包装。

function dropdownList($array) { 
    $html = ""; 
    $dropDownId = 0; 

    foreach ($array as $k => $v) { 

     if(count($v) > 0) { 
      $hasChildren = true; 
      $dropDownId++; 
     } else { 
      $hasChildren = false; 
     } 

     $html = '<a href="#"' . ($hasChildren ? ' data-dropdown="drop' . $dropDownId . '"' : '') . '>' . $k . '</a>'; 

     if($hasChildren) { 
      $html .= children($v, $dropDownId); 
     } 

    } 

    return $html; 
} 

function children($array, &$dropDownId) { 

    $html = '<ul id="drop' . $dropDownId . '" class="f-dropdown" data-dropdown-content>'; 

    foreach($array as $k=>$v) { 

     if(count($v) > 0) { 
      $hasChildren = true; 
      $dropDownId++; 
     } else { 
      $hasChildren = false; 
     } 

     $html .= '<li><a href="#"' . ($hasChildren ? ' data-dropdown="drop' . $dropDownId . '"' : '') . '>'.$k."</a>\n"; 
     if($hasChildren) { 
      $html .= children($v, $dropDownId); 
     } 
     $html .= '</li>'; 
    } 
    $html .= "</ul>"; 
    return $html; 
} 

输出:

echo dropdownList($array); 

<a href="#" data-dropdown="drop1">Home</a> 
<ul id="drop1" class="f-dropdown" data-dropdown-content> 
    <li> 
     <a href="#" data-dropdown="drop2">Register</a> 
     <ul id="drop2" class="f-dropdown" data-dropdown-content> 
      <li> 
       <a href="#">Hello</a> 
      </li> 
     </ul> 
    </li> 
    <li> 
     <a href="#" data-dropdown="drop3">Login</a> 
     <ul id="drop3" class="f-dropdown" data-dropdown-content> 
      <li> 
       <a href="#">Yeah</a> 
      </li> 
      <li> 
       <a href="#" data-dropdown="drop4">Where</a> 
       <ul id="drop4" class="f-dropdown" data-dropdown-content> 
        <li> 
         <a href="#" data-dropdown="drop5">Is</a> 
         <ul id="drop5" class="f-dropdown" data-dropdown-content> 
          <li> 
           <a href="#">My</a> 
          </li> 
         </ul> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

即时猜测到你想有一个acutal链接,而不是#的筑巢的地方。这并不能解决这个问题,但你可以检查$ v是否是一个字符串,然后再检查它是否为儿童,并在这种情况下换出#在href中。

那个beeing说,你有没有考虑过在基础上使用顶栏菜单。它似乎更适合:) http://foundation.zurb.com/docs/components/topbar.html

我在Laravel有一套,所以让我知道你是否对这个解决方案感兴趣。