标签: zend-navigation

如何扩展Zend Navigation Menu View Helper?

我需要改变输出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()函数.

  1. 将班级名称更改为 My_View_Helper_Navigation_MyMenu
  2. myMenu函数添加到类(return parent::menu($container);)
  3. echo $this->navigation()->myMenu();在布局中调用

类线框:

// …
Run Code Online (Sandbox Code Playgroud)

php zend-framework zend-view zend-navigation

10
推荐指数
1
解决办法
8526
查看次数

Zend_Translate - Zend_Navigation和Routing组合问题!

我在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

9
推荐指数
1
解决办法
3530
查看次数

Zend_Navigation的自定义渲染

我正在使用导航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)

事实上,我有一组非常具体的标记,我需要用它来渲染它.它是如此截然不同我不认为我可以设置无序列表来容纳我想要的演示文稿.

是否有一种简单的方法(或者如果需要可以复杂;)来自定义子菜单?

php zend-framework zend-navigation

8
推荐指数
2
解决办法
9363
查看次数

Zend Framework:通过在面包屑中显示隐藏菜单中的导航项

我正在使用Zend_Navigation我想在面包屑中显示导航项目,但将其隐藏在我的菜单中,我该怎么做?

zend-framework zend-navigation

7
推荐指数
1
解决办法
3290
查看次数

Zend Navigation:当前页面

有一种方法isActive()Zend_Navigation.但它对当前路径中的所有元素都返回true(父级li是活动的,所有子级也是如此,即使当前是父级li).

是否有任何方法isCurrent(),以确定当前菜单项是否是当前页面?

我只想将自定义类属性添加到ul和li的整个嵌套树中的一个当前元素.

zend-framework zend-navigation

6
推荐指数
2
解决办法
6559
查看次数

用XML文件导航Zend

<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)

我的目的是为导航提供一个大型菜单.要向其添加功能,我需要在生成的菜单代码中包含类.

javascript jquery zend-framework zend-navigation

6
推荐指数
1
解决办法
415
查看次数

PHP RecursiveIteratorIterator:确定每个分支级别的第一个和最后一个项目

我已经扩展了Zend_View_Helper_Navigation_Menu,它使用a RecursiveIteratorIterator迭代菜单树.我希望能够确定的是我是否在树中分支级别的第一个或最后一个项目上.

这是我正在寻找的一个例子:

  • 导航1(第一)
    • 导航1.1(第一个和最后一个)
      • 导航1.1.1(第一)
      • 导航1.1.2
      • 导航1.1.3(最后一个)
  • 导航2
    • 导航2.1(第一)
    • 导航2.2(最后)
  • 导航3(最后)
    • 导航3.1(第一)
    • 导航3.2(最后)

附加信息

  • PHP版本5.2.13

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)

php recursion zend-framework zend-navigation

5
推荐指数
1
解决办法
1794
查看次数

我应该在哪里填充Zend_Navigation容器?

在我的应用程序中,我应该定义我的顶级和低级页面以供Zend Navigation使用吗?我的顶级导航栏视图助手将与生成子导航的视图助手分开.

php zend-framework zend-navigation

5
推荐指数
1
解决办法
539
查看次数

Zend导航和Zend ACL

我正在使用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)

php zend-framework zend-acl zend-navigation

5
推荐指数
1
解决办法
8112
查看次数

zend headtitle使用zend_navigation

我正在使用zend_navigation来创建菜单.哪个工作正常.现在我正在寻找我是否可以使用headTitle获取当前页面并将其设置为页面标题.有没有办法做到这一点?

要么

我如何使用配置文件(.ini)来创建Pagetitle和元数据?

php zend-framework zend-navigation

3
推荐指数
1
解决办法
2104
查看次数