我有一个标头,它通过<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>
答案 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>