> > > Zend Framework 17: Zend_Navigation kết hợp với đệ qui tạo menu đa cấp

Zend Framework 17: Zend_Navigation kết hợp với đệ qui tạo menu đa cấp

Để làm được cái này các bạn phải tạo phần quản lý menu trong admin, ở đây mình chỉ đưa ra 1 ví dụ minh hoạ

Bán tài liệu zend tiếng việt: 500.000 vnđ (500 k)

Hotline: 0933.381.903
Yahoo: Mua bán online
Email: songthan.hctm@gmail.com

đầu tiên tạo database:

PHP Code:
CREATE TABLE IF NOT EXISTS `menu_items` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
namevarchar(145COLLATE utf8_unicode_ci NOT NULL COMMENT 'ten cua menu',
  `
parentsint(11) DEFAULT '0' COMMENT '0 - la menu goc',
  `
leveltinyint(4NOT NULL DEFAULT '0',
  `
modulevarchar(100COLLATE utf8_unicode_ci DEFAULT NULL,
  `
controllervarchar(100COLLATE utf8_unicode_ci DEFAULT NULL,
  `
actionvarchar(100COLLATE utf8_unicode_ci DEFAULT NULL,
  `
routervarchar(145COLLATE utf8_unicode_ci DEFAULT 'none',
  `
paramstext COLLATE utf8_unicode_ci,
  `
typevarchar(45COLLATE utf8_unicode_ci DEFAULT 'module' COMMENT 'link - module',
  `
urlvarchar(255COLLATE utf8_unicode_ci DEFAULT NULL,
  `
orderingint(11) DEFAULT NULL,
  `
statusvarchar(45COLLATE utf8_unicode_ci DEFAULT 'inactive' COMMENT 'active - inactive',
  
PRIMARY KEY (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=45 

Tạo thêm 1 file Recursive.php để build menu đệ qui đặt trong thư mục Qhuyonline/System/

PHP Code:
<?php
    
class Qhuyonline_System_Recursive{
       
       protected 
$_sourceArr;
       public function 
__construct($sourceArr null){
          
$this->_sourceArr $sourceArr;
       }
       

       public function 
buildRecursive($parents 0){
          
$resultArr = array();
          
$level = array();
          
//$this->recursive1($this->_sourceArr,$parents,$level,$resultArr,0);
          
$resultArr $this->getCategory($this->_sourceArr,0);
          return 
$resultArr;
       }
       public function 
getCategory($data$prentsID0) {
           
$newArray = array();
           foreach(
$data as $value) {
              
              if (
$value['parents'] == $prentsID) {
                 
$arr['label']       = $value['name'];
                 if(
$value['type']=='root'){
                    
$arr['uri']    = "#";   
                 }else if(
$value['type']=='link'){
                    
$arr['uri']    = $value['url'];
                 }
                 else{
                    
$arr['module']      = $value['module'];
                    
$arr['controller']    = $value['controller'];
                    
$arr['action']       = $value['action'];
                 }
                 
                 
$arr['pages']       = $this->getCategory($data$value['id']);
                
$newArray[]       = $arr;
                    
              }
           }
           return 
$newArray;
       }

       
    }

Trong Boostrap.php

PHP Code:
protected function _initNavigation()
       {
          
$db Zend_Db_Table::getDefaultAdapter();
          
$select $db->select()
                   ->
from('menu_items')
                   ->
order('id ASC');
          
$result $db->fetchAll($select);
          
          
$re = new Qhuyonline_System_Recursive($result);      
          
$pages $re->buildRecursive(0);

          
$resource = new Zend_Application_Resource_Navigation(array(
             
'pages' => $pages,
          ));
          
$resource->setBootstrap($this);
          return 
$resource->init();
       } 

Và cuối cùng thưởng thức đặt trong layout

PHP Code:
<?php echo $this->doctype() ?>
    <html>
    <head>
        <?php echo $this->headTitle() ?>
          <?php echo $this->headMeta() ?>
          <?php echo $this->headLink() ?>
          <?php echo $this->headScript() ?>
    </head>
    <body>
        <h1>Default layout</h1>
        <style>
       
       </style>
        <?php
       
        
echo $this->navigation();
       echo 
$this->navigation()->sitemap();
        echo 
'<pre>';
       
// print_r($this->navigation()->breadcrumbs());
        
echo '</pre>';
        echo 
$this->navigation()->breadcrumbs()->setLinkLast(true)->setMinDepth(0);
        
//echo $this->navigation()->breadcrumbs()->setMinDepth(0)->setLinkLast(true)->setSeparator(" : ");
           /*$navigation = Zend_Registry::get('navigation');
           echo $this->navigation($navigation)->menu();
           $xml= $this->navigation($navigation)->sitemap()
                    ->setFormatOutput(true)
                       ->setRole();;
           
           */
        
?>
        <?php echo $this->layout()->content ?>
    </body>
    </html>