2013-06-18 41 views
6

tôi có một vấn đề tương tự như câu hỏi nàycách thêm lớp tích cực trong trang hiện trong CakePHP

How to identify active menu link in CakePHP

tôi có một trang trong tập tin default.ctp của tôi trong đó tôi muốn thêm 'hoạt động' lớp trên các liên kết. làm thế nào tôi có thể xác định địa chỉ hiện tại của trang và sau đó áp dụng các lớp học vào liên kết .. i đã theo câu trả lời cũng có đó là

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

tôi không biết làm thế nào tôi có thể làm điều này trong mã của tôi .. xin lỗi vì hỏi như i am newbie trong cakephp .. đây là mã của tôi

**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> 

tôi muốn thêm một lớp học với li như thế này

<li class = 'active''> 
+0

thể trùng lặp của [Làm thế nào để xác định liên kết menu tích cực trong CakePHP] (http://stackoverflow.com/questions/11717422/how-to-identify-active-menu-link-in-cakephp) – bfncs

Trả lời

12

đây là một logic đơn giản như sau

<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 bạn nó hoạt động thực sự ... thankuu budyy .god chúc lành cho bạn – hellosheikh

+0

COOL .. chào mừng – AnNaMaLaI

7

Nếu bạn có một bộ điều khiển khác nhau và bạn đã tuyên bố một phương pháp với cùng một tên, và các mã trên không hoạt động, sau đó bạn có thể làm như sau:

<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> 

Đây xem phương pháp là được khai báo trong bộ điều khiển khác nhau. tôi hy vọng nó sẽ hữu ích cho bạn.

1

Không để hồi sinh một bài chết, nhưng đây là những gì tôi làm (mà tôi tin là một chút bụi và nhanh hơn và một chút dễ quản lý hơn)

tôi tạo ra một yếu tố mà có một loạt các trang, sau đó tôi kiểm tra từng mục trong mảng để xem đó có phải là trang hiện tại hay không. Nếu tôi thêm lớp đang hoạt động.

Sau đó tôi có thể gọi phần tử này từ bất kỳ đâu.

// 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

Tôi đang tìm kiếm một cách rõ ràng hơn để làm điều này giống như ví dụ của bạn. Nhưng làm thế nào bạn sẽ làm điều đó nếu bạn có bộ điều khiển khác nhau và tất cả trong số họ có hành động với cùng một tên? – eve

+0

@eve Tôi đoán nó phụ thuộc vào số trang bạn có. Tôi chỉ có một vài. Nhưng nếu bạn có các bộ điều khiển và hành động khác nhau, bạn có thể biến nó thành mảng đa chiều. Tôi sẽ cập nhật câu trả lời của mình để hiển thị. – TemiGiwa

+0

Cảm ơn rất nhiều vì đã chỉnh sửa !! – eve