如何在Cakephp header.ctp

时间:2018-07-30 18:12:39

标签: php cakephp

我有一个标头,它通过<li><a>标签显示页面链接。

这是标题的一部分:

 <div class="collapse navbar-collapse" id="main-navbar">
              <ul class="navbar-nav mr-auto">
              <li class="nav-item">
                <a class="nav-link" href="/">
                  Home
                </a>
              </li>
              <li class="nav-item">
                <a class="nav-link" href="items">
                  Explore
                </a>
              </li>
             </ul>
 </div>

如何将属于活动链接的<li>的类设置为活动? 我在项目的其他地方有设置活动链接的代码,但是它是通过数组设置的,因此我不知道如何在此处应用它。

这是在另一个页面上运行的代码:

           <?php
              foreach ($categories as $category_side){
            $cat_class = '';
            if (isset($active_category) && ($active_category==$category_side['Category']['id'])){
              $cat_class = 'active';
            }
            ?>
          <li>
            <a href="/categories/view/<?php echo $category_side['Category']['id']; ?>" class="category-item <?php echo $cat_class; ?>">

              <?php echo $category_side['Category']['name_'.$txt_lang]; ?>
                                  </a>
          </li>
        <?php } ?>

我找到了这个how to add active class in current page in CakePhp,但是我不知道如何将其应用于上面的第一段代码。

如何使用PHP或CakePHP函数转换上面的第一段代码,以便将活动菜单的<li>类设置为“活动”。

解决方案

按照下面的Sehdev的回答(可接受的回答),我能够创建一个解决方案,用于将活动类分配给标题菜单中的活动超链接。

controller action 的组合还不够,因为有些页面链接到相同的控制器和动作,但实际上是不同的呈现视图。

解决方案是使用$ this-> here提取当前网址,如下所示:

(在CakePHP 2.9.1中测试)

<?php
$activeurl = $this->here;
?>

<ul class="navbar-nav mr-auto">
  <li class="nav-item <?php echo (!empty($activeurl) && ($activeurl == '/'))?'active' :'inactive' ?>">
       <a class="nav-link" href="/">
         Home
       </a>
  </li>
  <li class="nav-item <?php echo (!empty($activeurl) && ($activeurl == '/items'))?'active' :'inactive' ?>">
       <a class="nav-link" href="/items">
        Explore
       </a>
  </li>
</ul>

2 个答案:

答案 0 :(得分:1)

对于3.4.0以下的Cakephp版本

您可以使用$this->request->param。该对象包含所有请求的参数,例如当前控制器,操作等。

如果要使用当前的页面控制器和操作,可以使用以下代码。

$controller = $this->request->param['controller'];
$action = $this->request->param['action'];

因此,如果您的控制器是“用户”并且操作是项,则可以使用

<li class="nav-item <?php echo (!empty($this->request->param['action']) && ($this->param['action']=='item') )?'active' :'inactive' ?>">
                <a class="nav-link" href="items">
                  Explore
                </a>
              </li>

对于3.4.0以上的Cakephp版本,您可以使用

$controllerName = $this->request->getParam('controller');

对于Cakephp 2.x版

$controller = $this->request->params['controller'];

答案 1 :(得分:0)

该请求公开了路由参数

如果您使用的是 3.5.0以上的Cakephp版本

$action = $this->request->getParam('action'); // Use to get action name

$controller =$this->request->getParam('controller'); //  Use to get controller name

<?php $active_class = ( in_array($action, ['dashboard']) && 
  $controller=='Users')?"class='active'":''; ?>

<li class="nav-item <?php echo $active_class; ?>">
    <a class="nav-link" href="items">
       Explore
    </a>
</li>

如果您正在使用3.4.0以下的 Cakephp版本

$controllerName = $this->request->params['controller'] or $this->request->param('controller');
$actionName = $this->request->params['action'] or $this->request->param('action');

<?php $active_class = ( in_array($actionName, array('dashboard')) && $controllerName=='users')?"class='active'":''; ?>

<li class="nav-item <?php echo $active_class; ?>">
    <a class="nav-link" href="items">
      Explore
    </a>
</li>