3

我确信我的问题很简单,我一直在寻找答案,但我似乎无法让它发挥作用。我想做这样的事情:

<?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" 不应该做任何事情,因为它只是一个类别标题。

我希望这是有道理的。

菜单样机。 比尔不是链接。

4

5 回答 5

3

必须为页面指定类型,否则Zend_Navigation将引发异常。在像你这样的情况下,我总是使用Zend_Navigation_Page_Urias 页面类型并将其 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; }); });
于 2011-08-05T23:28:10.527 回答
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>
<!-- ... -->

注意:我在这里使用面包屑示例,但大多数 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>';
    }

}

注意:通过使用部分,您将失去面包屑 View_Helper 的一些默认功能,如 setLinkLast、setSeparator ......但这些不应该造成太大的问题。

于 2012-02-24T14:41:10.613 回答
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>
于 2012-03-30T10:04:11.283 回答
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 ?>
于 2012-12-15T00:43:33.547 回答
0
<page_bills>
   <label>Bills</label>
   <type>uri</type>
   <pages>

   </pages>
</page_bills>
于 2018-03-22T12:08:49.373 回答