Verschieben Sie den Breadcrumb Block ausschließlich über local.xml

7

Ich möchte den Breadcrumb-Block nur mit bewegen local.xml.

Es muss von seinem Standardspeicherort in den Inhaltsblock verschoben werden, damit ich es ausgeben kann.

Normalerweise würde ich beim Verschieben von Blöcken unsetChildund dann insertjedoch den Breadcrumb-Block zweimal erscheinen lassen und ihn auch nicht wirklich irgendwo hin verschieben.

<reference name="root">
    <action method="unsetChild"><name>breadcrumbs</name></action>
    <reference name="content">
        <action method="insert"><child>breadcrumbs</child></action>
    </reference>
</reference>
Marty Wallace
quelle

Antworten:

8

Dies ist eine gute Übung - eine gute Chance zu lernen. Da es sich bei einer Layout-XML-Verschiebung in Magento 1 tatsächlich um eine zusammengesetzte Operation handelt (unser vom ursprünglichen übergeordneten Element, zum neuen übergeordneten Element hinzufügen), müssen beim Debuggen beide Bedingungen getestet werden.

Das insertfunktioniert offensichtlich, da Sie sehen, wie die Semmelbrösel zweimal blockieren. Das bedeutet, dass der unsetChildAnruf nicht funktioniert. Dies ist fast immer das Ergebnis von zwei Dingen: falscher untergeordneter Alias ​​oder falscher übergeordneter Verweis. In Ihrem Fall ist es das letztere. Dies ist das Ergebnis eines benutzerdefinierten Themas (ohne CE). Beispielsweise deklariert das Enterprise / Standard- Design den Breadcrumbs- Block in einem core/text_listBlock mit dem Namenreadcrumbs.container .

Außerdem sollten Referenz-Tags nicht verschachtelt sein. Sie wird funktionieren , wenn verschachtelt, aber wenn man bedenkt , dass sie gegen die globale Blockliste mit Namen arbeiten, es ist nicht notwendig.

Benmarks
quelle
1
Ich bin mir nicht sicher, ob es so einfach ist. Ich benutze Magento CE und habe ein Thema erstellt. Dieses Thema erbt nur vom CE-Basisthema. Ich habe den Basislayoutordner für Breadcrumbs durchsucht und die einzige Instanz ist, in der er in page.xml als name = "Breadcrumbs" als = "Breadcrumbs" deklariert ist. Deshalb verweise ich auf den richtigen Block. Außerdem funktioniert das Nicht-Set, denn wenn ich den Einsatz weglasse, verschwinden die Semmelbrösel. Wenn Sie den Einsatz verwenden, wird er zweimal eingefügt. Außerdem wird es nicht tatsächlich in den Inhaltsblock eingefügt, sondern immer noch in root
Marty Wallace,
Es ist auch erwähnenswert, dass das Problem nur auftritt, wenn ich den Block in den 'Content'-Block einfüge. Ich mache das auf einer Kategorieseite und wenn ich zum Beispiel in die product_list einfüge, dann funktioniert es gut. Nur ein Problem mit dem Inhaltsblock.
Marty Wallace
1

Tatsächlich können Breadcrumbs nicht über XML verschoben werden, da sie in Root-Vorlagen eine Beschriftung enthalten. Zum Beispiel:

        <div class="main-container col1-layout">
        <div class="main">
            <?php echo $this->getChildHtml('breadcrumbs') ?>
            <div class="col-main">
                <?php echo $this->getChildHtml('global_messages') ?>
                <?php echo $this->getChildHtml('content') ?>
            </div>
        </div>
    </div>
Ravbetsky
quelle
1
Das sollte kein Problem sein, wenn das Kind nicht existiert, $this->getChildHtml()wird eine leere Zeichenfolge zurückgegeben.
Fabian Schmengler
0

Versuchen Sie es einfach ohne verschachtelte Referenzen hinzuzufügen:

<default>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <action method="insert"><child>breadcrumbs</child></action>
    </reference>
</default>

oder:

<default>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs" template="page/html/breadcrumbs.phtml" />
    </reference>
</default>

Rufen Sie dann den Block "Breadcrumbs" in Ihrer Vorlagendatei auf.

zitix
quelle
Nein, das macht keinen Unterschied für das Verhalten
Marty Wallace
0

Möglicherweise wurden die Breadcrumbs blcok auf einen anderen Namen oder einen anderen Handler eingestellt. Selbst wenn Sie sie standardmäßig einfügen, bewegt sie sich nicht. Sie müssen es im jeweiligen Handler definieren

<handler>
    <reference name="root">
        <action method="unsetChild"><name>breadcrumbs</name></action>
    </reference>
    <reference name="content">
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs" template="page/html/breadcrumbs.phtml" />
    </reference>
</handler>
Mani
quelle