2013-08-05 102 views
1

如何在網站上有多個菜單?Zend_Navigation多個菜單

現在我有一個頂級菜單(通過ACL權限訪問項目),但如何創建第二個sidemenu? 在多個頁面上,我將有多個sidemenu。

我認爲它應該工作的第一種方法是創建一個帶有兩個新屬性 - 「位置」(格式爲「top」或「top | sidemenu」)和「where2display」(格式爲: 「控制器:作用|控制器:行動」)。 並在top.phtml或sidemenu.phtml中檢查位置是否爲頂部/側邊菜單,並且該菜單項可以用於指定控制器&操作可見。

回答

0

我照我說的做了:)這個功能非常簡單和有彈性。

navigation.php

$siteMenu = array(
    array(
     'resource' => 'superadmin:index', 
     'privilege' => 'index', 
     'label'  => 'Dashboard', 
     'module'  => 'superadmin', 
     'controller' => 'index', 
     'action'  => 'index', 
     'route'  => 'superadmin', 
     'icon'  => 'icon-home', 
    ), 
    // ====================================== USERS 
    array(
     'resource' => 'superadmin:users', 
     'privilege' => 'index', 
     'label'  => 'Users', 
     'module'  => 'superadmin', 
     'controller' => 'users', 
     'action'  => 'index', 
     'route'  => 'superadmin', 
     'position' => 'top|sidebar', 
     'accessable' => 'users:*|multid:*', 
     'pages'  => array(
      array(
       'resource' => 'superadmin:users', 
       'privilege' => 'index', 
       'label'  => 'Users list', 
       'module'  => 'superadmin', 
       'controller' => 'users', 
       'action'  => 'index', 
       'route'  => 'superadmin', 
       'icon'  => 'icon-list', 
       'position' => 'top|sidebar', 
       'accessable' => 'users:*|multid:*', 
      ), 

視圖助手,這將有助於爆炸的自定義導航屬性:

<?php 

/** 
* Helper for building menu with Zend_Navigation 
* 
* @author  Szymon Bluma <[email protected]> 
*/ 
class MrBlue_Helper_Navigation 
{ 

    /** 
    * Is the $page visible on sidebar? 
    * 
    * @param Zend_Navigation_Page $page 
    * @return boolean 
    */ 
    public static function isSidebar(Zend_Navigation_Page $page) 
    { 
     if(isset($page->position) && in_array('sidebar',explode('|',$page->position))) { 
      return true; 
     } 

     return false; 
    } 

    /** 
    * Is the #page visible on topmenu? 
    * 
    * @param Zend_Navigation_Page $page 
    * @return boolean 
    */ 
    public static function isTopmenu(Zend_Navigation_Page $page) 
    { 
     if(!isset($page->position)) { 
      return true; 
     } 

     if(in_array('top',explode('|',$page->position))) { 
      return true; 
     } 

     return false; 
    } 

    /** 
    * Is the $page (mainly in sidebar) accessable in $position type menu? 
    * 
    * @param Zend_Navigation_Page $page 
    * @param string    $position OPTIONAL menu type - top or sidebar 
    * @return boolean 
    */ 
    public static function isAccessable(Zend_Navigation_Page $page, $position='top') 
    { 
     if($position=='top' || !isset($page->accessable)) { 
      return true; 
     } 

     $controller = Zend_Controller_Front::getInstance()->getRequest()->getControllerName(); 
     $action = Zend_Controller_Front::getInstance()->getRequest()->getActionName(); 
     $elements = explode('|',$page->accessable); 

     if(in_array($controller.':*',$elements) || in_array($controller.':'.$action,$elements)) { 
      return true; 
     } 

     return false; 
    } 
} 

而且menu_left.phtml視圖文件:

<?php if($this->container): ?> 
    <ul class="nav nav-list"> 
     <?php foreach ($this->container as $page): ?> 
      <?php if($this->navigation()->accept($page) && MrBlue_Helper_Navigation::isAccessable($page, 'sidebar')): ?> 
       <?php if($page->isVisible() && MrBlue_Helper_Navigation::isSidebar($page)): ?> 
        <?php if(count($page->pages) > 0): ?> 
         <li class="nav-header"><?php if(isset($page->icon)): ?><span class="<?= $page->icon; ?> icon"></span> <?php endif; ?><?= $page->label; ?></li> 
          <?php foreach ($page->pages as $subPage): ?> 
           <?php if($subPage->isVisible() && MrBlue_Helper_Navigation::isSidebar($subPage)): ?> 
            <?php if ($this->navigation()->accept($subPage) && MrBlue_Helper_Navigation::isAccessable($subPage, 'sidebar')): ?> 
             <li<?php if($subPage->isActive()): ?> class="active"<?php endif; ?>> 
              <a href="<?php echo $subPage->href; ?>" title="<?= $subPage->label; ?>"><?php if(isset($subPage->icon)): ?><span class="<?= $subPage->icon; ?> icon"></span> <?php endif; ?><?= $subPage->label; ?></a> 
             </li> 
            <?php endif; ?> 
           <?php endif; ?> 
          <?php endforeach; ?> 
         </li> 
        <?php else: ?> 
         <li<?php if($page->isActive()): ?> class="active"<?php endif; ?>> 
          <a href="<?php echo $page->href; ?>" title="<?= $page->label; ?>"><?php if(isset($page->icon)): ?><span class="<?= $page->icon; ?> icon"></span> <?php endif; ?><?= $page->label; ?></a> 
         </li> 
        <?php endif; ?> 
       <?php endif; ?> 
      <?php endif; ?> 
     <?php endforeach; ?> 
    </ul> 
<?php endif; ?> 

我也有menu_top.phtml文件 - 它與使用MrBlue_Help自己的方法的menu_left.phtml類似er_Navigation。自己想想吧;)