尝试使用Phalcon使当前链接与助手一起激活

时间:2015-01-28 17:55:12

标签: php html phalcon

我正在使用Phalcon并试图让我的网页应用的每个网页的导航项显示为活动状态,具体取决于用户是否在该视图上。我正在使用ActiveHelper.php来调用静态函数。

ActiveHelper.php

public static function isActive($route){

    if ($route == $this->router->getRewriteUri()){
      echo "active";
    }

layout/public.volt

<a href="{{ url('home') }}" class="<?php ActiveHelper::isActive('/home/'); ?>">Home</a>
<a href="{{ url('basicinfo') }}" class="<?php ActiveHelper::isActive('/basicinfo/'); ?>">Basic Info</a>

这似乎不起作用,但是这样做:

 <a href="{{ url('home') }}" class="
<?php 
   $route = '/home/';
   if ($route == $this->router->getRewriteUri()){
      echo 'active';
    } 
?>">Home</a>

当回显$this->router->getRewriteUri();时,我会收到当前页面,例如'/ home /'或'/ basicinfo /'

2 个答案:

答案 0 :(得分:1)

public static function isActive($route){

    if ($route == $this->router->getRewriteUri()){
      return "active";
    }
    // ...
    return "";
布局视图中的

<a href="{{ url('home') }}" class="<?php echo $currentUri=='/home/'?'active':'' ?>">Home</a>

编辑:在您可以访问$ router的BaseController中,您可以设置一个将被注入到名为$ currentUri的布局中的变量,您可以检查这个,这样代码就不会一遍又一遍地调用变量将具有要检查的值。从布局中删除isActive函数调用,并将变量传递给视图。

答案 1 :(得分:0)

在您的index.php中:

$compiler->addFunction('navClassName', function ($resolvedArgs) {
    return "BaseController::getNavClassName(".$resolvedArgs.")";
});

在BaseController中:

public static function getNavClassName($uri) {
    $di = Di::getDefault();
    if ($di->get('router')->getRewriteUri() == $uri) {
        return 'nav-link active';
    }
    return 'nav-link';
}

例如检查您是否在索引/索引页面上...

伏特:

<li class="nav-item">
    {{ link_to('index/index', 'HOME', 'class': navClassName('/index/index')) }}
</li>