标签: zend-navigation

如何从Zend Navigation XML向<li>添加类名

有人可以帮帮我,我完全卡住了!我不知道如何<li>在Zend导航XML中为标记添加类名

这是我的XML

<configdata>
    <nav>
        <home>
            <label>Home </label>
            <uri>/</uri> 
        </home>

        <request>
            <label>Quotes </label>
            <uri>/quote</uri>
        </request>

        <work>
            <label>How It Works</label>
            <uri>/how-it-works</uri>
        </work>

        <information>
            <label>Informations </label>
            <uri>/informations</uri>
        </information>

        <directory>
            <class> last </class>
            <label>Directory </label>
            <uri>/directory</uri>  
        </directory>
    </nav>
</configdata>
Run Code Online (Sandbox Code Playgroud)

当我添加<class>last</class>这是我得到的:

<li>
    <a class="last" href="/directory">Directory </a>
</li>
Run Code Online (Sandbox Code Playgroud)

目前我正在接受,<a class="last">但我需要<li class="last">

非常感谢提前!干杯

zend-framework zend-navigation

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

Zend Framework 2从模块添加导航项

我正在尝试从模块中添加模块特定的导航项.我可能这样做完全错了.到目前为止我所拥有的是:

config/autoload/navigation.global.php(这个到目前为止工作)

<?php
return array(
  'navigation' => array(
    'default' => array(
      array(
        'label' => 'Home',
        'route' => 'home',
        'order' => -100,
        'pages' => array(
        ),
      ),
    ),
  ),
);
Run Code Online (Sandbox Code Playgroud)

module/Books/Module.php :(我想 Home 添加'Books'导航项(不是内联的))

class Module
{
  public function onPreDispatch($e) {
    $pages = array(
      array(
        'label' => 'Books',
        'route' => 'books',
      ),
    );
    $navigation = $e->getParam('application')->getServiceManager()->get('navigation');
    $navigation->findOneByRoute('home')->addPages($pages);
  }
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

所以在上面的例子中(路由是正确的),我没有收到错误,事件在预调度上触发,但没有任何东西被添加到导航容器中.

我想要完成的是导航如下:

