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_Uriページタイプとしてaを使用し、その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>';
    }

}

注:パーシャルを使用すると、setLinkLast、setSeparatorなどのBreadcrumb View_Helperのデフォルト機能が失われますが、これらはそれほど問題にはなりません。

于 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 に答える