customer.xmlファイルのページにメニューに記載されているメニューを追加するにはどうすればよいですか
-
16-10-2019 - |
質問
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
, 、しかし、この場合は問題ではありません。