  Home
    |-> Books
    |-> Module2
    |-> etc..
Run Code Online (Sandbox Code Playgroud)

php zend-navigation zend-framework2

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

Zend Navigation - 如果孩子处于活动状态,则将父级标记为活动

我目前正在使用Zend Framework 1.12.3创建我的新网站,我看到了一些我讨厌Zend Navigation的东西:

当子路由处于活动状态时(例如:博客单个帖子,路由blog-post),它不会将父页面(blog在这种情况下为路由)标记为活动.

这是我的代码:(navigation.xml)

<blog>
    <label>BLOG</label>
    <route>blog</route>
    <title>BLOG_TITLE</title>
    <pages>
        <blog-post>
            <route>blog-post</route>
            <visible>false</visible>
        </blog-article>
        <blog-category>
            <route>blog-category</route>
            <visible>false</visible>
        </blog-category>
    </pages>
</blog>
Run Code Online (Sandbox Code Playgroud)

在明确的情况下,blog如果子路由blog-post是活动的,我会将页面标记为活动.不使用子页面(我不想要),它不会这样做.所以,如果有标记活跃的路线名称的方式blog,谁下手的所有路由blog(为例:blog-post,blog-category,blog-author),这将是非常有用的!

我不想使用子页面,因为我的菜单部分呈现空下拉列表(Twitter Bootstrap).自己看:

Zend中的空下拉列表

php zend-framework zend-navigation twitter-bootstrap

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

在没有顶层的情况下渲染Zend导航的活动分支

我在一个地方呈现Zend Navigation对象的顶级元素,如下所示:

echo $this->navigation()->menu()->setMaxDepth(0);
Run Code Online (Sandbox Code Playgroud)

如何从活动分支的第二级渲染导航树?我已经尝试创建一个循环$this->container对象的部分,但我不知道如何确定我当前的项目是否是活动分支.一旦我确定它是活动分支,我该如何渲染菜单?我是这么做的,并且遗漏了一些明显的东西?

谢谢!


更新:

我接受了一个解决方案,因为这是我使用的,但我也想提供我的实际问题的答案,以供参考.($this是视图对象)

// Find the active branch, at a depth of one
$branch = $this->navigation()->findActive($this->nav, 1, 1);
if (0 == count($branch)) {
    // no active branch, find the default branch
    $pages = $this->nav->findById('default-branch')->getPages();
} else {
    $pages = $branch['page']->getPages();
}
$this->subNav = new Zend_Navigation($pages);
Run Code Online (Sandbox Code Playgroud)

$this->subNav 然后可以用于渲染子菜单.

php zend-framework zend-navigation

2
推荐指数
1
解决办法
5973
查看次数

Zend_Navigation:仅获取当前用户/角色可访问的页面

我有一个Zend_Navigation运行与navigation.xml文件提供的数据.我们假设第一级(0)由两个页面组成,前端和后端.guest用户可以通过admin角色访问前端,Backend只能访问前端.

如果我做了

<?php echo $this->navigation()->menu()->setMaxDepth(0); ?>
Run Code Online (Sandbox Code Playgroud)

它在未登录时正确显示"前端"链接,以管理员身份登录时显示"前端"和"后端"链接.

但是,显示"前端"链接对于访客来说没有多大意义,因为他们无论如何都没有任何其他页面可以导航到该级别.所以我宁愿不为客人显示导航.

我知道我能做到

<?php
if ('guest' !== $this->view->role) {
    echo $this->navigation()->menu();
}
?>
Run Code Online (Sandbox Code Playgroud)

但我希望有更好的方法来做到这一点.

我正在寻找的是类似的东西

<?php
if (count($this->navigation()->getPagesForRole($this->view->role)) > 1) {
    echo $this->navigation()->menu();
}
?>
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚如何使用Zend_Navigation提供的API实现这一点...我看到有一个getPages()方法,但它返回所有页面"未过滤".

我认为这有一个简单的解决方案,但我一直试图在过去的两个小时内解决这个问题并且什么都没找到,所以我猜我的方向错了.

谢谢你的时间.

编辑:

我忘了提到导航已经使用ACL来控制权限,它工作正常.我唯一的问题是我不想为客人显示前端/后端导航,因为只导航一个链接项是没用的.对此感到抱歉.

php acl zend-framework zend-navigation

2
推荐指数
1
解决办法
1926
查看次数

ZF2 - 在调用控制器之前将页面注入导航

我正在创建一个动态应用程序,其中内容通过CMS添加.在CMS内部,我正在设置一个db条目,该条目说明了每个内容页面使用的模块.

NodeId,ParentNodeId,Name_de,Name_en,ModuleName,foreignkey_ContentLinks,

在此表条目中如下所示:6,1,Veranstaltung-21-02-2013,Event-21-02-2013,Events,682

整个树应该在我的导航中结束(完全也在我的路由中).我不想在某个控制器中添加它,因为我的应用程序由一大堆模块组成,我想在所有模块中访问该信息.

我已经尝试在global.php中注入它,但无济于事,因为我不能在我的数据库适配器或该阶段的任何其他重要类.

有关最佳实践的想法或链接吗?

zend-navigation zend-route zend-config zend-framework2

2
推荐指数
1
解决办法
1244
查看次数

Zend Navigation,ACL和Partials

我有使用Acl和角色的Zend Navigation对象:

echo $this->navigation()->menu('navigation')
->setAcl($this->acl)
->setRole(($this->user ? 'user' : 'guest'))
->render();
Run Code Online (Sandbox Code Playgroud)

和它的工作完美(隐藏一些页面)

当我使用自定义部分:

echo $this->navigation()->menu('navigation')
->setAcl($this->acl)
->setRole(($this->user ? 'user' : 'guest'))
->setPartial('partial/twitterBootstrapNavHeadUl.phtml')
->render();
Run Code Online (Sandbox Code Playgroud)

这部分内容

foreach ($this->container as $page)
    echo $this->navigation()->menu()->htmlify($page);
Run Code Online (Sandbox Code Playgroud)

它传递给所有页面的部分$ this->容器(通过acl设置为不可用)

也许我应该将acl等传递给partial

foreach ($this->container as $page)
    echo $this->navigation()->menu()->setAcl($this->acl)->setRole(($this->user ? 'user' : 'guest'))->htmlify($page); // ?????????????????????
Run Code Online (Sandbox Code Playgroud)

但是如何实现呢?

有什么我应该做/知道的吗?

zend-navigation zend-framework2

2
推荐指数
1
解决办法
1869
查看次数

使用Zend_Navigation时,如何将class ="current"应用于<a href=...>标记?


正如您可以从标题中读取的那样,我正在尝试将class="current"部分添加到我的zend_navigation呈现的HTML锚标记中.

这就是我所拥有的:

bootstrap.php中

protected function _initNavigation(){
         $this->bootstrap('layout');
         $layout = $this->getResource('layout');
         $view = $layout->getView();
         $config = new Zend_Config_Xml(APPLICATION_PATH .'/configs/navigation.xml','nav');
         $navigation = new Zend_Navigation($config);
         $navigation->current()
         $view->navigation($navigation);
     } 
Run Code Online (Sandbox Code Playgroud)

然后在View脚本中:

<div class="NavMenu">
  <?= $this->navigation()->menu(); ?>
</div>
Run Code Online (Sandbox Code Playgroud)

我很确定有一些标准和正确的方法,但经过大约几个小时的搜索后,我无法找到答案.非常感谢你的帮助.

php zend-framework zend-navigation

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