2011-11-16 19 views
5

मैं ज़ेंड एसीएल और ज़ेंड नेविगेशन के साथ काम कर रहा हूं। मैं बूटस्ट्रैप में नेविगेशन स्थापित कर रहा हूं। मैं लिंक दिखाने की कोशिश कर रहा हूं यदि उपयोगकर्ता को संसाधन तक पहुंच नहीं है। मैं कई ट्यूटोरियल, मैनुअल कई बार पढ़ा है Zend संदर्भ के माध्यम से चला, लेकिन नेविगेशन में लिंक के सभी अभी भी भले ही कुछ ही एक व्यवस्थापक उपयोगकर्ता को दिखाया जाना चाहिए अतिथि उपयोगकर्ता के लिए दिखाई दे रहे हैंज़ेंड नेविगेशन और ज़ेंड एसीएल

protected function _initNavigationMenu() 
{ 
    $this->bootstrap("layout"); 
    $layout = $this->getResource('layout'); 
    $view = $layout->getView(); 
    $navigation_model = new Core_Model_Navigation(); 
    $result = $navigation_model->getTopLevelNavigationLinksForDisplay(); 
    $sanitized = $navigation_model->sanatizeNavigationForDisplay($result); 

    $config = new Zend_Config($sanitized); 
    $nav = new Zend_Navigation($config); 

    $view->navigation($nav) 
      ->setAcl($this->_acl->acl()) 
      ->setRole((string)BW::user() -> role); 
} 

सभी एसीएल भूमिकाओं और संसाधनों और नेविगेशन मामले में एक DB से आते हैं कि

मायने रखती है यहां तेह सरणी द्वारा बनाई $ स्वच्छ

