我需要改变输出Zend_View_Helper_Navigation_Menu
.我发现了我需要修改的两个函数,我知道如何进行我需要的更改.我不知道的是如何使Navigation对象使用我的视图助手而不是Zend.
代表我的类扩展的代码段:
// file /library/My/View/Helper/Navigation/Menu.php
class My_View_Helper_Navigation_Menu extends Zend_View_Helper_Navigation_Menu
{
protected function _renderDeepestMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth)
{
// modified code here
}
protected function _renderMenu(Zend_Navigation_Container $container,
$ulClass,
$indent,
$minDepth,
$maxDepth,
$onlyActive)
{
// modified code here
}
}
Run Code Online (Sandbox Code Playgroud)
编辑澄清
我想更改<li>
元素的类并删除EOL
和缩进.使用菜单视图脚本没有选项可以做到这一点,这就是为什么我必须扩展它.
在我的Bootstrap中初始化导航对象:
$navTable = new Default_Model_Site_DbTable_Navigation();
$view = $this->getResource('view');
$view->navigation(new Zend_Navigation($navTable->getNavigation()));
Run Code Online (Sandbox Code Playgroud)
在我的布局中渲染菜单:
echo $this->navigation()->menu();
Run Code Online (Sandbox Code Playgroud)
解
我通过如下重命名来完成它的工作,但我不清楚为什么我不能重载/覆盖_Menu
类和menu()
函数.
My_View_Helper_Navigation_MyMenu
myMenu
函数添加到类(return parent::menu($container);
)echo $this->navigation()->myMenu();
在布局中调用类线框:
// …
Run Code Online (Sandbox Code Playgroud) 我在Zend_Navigation,Zend_Translate和所需路由的组合方面遇到了一些困难.
我的站点导航是通过基于XML文件的Zend_Navigation完成的.我现在已经基于Zend_Translate添加了对站点的翻译,并添加到以下更改路由到引导程序:
protected function _initRoutes()
$config = new Zend_Config($this->getOptions());
$languages = array_keys($config->languages->toArray());
$zl = new Zend_Locale();
$lang = in_array($zl->getLanguage(), $languages)
? $zl->getLanguage() : 'en';
$zfc = Zend_Controller_Front::getInstance();
// add language to default route
$route = new Zend_Controller_Router_Route(
':lang/:module/:controller/:action/*',
array('controller'=>'index',
'action' => 'index',
'module'=>'default',
'lang'=>$lang));
$router = $zfc->getRouter();
$router->addRoute('default', $route);
$zfc->setRouter($router);
Run Code Online (Sandbox Code Playgroud)
然后我用preDispatc方法创建了一个View_Helper:
$language = $request->getParam('lang','');
if ($language !== 'en' && $language !== 'da')
$request->setParam('lang','en');
$language = $request->getParam('lang');
if ($language == 'en')
$locale = 'en_EN';
else
$locale = 'da_DK';
$zl = new …
Run Code Online (Sandbox Code Playgroud) php zend-framework zend-translate zend-navigation zend-route
我正在使用导航XML文件和我的Zend Framework MVC应用程序.
顶层菜单呈现在我的布局顶部.生成它的代码如下所示:
$this->navigation()->menu()->renderMenu(null,array('maxDepth' => 0));
Run Code Online (Sandbox Code Playgroud)
这将自动呈现我已在顶部菜单中设置样式的无序链接列表.现在,我想渲染子菜单(渲染活动容器树)利用所有内置的Zend_Navigation优点(MVC和ACL集成),但使用自定义标记.我会这样插入:
$this->navigation()->menu()->renderSubMenu();
Run Code Online (Sandbox Code Playgroud)
事实上,我有一组非常具体的标记,我需要用它来渲染它.它是如此截然不同我不认为我可以设置无序列表来容纳我想要的演示文稿.
是否有一种简单的方法(或者如果需要可以复杂;)来自定义子菜单?
我正在使用Zend_Navigation
我想在面包屑中显示导航项目,但将其隐藏在我的菜单中,我该怎么做?
有一种方法isActive()
在Zend_Navigation
.但它对当前路径中的所有元素都返回true(父级li
是活动的,所有子级也是如此,即使当前是父级li
).
是否有任何方法isCurrent()
,以确定当前菜单项是否是当前页面?
我只想将自定义类属性添加到ul和li的整个嵌套树中的一个当前元素.
<configdata>
<home>
<label>Home</label>
<controller>dashboard</controller>
<action>index</action>
</home>
<accounts>
<label>Accounts</label>
<controller>accounts</controller>
<action>index</action>
<pages>
<sales>
<label>Sales Accounts</label>
<controller>sale</controller>
<action>index</action>
</sales>
<purchase>
<label>Purchase Accounts</label>
<controller>purchase</controller>
<action>index</action>
</purchase>
</pages>
</accounts>
</configdata>
Run Code Online (Sandbox Code Playgroud)
我有类似上面的代码.我需要为Accounts标签后生成的ul标签添加一个类.像下面这样的东西不起作用:
<pages class="sub">
<sales>
........
</sales>
</pages>
Run Code Online (Sandbox Code Playgroud)
我的目的是为导航提供一个大型菜单.要向其添加功能,我需要在生成的菜单代码中包含类.
我已经扩展了Zend_View_Helper_Navigation_Menu
,它使用a RecursiveIteratorIterator
迭代菜单树.我希望能够确定的是我是否在树中分支级别的第一个或最后一个项目上.
这是我正在寻找的一个例子:
附加信息
解
在foreach ($iterator as $page)
循环内,可以使用两个变量来跟踪深度,$depth
并且$prevDepth
.然后,简单的比较条件可以确定分支级别中的第一个项目:if ($depth > $prevDepth)
.
创建RecursiveCachingIterator
使用该Zend_Navigation_Container
对象,然后使用该对象创建RecursiveIteratorIterator
添加该hasNext()
方法.
$rci = new RecursiveCachingIterator($container, CachingIterator::FULL_CACHE);
$iterator = new RecursiveIteratorIterator($rci,
RecursiveIteratorIterator::SELF_FIRST);
/* snip */
$prevDepth = -1;
foreach ($iterator as $page) {
$depth = $iterator->getDepth();
/* snip */
if ($depth > $prevDepth) {
// first branch item …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我应该定义我的顶级和低级页面以供Zend Navigation使用吗?我的顶级导航栏视图助手将与生成子导航的视图助手分开.
我正在使用Zend Acl和Zend Navigation.我在引导程序中设置导航.如果用户无权访问资源,我试图让链接不显示.我已阅读了几个教程,多次浏览了zend参考手册,但导航中的所有链接仍然出现在访客用户中,即使有些只应显示给管理员用户
protected function _initNavigationMenu()
{
$this->bootstrap("layout");
$layout = $this->getResource('layout');
$view = $layout->getView();
$navigation_model = new Core_Model_Navigation();
$result = $navigation_model->getTopLevelNavigationLinksForDisplay();
$sanitized = $navigation_model->sanatizeNavigationForDisplay($result);
$config = new Zend_Config($sanitized);
$nav = new Zend_Navigation($config);
$view->navigation($nav)
->setAcl($this->_acl->acl())
->setRole((string)BW::user() -> role);
}
Run Code Online (Sandbox Code Playgroud)
所有ACL角色和资源以及导航都来自数据库,以防万一
这是由$ sanitized创建的数组
Array
(
[0] => Array
(
[parent_id] => 0
[label] => File Manager
[order] => 1
[resource] => 9
[active] => 1
[visible] => 1
[internal_page] => 1
[module] => file
[reset_params] => 1
[id] => fileManagerLink …
Run Code Online (Sandbox Code Playgroud) 我正在使用zend_navigation来创建菜单.哪个工作正常.现在我正在寻找我是否可以使用headTitle获取当前页面并将其设置为页面标题.有没有办法做到这一点?
要么
我如何使用配置文件(.ini)来创建Pagetitle和元数据?
zend-framework ×10
zend-navigation ×10
php ×7
javascript ×1
jquery ×1
recursion ×1
zend-acl ×1
zend-route ×1
zend-view ×1