2013-06-18 8 views
6

में वर्तमान पृष्ठ में सक्रिय वर्ग को जोड़ने के लिए कैसे मैं एक समस्या यह सवालCakePHP

How to identify active menu link in CakePHP

मैं अपने default.ctp फ़ाइल में एक पेज है, जिसमें मैं जोड़ना चाहते है 'सक्रिय' वर्ग के लिए इसी तरह की है लिंक पर मैं कैसे पृष्ठ के वर्तमान यूआरएल की पहचान कर सकते हैं और उसके बाद लिंक पर वर्ग लागू .. मैं इस सवाल का जवाब भी वहाँ जो है

 $url = $this->Html->url('INPUT_THE_URL') ; 
    $active = $this->request->here == $url? true: false; 

मुझे नहीं पता है कि मैं अपने कोड में यह कर सकते हैं के लिए .. खेद का पालन किया है यहाँ .. के रूप में मैं CakePHP में नौसिखिया हूँ पूछ मैं इस

<li class = 'active''> 
+0

[कैसे CakePHP में सक्रिय मेनू लिंक की पहचान करने] (http://stackoverflow.com/questions/11717422/how-to-identify-active-menu-link-in-cakephp) – bfncs

उत्तर

12

तरह ली के साथ एक वर्ग को जोड़ने के लिए यह एक साधारण तर्क है चाहता हूँ के रूप में

इस प्रकार मेरी कोड

**default.ctp file** 

<li> 
     <?php echo $this->Html->link('Dashboard', array('controller'=>'users','action' => 'controlpanel'), array('title' => 'Dashboard','class' => 'shortcut-dashboard'));?></li> 



    <li> <?php echo $this->Html->link('Contacts', array('controller'=>'contacts','action' => 'index'), array('title' => 'Contacts','class' => 'shortcut-contacts'));?></li> 

है

<li class="<?php echo (!empty($this->params['action']) && ($this->params['action']=='controlpanel'))?'active' :'inactive' ?>"> 
    <?php echo $this->Html->link('Dashboard', array('controller'=>'users','action' => 'controlpanel'), array('title' => 'Dashboard','class' => 'shortcut-dashboard'));?> 
</li> 

<li class="<?php echo (!empty($this->params['action']) && ($this->params['action']=='index'))?'active' :'inactive' ?>"> 
    <?php echo $this->Html->link('Contacts', array('controller'=>'contacts','action' => 'index'), array('title' => 'Contacts','class' => 'shortcut-contacts'));?></li> 
+0

thankkkkkkkkkkkkkkkkkkkkk के संभावित डुप्लिकेट आप वास्तव में काम करता है ... धन्यवाद budyy .god आपको – hellosheikh

+0

COOL आशीर्वाद .. स्वागत है – AnNaMaLaI

7

आप एक अलग नियंत्रक है और आप एक ही नाम के साथ एक विधि घोषणा की है, और इसके बाद के संस्करण कोड काम नहीं कर रहा है, तो आप निम्न कर सकते हैं:

<li class="<?php echo (($this->params['controller']==='hotels')&& ($this->params['action']=='view'))?'active' :'' ?>" > 
    <?php echo $this->Html->link('Hotels', array('controller' => 'hotels', 'action' => 'view')); ?> 
</li> 

<li class="<?php echo (($this->params['controller']==='packages')&& ($this->params['action']=='view'))?'active' :'' ?>" > 
    <?php echo $this->Html->link('Packages', array('controller' => 'packages', 'action' => 'view')); ?> 
</li> 

यहाँ दृश्य विधि है विभिन्न नियंत्रक में घोषित किया गया। मुझे आशा है कि यह आपके लिए सहायक होगा।

1

नहीं एक मरे हुए पद को पुनर्जीवित करने की है, लेकिन इस मैं क्या कर रहा है (जो मेरा मानना ​​है कि एक सा क्लीनर है और तेजी से और अधिक प्रबंधनीय थोड़ा)

मैं एक तत्व पृष्ठों की एक सरणी है कि बनाने के लिए, तो मैं यह देखने के लिए कि यह वर्तमान पृष्ठ है या नहीं, सरणी में प्रत्येक आइटम के खिलाफ जांचें। यदि यह है कि मैं सक्रिय वर्ग जोड़ता हूं।

मैं इस तत्व को कहीं से भी कॉल कर सकता हूं।

// Changed the line below to a multi-dimensional array to cater for different controllers and actions 

//$mypages = array('Home','About','Pricing','FAQs','Contact'); 
$mypages = array(
array('controller'=>'controller1','action'=>'action1','name'=>'name1'), 
array('controller'=>'controller2','action'=>'action2','name'=>'name2 
') 
); 
foreach ($mypages as $page){ 
// Changed to account for controller and action 
//$currentPage = isset($this->params['pass'][0]) ?$this->params['pass'][0] : ""; 
$controller = isset($this->request->params['controller'])?$this->request->params['controller']: ""; 
$action= isset($this->request->params['action'])?$this->request->params['action']: ""; 

    if (strtolower($page['controller']) == $controller && strtolower($page['action']) == $action) { 
     echo "<li class='active'>" . $this->Html->link($page,array("controller"=>"pages", "action"=>strtolower($page))) . "</li>" ; 
    } 
    else { 
     echo "<li>" . $this->Html->link($page,array("controller"=>"pages", "action"=>strtolower($page))) . "</li>"; 
    } 
} 
+0

मैं आपके उदाहरण की तरह एक क्लीनर तरीका खोज रहा हूं। लेकिन यदि आप अलग-अलग नियंत्रक हैं और उनमें से सभी के समान नाम हैं तो आप यह कैसे करेंगे? – eve

+0

@eve मुझे लगता है कि यह इस बात पर निर्भर करता है कि आपके पास कितने पेज हैं। मेरे पास केवल कुछ हैं। लेकिन अगर आपके पास अलग-अलग नियंत्रक और क्रियाएं हैं, तो आप शायद इसे बहु-आयामी सरणी बना सकते हैं। मैं दिखाने के लिए अपना जवाब अपडेट करूंगा। – TemiGiwa

+0

संपादन के लिए बहुत बहुत धन्यवाद !! – eve