我确信我的问题很简单,而且我一直在寻找答案,但我似乎无法使其发挥作用。我想做这样的事情:
<?xml version="1.0" encoding="UTF-8"?>
<configdata>
<dashboard>
<label>Dashboard</label>
<controller>dashboard</controller>
<action>index</action>
<module>global</module>
</dashboard>
<bills>
<label>Bills</label>
<pages>
<create-bill>
<label>Create New Bill</label>
<controller>bill</controller>
<action>create</action>
<module>global</module>
</create-bill>
</pages>
</bills>
</configdata>
请注意,在<bills>
部分,我想要一个只有标签的类别,这样当我稍后添加样式时,我可以将鼠标悬停在“Bills”和“Create New Bill”等链接上将显示,但点击“Bills”不应该做任何事情,因为它只是一个类别标题。
我希望这是有道理的。
答案 0 :(得分:3)
您必须为您的网页指定类型,否则Zend_Navigation
将引发异常。在像您这样的情况下,我总是使用Zend_Navigation_Page_Uri
作为页面类型,并将其uri指定为#
。要将其应用于配置文件,您可以执行此操作
<bills>
<label>Bills</label>
<uri>#</uri>
<pages>
<create-bill>
<label>Create New Bill</label>
<controller>bill</controller>
<action>create</action>
<module>global</module>
</create-bill>
</pages>
</bills>
生成的标记仍包含链接,但不会指向任何位置。
此外,由于您需要将一些javascript绑定到它以显示菜单,您甚至可以通过在该链接的点击处理程序中返回false
来禁用它。
为了将javascript回调(或某些css)附加到这种链接,您可能会发现将类附加到这些链接很有用。在同一配置文件中,您可以使用此代码
<bills>
<label>Bills</label>
<uri>#</uri>
<class>fakelink</class>
<pages>
<create-bill>
<label>Create New Bill</label>
<controller>bill</controller>
<action>create</action>
<module>global</module>
</create-bill>
</pages>
</bills>
在这种情况下,生成的标记将是
<li class="fakelink>
<a href="#">Bills</a>
<ul>submenu here</ul>
</li>
你可以轻松地用javascript库选择那种链接。例如,使用jQuery,你可以这样做:
$(function() { $('.fakelinks > a').click(function () { return false; }); });
答案 1 :(得分:3)
实际上还有另一种解决方法。
只需在xml / array /...中定义额外的配置选项,就可以在所有Zend_Navigation_Page上设置自定义属性。
然后通过使用专用的部分来渲染菜单/面包屑,您可以完全跳过呈现<a>
标记或基于这些属性呈现完全不同的标记。
<!-- ... -->
<page1>
<label>Page 1</label>
<uri>page1</uri>
<link>false</link> <!-- Custom property -->
<pages>
<page1_1>
<label>Page 1.1</label>
<uri>page1/page1_1</uri>
</page1_1>
<page1_2>
<label>Page 1.2</label>
<uri>page1/page1_2</uri>
</page1_2>
<page1_3>
<label>Page 1.3</label>
<uri>page1/page1_3</uri>
</page1_3>
</pages>
</page1>
<!-- ... -->
注意:我在这里使用了breadcrumbs示例,但大多数Navigation View_Helpers都有一个setPartial()方法,包括菜单助手。
然后在您的视图脚本或布局中,您只需指定您的面包屑帮助程序需要使用部分。
<?php
echo $this->navigation()->breadcrumbs()->setPartial('my_breadcrumbs.phtml');
在您的部分内容中,您将遍历年度痕迹路径中的页面,并检查每个页面的自定义属性。
<?php
foreach($this->pages as $page)
{
$properties = $page->getCustomProperties();
// Check if we need to render the link tag
if($properties['link'] !== false){
echo '<a href="' . $page->getHref() . '">';
}
// Render the label
echo $page->getLabel();
// And check if we need to render the closing tag
if($properties['link'] !== false){
echo '</a>';
}
}
注意:通过使用partial,你将丢失Breadcrumb View_Helper的一些默认功能,如setLinkLast,setSeparator,......但这些不应该造成太多问题。
答案 2 :(得分:2)
如果您对类别标签的跨度感到满意,那么只需指定一个空URI即可完成工作。 Zend_View_Helper_Navigation_Menu :: htmlify()呈现Zend_Navigation_Page:
/**
* Returns an HTML string containing an 'a' element for the given page if
* the page's href is not empty, and a 'span' element if it is empty
*
* Overrides {@link Zend_View_Helper_Navigation_Abstract::htmlify()}.
*
* @param Zend_Navigation_Page $page page to generate HTML for
* @return string HTML string for the given page
*/
public function htmlify(Zend_Navigation_Page $page)
示例输出:
<ul class="navigation">
<li>
<span id="menu-staff">Staff</span>
<ul>
<li>
<a href="/staff/holiday/book-holiday" id="menu-staff-holiday-book">Book Holiday</a>
</li>
<li>
<a href="/staff/holiday/view-holidays" id="menu-staff-holiday-view-booked">View Booked and Remaining Holiday</a>
</li>
</ul>
</li>
</ul>
答案 3 :(得分:0)
我以不同的方式解决了这个问题:
nav:
User:
label: Account Services
uri: @fakeUri
然后在我的模板代码中:
<?php foreach ($navSettings as $navSetting): ?>
<?php if ('@fakeUri' === $navSetting->getUri()): ?>
<?php echo $navSetting->getLabel() ?>
<?php else: ?>
<a href="<?php echo $navSetting->getUri() ?>"><?php echo $navSetting->getLabel()) ?>
<?php endif ?>
<?php endforeach ?>
答案 4 :(得分:0)
<page_bills>
<label>Bills</label>
<type>uri</type>
<pages>
</pages>
</page_bills>