customer.xmlファイルのページにメニューに記載されているメニューを追加するにはどうすればよいですか

magento.stackexchange https://magento.stackexchange.com/questions/7841

質問

header.phtmlファイルのMagentoテンプレートにメニューを表示することに取り組んでいます。

私のlocal.xmlファイルには、次のコードがあります。

<!-- ################### LOGGED IN ################### -->

      <customer_logged_in>

         <!-- Account Menu -->
        <reference name="my_account_menu">
            <!-- <remove name="mini_login" /> -->
            <block type="core/template" name="my_account_menu_block" template="page/html/menu/account_logged_in.phtml" />
        </reference>

      </customer_logged_in>

      <!-- ################### LOGGED OUT ################### -->

      <customer_logged_out>

        <!-- Account Menu -->
        <reference name="my_account_menu">
          <!-- <block type="customer/form_login" name="mini_login" template="page/html/menu/mini.login.phtml" /> -->
          <block type="customer/form_login" name="my_account_menu_block" template="page/html/menu/account_logged_out.phtml" />
        </reference>

      </customer_logged_out>

私がやりたいのは、これをヘッダーテンプレートに追加し、ログイン/ログアウト状態ごとに切り替えることです。

現在、私はこれをヘッダーでやっています:

<? if (Mage::getSingleton('customer/session')->isLoggedIn() || (Mage::app()->getRequest()->getRequestString() == "/customer/cart")) { ?>
    <?= $this->getChildHtml('loggedin_menu') ?>
    <h3>logged in</h3>
<? } else { ?>
    <?= $this->getChildHtml('my_account_menu_block') ?>
    <h3>logged out</h3>
<? } ?>

これは、ログインしたメニューで機能しますが、ログアウトメニューでは機能しません。

誰かがこれに対するよりクリーンなアプローチのアイデアを持っていますか?

乾杯、マーク

役に立ちましたか?

解決

相互に排他的なレイアウトアップデートハンドルを介して1つのブロックを表示する場合は、テンプレートに条件付きは必要ありません。むしろ、特定のエイリアス/名前を介して無条件に子供を使用し、レイアウトハンドルを使用して、どのブロックタイプとテンプレートが使用されるかを条件付けて決定します。

テンプレートの例(からの切り取り page/html/header.phtml):

<?php echo $this->getChildHtml('customerStateContent') ?>

レイアウトXML例:

<customer_logged_in>
    <!-- Account Menu -->
    <block type="core/template"
           name="customerStateContent"
           parent="header"
           template="page/html/menu/account_logged_in.phtml" />
</customer_logged_in>

<customer_logged_in>
    <!-- Account Login Form -->
    <block type="customer/form_login"
           name="customerStateContent"
           parent="header"
           template="page/html/menu/account_logged_out.phtml" />
</customer_logged_in>

それが簡単な例です。繰り返しますが、顧客モジュールは1つのハンドルを追加するため、それを利用する必要があります。

これらのそれぞれに共通のラッパーテンプレートが必要な場合(my_account_menu あなたのスニペットでこれを示します)それから、あなたは単に次のことをすることができます:

テンプレートの例(からの切り取り page/html/header.phtml):

<?php echo $this->getChildHtml('customerStateContent') ?>

テンプレートの例(からの切り取り customerStateContent レンプレート):

<div class="whatever-markup-to-justify-using-a-template">
    <?php echo $this->getChildHtml('stateSpecificContent') ?>
    <!-- could also just use $this->getChildHtml() if no other children are assigned -->
</div>

レイアウトXML例:

<default>
    <block type="core/template" name="customerStateContent" parent="header" template="[...]"  />
</default>

<customer_logged_in>
    <!-- Account Menu -->
    <block type="core/template"
           name="stateSpecificContent"
           parent="customerStateContent
           template="page/html/menu/account_logged_in.phtml" />
</customer_logged_in>

<customer_logged_in>
    <!-- Account Login Form -->
    <block type="customer/form_login"
           name="customerStateContent"
           parent="customerStateContent"
           template="page/html/menu/account_logged_out.phtml" />
</customer_logged_in>

後者の例では、状態固有のコンテンツの汎用ブロックがすべてのビューに追加されます。 <default /> 処理すると、あなたは条件付きで1人の子供または別の子供を追加しています。 2つの異なるブロックを同じに与えることは、慣習に少し反対していることに注意してください name, 、しかし、この場合は問題ではありません。

ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top