6

この質問に似た問題があります

CakePHP でアクティブなメニュー リンクを識別する方法

私のdefault.ctpファイルには、リンクに「アクティブな」クラスを追加したいページがあります。ページの現在のURLを特定してから、リンクにクラスを適用するにはどうすればよいですか..そこにも答えがあります

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

私のコードでこれを行う方法がわかりません.. Cakephpの初心者なので、質問して申し訳ありません.. これが私のコードです

 **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でクラスを追加したい

   <li class = 'active''>
4

3 に答える 3

12

これは次のような単純なロジックです

<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>
于 2013-06-18T07:07:13.613 に答える
8

別のコントローラーがあり、同じ名前のメソッドを宣言していて、上記のコードが機能しない場合は、次のことができます。

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

ここでビューメソッドは別のコントローラーで宣言されています。お役に立てば幸いです。

于 2014-05-16T05:47:39.310 に答える
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>"; 
    }
}
于 2015-12-14T11:27:06.457 に答える