1

也许不是最好的解释,但听我说完。假设我在一个名为menu.php的配置文件中有以下内容:

// Default controller is 'home' and default action is 'index'
return array(
   'items' => array(
      'Home' => '',
      'News' => 'news',
      'Resources' => 'resources',
   ),
);

我现在想把它打印成一个菜单,这很简单:

foreach(Kohana::config('menu.items') as $title => $uri)
{
    echo '<li>' . HTML::anchor($uri, $title) . '</li>';
}

但是,我想找到$uri与当前控制器和操作匹配的。并且该操作是否为默认操作。我想要结束的是id="active-item"如果它是链接到当前控制器的菜单项应该有,但默认操作。如果id="active-subitem它链接到当前控制器并且该操作不是默认操作。希望这是有道理的...

任何人都可以在这里帮助我吗?在 Kohana 3 中如何做到这一点以及在 Kohana 3 中应该如何做到这一点。我相信有很多方法,但是是的......欢迎任何帮助:)


例子:

  • domain.com -- Home应该是活动项,因为它是默认控制器
  • domain.com/home --主页应该是活动项目
  • domain.com/home/index -- Home应该是活动项,因为index是默认操作
  • domain.com/resources --资源应该是活动项目
  • domain.com/resources/get/7 --资源应该是活动子项,因为get不是默认操作
4

1 回答 1

1

你可以通过几种方式做到这一点

CSS

我经常使用这种方法。我将一个类附加到每个页面的正文元素以进行识别。

HTML

<style type="text/css">
body.home #home-link {
    border: 3px solid red;
}
</style>

<body class="home">
<ul>
    <li id="home-link">Home</li>
</ul>
</body>

优点是实施简单。缺点是您需要列出很多选择器,每个部分都有一个(在小型宣传册网站上不是这样的问题)。

通过控制器添加

您也可以通过控制器添加

控制器

public function action_about() {

    $this->template->active = 'about';

}

看法

foreach(Kohana::config('menu.items') as $title => $uri)
{
    echo '<li' . (($active === $uri) ? ' class="active"' : NULL) . '>' . HTML::anchor($uri, $title) . '</li>';
}

然后,当然,您只需使用active. 优点是您只需定义一次 CSS。

于 2010-03-12T05:57:12.073 回答