Frage

Ich arbeite daran, ein Menü in einer Magento -Vorlage in der Header.phtml -Datei zu erhalten.

In meiner lokalen.xml -Datei habe ich den folgenden Code:

<!-- ################### 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>

Was ich tun möchte, ist dies in meine Header -Vorlage hinzuzufügen und für jeden protokollierten State auszuschieben.

Derzeit mache ich das im Header:

<? 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>
<? } ?>

Dies funktioniert für das protokollierte Menü, jedoch nicht für das protokollierte Menü.

Hat jemand eine Vorstellung von einem saubereren Ansatz dafür?

Prost, Mark

War es hilfreich?

Lösung

Wenn Sie den einen oder anderen Block über gegenseitig exklusive Layout -Update -Griffe anzeigen möchten, benötigen Sie keine Bedingung in Ihrer Vorlage. Vielmehr bedingungslos ein Kind über einen bestimmten Alias/Namen und verwenden Sie Layout -Griffe, um fest zu bestimmen, welche Blocktyp und Vorlage verwendet werden.

Vorlage Beispiel (Snip von von von page/html/header.phtml):

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

Layout XML Beispiel:

<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>

Das ist das einfache Beispiel. Auch hier fügt das Kundenmodul den einen oder anderen Griff hinzu, sodass Sie dies verwenden sollten.

Wenn Sie für jedes von diesen eine gemeinsame Wrapper -Vorlage benötigen (my_account_menu In Ihrem Snippet würde dies anzeigen) dann können Sie einfach Folgendes tun:

Vorlage Beispiel (Snip von von von page/html/header.phtml):

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

Vorlage Beispiel (Snip von von von customerStateContent Schablone):

<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>

Layout XML Beispiel:

<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>

Im letzteren Beispiel wird für alle Ansichten über die ein generischer Block für Ihren staatlichspezifischen Inhalt hinzugefügt <default /> Handle, und Sie fügen ihm bedingt ein oder ein anderes Kind hinzu. Beachten Sie, dass es leicht gegen die Konvention ist, zwei verschiedene Blöcke gleich zu geben name, aber es würde in diesem Fall keine Rolle spielen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top