Zend_Navigation将类添加到活动链接
问题描述:
如何将类添加到活动导航链接?如果一个链接指向URI /索引/索引和请求的URI也/指数/指数,我想链接到有类,例如:Zend_Navigation将类添加到活动链接
<li class="active">
<a href="/index/index">Index</a>
</li>
这是我如何在引导初始化导航:
protected function _initNavigation()
{
$navigation = new Zend_Navigation($this->getOption('navigation'));
$this->view->navigation($navigation);
}
答
好吧,
我已经写控制器插件解决了这个:
<?php
class My_Controller_Plugin_PrepareNavigation extends Zend_Controller_Plugin_Abstract
{
public function routeShutdown(Zend_Controller_Request_Abstract $request)
{
$viewRenderer = Zend_Controller_Action_HelperBroker::getExistingHelper('ViewRenderer');
$viewRenderer->initView();
$view = $viewRenderer->view;
$container = new Zend_Navigation(Zend_Registry::get('configuration')->navigation);
foreach ($container->getPages() as $page) {
$uri = $page->getHref();
if ($uri === $request->getRequestUri()) {
$page->setClass('active');
}
}
$view->navigation($container);
}
}
答
这个我如何使用Application在zend框架中创建导航()在layout()中。那么,至少有一种方法可以做到这一点。该CSS类的
放设置该进的bootstrap.php文件:
protected function _initNavigation()
{
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
include APPLICATION_PATH . '/layouts/scripts/menu.phtml';
$view->navigation($container);
}
这允许您创建的文件menu.phtml菜单中的数组,所以你仍可以保持当前链接上的活动类。出于某种奇怪的原因,如果你使用它,你必须在数组中包含controller属性来获取当前链接上的CSS活动类。
把这样的事情到/layouts/scripts/menu.phtml文件:
$container = new Zend_Navigation(array(
array(
'label' => 'HOME',
'id' => 'tasks',
'uri'=>'/',
'controller' => 'Index'
),
array(
'label' => 'Contact',
'uri' => 'contact',
'controller' => 'Contact'
),
.... more code here ...
把这个到layout.phtml文件:
$options = array('ulClass' => 'menu');
的最佳解决办法是创建自己的部分呈现菜单并在那里处理条件。上述方法需要遍历所有元素两次(一次在控制器中,另一次在渲染过程中)。 – takeshin 2010-09-06 09:34:19