2011-09-21 87 views
1

我有一个XML文件作为一个元素的导航系统。面包屑的工作原理与我的文章页面一样,我显示文章列表以及他们的标题(作为链接)和传情段落。我显示完整文章的页面不显示任何面包屑导航。Zend导航面包屑

我知道我做错了什么,但因为我是新来的zend我无法弄清楚在哪里。

如果有人能指引我走向正确的方向,我将不胜感激。

的XML导航:

<?xml version="1.0" encoding="UTF-8"?> 
    <configdata> 
    <nav> 
    <home> 
     <label>Home</label> 
     <controller>index</controller> 
     <action>index</action> 
     <pages> 

      <about> 
       <label>About</label> 
       <controller>index</controller> 
       <action>about</action> 

      </about> 
     <board> 
      <label>Executive Committee</label> 
      <controller>index</controller> 
      <action>committee</action> 
     </board> 
     <events> 
       <label>Events</label> 
       <controller>index</controller> 
       <action>events</action> 
     </events> 


     <member> 
       <label>CNFS Members</label> 
       <controller>index</controller> 
       <action>member</action> 

      </member> 
      <news> 
       <label>Blog</label> 
       <controller>blog</controller> 
       <action>index</action> 

      </news> 
      <contact> 
       <label>Contact</label> 
       <controller>index</controller> 
       <action>contact</action> 
     </contact> 
     </pages> 
    </home> 
</nav> 
</configdata> 

这是导航的引导文件的功能。

<?php 
    protected function _initViewNavigation(){ 
    $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); 
    $view->navigation($navigation); 
    } 
    ?> 

这就是我在视图中显示面包屑:

<?php echo 'Your are here: ' . $this->navigation()->breadcrumbs() ->setMinDepth(0)->setLinkLast(false)->setSeparator(" /");?> 
+0

你可以加入你的XML导航定义的代码,以及您使用的ZF版本? –

+0

嗨弗雷德里克。我已经添加了xml文件供您参考。谢谢你的帮助!! – user949852

+1

什么是包含整篇文章的页面的网址?还有其标题文章列表的网址?也许你不包括在导航 – dimirc

回答

1

从你的XML,我猜你的文章列表是在/博客,并在/博客/文章的单篇文章/ 'articleId'或类似的东西。

导航地图中的“新闻”部分定义了一个动作“索引”,但是显示的是使用其他动作的文章,这就是为什么该节点不再匹配。

我想你希望当前文章的标题显示在你的面包屑末尾,并且要做到这一点,你必须在“新闻”节点的子节点附加一个自定义页面,并将其设置为“活动”:

public function articleAction(){ 
    //get your article 
    $article = .... 


    $page = new Zend_Navigation_Page_Mvc(array( 
      'label'   => $article->getTitle(), 
      'controller' => 'blog', 
      'action'  => 'article', 
      'params'  => array(
       'id' => $article->getId() // replace with the param name + value that you actually use in your url 
       ) 
      ) 
     ); 
    $page->setActive(true); 

    $this->view->_helper->navigation()->getContainer()->findOneBy('controller','blog')->addPage($page); 

我的记忆写了这个代码,而无需测试,所以是否如预期般只是告诉我,这是行不通的,我会测试和更新这个答案

+1

谢谢你弗雷德里克。我现在可以在面包屑导航中看到文章标题,但文章标题也出现在主导航下面(作为子导航在博客下面)。 无论如何只是在面包屑中显示文章标题,但不在主导航栏中显示? 感谢您的帮助! – user949852

+0

你必须设置主菜单的maxDepth,在你的助手调用中附加' - > setMaxDepth($ depth)'。尝试深度为0或1 –

+0

非常感谢!解决问题! – user949852