Array 
(
    [0] => Array 
     (
      [parent_id] => 0 
      [label] => File Manager 
      [order] => 1 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [module] => file 
      [reset_params] => 1 
      [id] => fileManagerLink 
     ) 

    [1] => Array 
     (
      [parent_id] => 0 
      [label] => Upload 
      [title] => Upload a file 
      [order] => 2 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [controller] => upload 
      [module] => file 
      [reset_params] => 1 
      [id] => fileManagerUploadLink 
     ) 

    [2] => Array 
     (
      [parent_id] => 0 
      [label] => Files 
      [title] => Manage your files 
      [order] => 3 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [controller] => manage 
      [module] => file 
      [reset_params] => 1 
      [id] => FileManagerFilesLink 
     ) 

    [3] => Array 
     (
      [parent_id] => 0 
      [label] => Contacts 
      [order] => 4 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [controller] => contact 
      [module] => file 
      [reset_params] => 1 
      [id] => Contacts 
     ) 

    [4] => Array 
     (
      [parent_id] => 0 
      [label] => My Account 
      [title] => Your Account 
      [order] => 5 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => index 
      [controller] => user 
      [reset_params] => 1 
      [id] => myAccountNavigationLink 
     ) 

    [5] => Array 
     (
      [parent_id] => 0 
      [label] => Admin 
      [title] => The administration panel 
      [order] => 6 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [module] => admin 
      [reset_params] => 1 
      [id] => Administration 
     ) 

    [6] => Array 
     (
      [parent_id] => 0 
      [label] => Test for ACL 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [7] => Array 
     ( 
      [parent_id] => 0 
      [label] => Test for ACL 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [8] => Array 
     (
      [parent_id] => 0 
      [label] => Test for ACL 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [9] => Array 
     (
      [parent_id] => 0 
      [label] => Test for ACL 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [10] => Array 
     (
      [parent_id] => 0 
      [label] => ACL Test 
      [order] => 0 
      [resource] => 8 
      [privilage] => index 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [11] => Array 
     (
      [parent_id] => 0 
      [label] => Joey 
      [order] => 0 
      [resource] => adminIndexIndex 
      [privilage] => index 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [12] => Array 
     (
      [parent_id] => 0 
      [label] => another test 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [13] => Array 
     (
      [parent_id] => 0 
      [label] => another test 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [14] => Array 
     (
      [parent_id] => 0 
      [label] => another test 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [15] => Array 
     (
      [parent_id] => 0 
      [label] => another stupid test 
      [order] => 0 
      [resource] => Admin Homepage 
      [privilage] => index 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

    [16] => Array 
     (
      [parent_id] => 0 
      [label] => another stupid test 
      [order] => 0 
      [resource] => 9 
      [active] => 1 
      [visible] => 1 
      [internal_page] => 1 
      [action] => add-navigation 
      [controller] => manage 
      [module] => admin 
      [reset_params] => 1 
     ) 

) 

उत्तर

15

जॉय,

है

इस पर अच्छा दस्तावेज ढूंढना मुश्किल हो सकता है, लेकिन यह अस्तित्व में है।

मेरी बूटस्ट्रैप में अपने एसीएल के

  • लिंक उन्हें अपने नेविगेशन वस्तु को Initialise, मैं निम्नलिखित के समान कार्य का उपयोग करें: आप अपने आवेदन के बूटस्ट्रैप में करने के लिए, की जरूरत है दो बातें है यह करने के लिए। इधर, एसीएल के हैं सेटअप के रूप में अपने आवेदन के लिए आवश्यक

    protected function _buildAclList() 
    { 
        $acl = new Zend_Acl(); 
    
        // setup the roles for the application 
        $acl->addRole(new Zend_Acl_Role('guest')); 
    
        $moduleResource = new Zend_Acl_Resource('administration'); 
    
        $acl->add($moduleResource) 
         ->add(new Zend_Acl_Resource('admin:copyright'), $moduleResource); 
    
        $acl->allow(
         array('guest'), 
         array('admin:copyright'), 
         array('view') 
        ); 
    
        Zend_Registry::set('acl', $acl); 
        return $acl; 
    } 
    

    : यहाँ महत्वपूर्ण पहलुओं का उदाहरण दिया गया है:

    एसीएल के जनरेट कर रहा है। यदि संसाधन कहीं और आवश्यक हो तो संसाधन विधि उन्हें उपयोग के लिए वापस लाती है और वे रजिस्ट्री में भी संग्रहीत होती हैं।

    उत्पन्न एसीएल के लिए नेविगेशन लिंक करना (यह भी एक डिफ़ॉल्ट भूमिका निर्दिष्ट करता है):

    protected function _buildNavigationList() 
    { 
        $this->bootstrap('layout'); 
        $layout = $this->getResource('layout'); 
        $view = $layout->getView(); 
        $config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav'); 
        $acl = Zend_Registry::get('acl'); 
        $navigation = new Zend_Navigation($config); 
        $view->navigation($navigation); 
        Zend_View_Helper_Navigation_HelperAbstract::setDefaultAcl($acl); 
        Zend_View_Helper_Navigation_HelperAbstract::setDefaultRole(
         Common_Controller_Plugin_Acl::DEFAULT_ROLE 
        ); 
        return $navigation; 
    } 
    

    संसाधन विधि रजिस्ट्री से पहले बनाया था एसीएल के ऊपर उठाता है और उन्हें आवंटित करने के लिए setDefaultAcl विधि का उपयोग करता डिफ़ॉल्ट भूमिका के साथ आवेदन नेविगेशन ऑब्जेक्ट।

    नेविगेशन बिल्ड कि एसीएल

    <?xml version="1.0" encoding="UTF-8"?> 
    <config> 
        <nav> 
         <administration> 
          <label>Administration</label> 
          <uri></uri> 
          <resource>reports:report</resource> 
          <privilege>view</privilege> 
          <pages> 
           <page_admin_copyright> 
            <label>Copyright maintenance</label> 
            <uri>/admin/copyright</uri> 
            <resource>admin:copyright</resource> 
            <privilege>view</privilege> 
           </page_admin_copyright> 
          </pages> 
         </administration> 
        </nav> 
    </config> 
    

    का सम्मान करता है यहाँ, हम नामक एक अनुभाग प्रशासन व्यवस्थापक पर दृश्य विशेषाधिकार के लिए उपयोगकर्ता की आवश्यकता है कि बना लिया है: कॉपीराइट संसाधन है, जो अतिथि पूर्व निर्मित एसीएल सूची के लिए धन्यवाद करता है।

    अब, जब आप $-> नेविगेशन() -> मेनू() -> रेंडर() आदि कहते हैं, तो मेनू विकल्प उपयोगकर्ता की पहुंच पर आधारित होंगे।

    हमम, मुझे लगता है कि मुझे अपनी साइट पर एक पोस्ट जोड़ना चाहिए। इसके साथ सबसे अच्छा।

    मैट

  • 0

    मेरा सुझाव है कि आप कुछ है कि एसीएल संसाधन से संबंधित अपने नेविगेशन xml फ़ाइल में एक और टैग को जोड़ने के लिए और अपनी INI फ़ाइल जहाँ आप अपने एसीएल मानचित्रण की दुकान में मैप करें।तर्क आपके बूटस्ट्रैप पर सबसे अच्छा कार्यान्वित किया जा सकता है ताकि चीजों से पहले इसे पढ़ा जा सके। यदि आपके पास है तो इसे अपने एजेक्स कॉल पर लागू करना भी न भूलें।

    0

    मुझे लगता है कि एक नियंत्रक प्लगइन की तरह Zend_Nav और Zend_Acl साथ प्रबंधन करने के लिए बेहतर है:

    class App_Controller_Plugin_Layout extends Zend_Controller_Plugin_Abstract 
    { 
    
    
        protected $_layout; 
        protected $_view; 
    
        public function preDispatch(Zend_Controller_Request_Abstract $request) 
        { 
         $this->_layout = Zend_Controller_Action_HelperBroker::getStaticHelper('Layout'); 
         $this->_layout->disableLayout(); 
         $this->_view = $this->_layout->getView(); 
         $module = $request->getModuleName(); 
         if(null === $module){ 
          $module = 'default'; 
         } 
         $this->_buildMenu($module,$request); 
         $this->_layout->setLayout($module); 
        } 
    
        protected function _buildMenu($module,$request) 
        { 
         $configFilename = APPLICATION_PATH . '/modules/'.$module.'/configs/navigation.xml'; 
         if(file_exists($configFilename)){ 
          $role = null; 
          $view= $this->_layout->getView(); 
          $config = new Zend_Config_Xml($configFilename, 'nav'); 
          $container = new Zend_Navigation($config); 
          $view->navigation($container); 
          $uri = $request->getPathInfo(); 
          $pages = $container->getPages(); 
          foreach($pages as $page){ 
           $page->setParams(array('ref'=>$request->getParam('ref'))); 
          } 
          $activeNav = $view->navigation()->findByUri($uri); 
          if ($activeNav == null){ 
           $activeNav = $view->navigation()->findOneByController($request->getControllerName()); 
          } 
          if ($activeNav != null){ 
           $activeNav->active = true; 
           $customCls = $activeNav->getClass(); 
           $activeNav->setClass('active'.!empty($customCls)?' '.$customCls:''); 
          } 
          $front = Zend_Controller_Front::getInstance(); 
          if ($front->hasPlugin('App_Controller_Plugin_Acl')) { 
           $aclPlugin = $front->getPlugin('App_Controller_Plugin_Acl'); 
          } 
          else{ 
           $front->registerPlugin(new App_Controller_Plugin_Acl()); 
           $aclPlugin = $this->getAclPlugin(); 
          } 
          $auth = Zend_Auth::getInstance(); 
          if ($auth->hasIdentity()) { 
           $role = is_object($auth->getIdentity())?$auth->getIdentity()->role:null; 
          } 
          $view->navigation()->setAcl($aclPlugin->getAcl())->setRole($role); 
         } 
        } 
    
    } 
    
    0

    इस गतिशील Bootstarp में नेविगेशन का निर्माण करने का प्रयास करें

    protected function _initNavigation() 
          { 
    
    
    
          $this->bootstrap('layout'); 
          $layout = $this->getResource('layout'); 
          $view = $layout->getView(); 
    
          $config = $this->getOptions(); 
    
          $db = Zend_Db::factory($config['resources']['db']['adapter'], $config['resources']['db']['params']); 
    
          if ($db) { 
           $sql = "your query1 here"; 
    
           $result= $db->query($sql)->fetchAll(); 
           $configuration = array(); 
           if (count($result)){ 
           foreach($result as $key=>$row) 
           { 
    
    
            $subsql = "your query 2 here"; 
    
            $subMenu = $result= $db->query($subsql)->fetchAll(); 
            if(count($subMenu)>0){ 
             $pages = array(); 
            foreach ($subMenu As $k=>$v){ 
             $subcatpages = array(); 
             $subcatgroup = array(); 
             $group = array(); 
             $page['label'] =$v['heading']; 
              if ($v['path']) == $row['path']){ 
    
             $page['uri'] ='/'.$row['path'].'.html'; 
             }elseif($row['id'] ==76){ 
    
             $page['uri'] ='/'.$v['path'].'.html'; 
              }else{ 
    
             $page['uri'] ='/'.$row['path'].'/'.$v['path'].'.html'; 
                      } 
    
    
             $supersubsql = "Query 3"; 
    
             $superSubMenu = $db->query($supersubsql)->fetchAll(); 
              if(count($superSubMenu)>0){ 
              if ($row['id'] != 76){ 
             foreach ($superSubMenu as $menu=>$item){ 
    
               $subpage['label'] =$item['heading']; 
               if ($v['path'] == $row['path']){ 
    
    
               $subpage['uri'] ='/'.$row['path'].'/'.$item['path'].'.html'; 
    
               }else{ 
              $subpage['uri'] = '/'.$row['path'].'/'.$v['path'].'/'.$item['path'].'.html'; 
    
               } 
    
               $subpage['params'] = array('action'=>'index', 
                'category'=> $item['path']); 
    
             $group[] =$subpage; 
    
             } 
    
             } 
             $page['pages'] =$group; 
             foreach ($group as $k=>$v){ 
              unset($group[$k]); 
             }  
    
             } 
    
    
    
    
             $pages[] =$page; 
             foreach ($page as $k=>$v){ 
              unset($page[$k]); 
             } 
    
            } 
    
            } 
            $configuration[$row['name']] = array(
              'label' => $row['name'], 
              'uri' => '/'.$row['path'].'.html', 
    
    
              ), 
    
              'pages' => $pages, 
    
            ); 
           } 
    
            } 
            } 
    
          $navigation = new Zend_Navigation($configuration); 
          $view->navigation($navigation); 
    
          } 
    

    मुझे आशा है कि यह आपकी मदद

    संबंधित मुद्दे