【问题标题】:Kohana 3: How to find the active item in a dynamic menuKohana 3:如何在动态菜单中找到活动项目
【发布时间】:2011-01-26 13:32:08
【问题描述】:

也许不是最好的解释,但请听我说完。假设我在一个名为 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 应该是 active-item 因为它是默认控制器
  • domain.com/home -- Home 应该是 active-item
  • domain.com/home/index -- Home 应该是 active-item 因为 index 是默认操作
  • domain.com/resources -- Resources 应该是 active-item
  • domain.com/resources/get/7 -- Resources 应该是 active-subitem 因为 get 不是默认操作李>

【问题讨论】:

    标签: php menu kohana-3


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-10
      • 2021-09-23
      • 2014-12-08
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多