Frage

Ich bin derzeit versuchen, um die Seitenleiste Warenkorb im header der website, die ich arbeite, aber es scheint nicht zu funktionieren.Hier sind meine Dateien:

page.xml:

<block type="page/html_header" name="header" as="header">
    <block type="page/template_links" name="top.links" as="topLinks"/>
    <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
    <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
        <label>Navigation Bar</label>
        <block type="page/html_topmenu" name="catalog.topnav" template="page/html/topmenu.phtml"/>
    </block>
    <block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
        <label>Page Header</label>
        <action method="setElementClass"><value>top-container</value></action>
    </block>
    <block type="checkout/cart_sidebar" name="cart_sidebar" as="topcart" template="checkout/cart/sidebar.phtml"/>
</block>

header.phtml:

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

Derzeit habe ich den cache ausgeschaltet in Magento, aber ich habe versucht, das leeren des cache in System->Cache Management.Irgendwelche Ideen?

War es hilfreich?

Lösung

Das layout name für den block, den Sie definiert haben (cart_sidebar) ist die gleiche wie die Standard-layout-Namen für diesen block.Layout-name muss eindeutig sein, über das gesamte layout für die Seite, aber der alias - (topcart) muss nur eindeutig sein innerhalb des übergeordneten block.

Es sei denn, Sie haben auskommentiert andere Blöcke mit diesem layout-Namen in Ihre layout-Dateien, oder besser entfernt, die Ihnen aus dem layout mit der unsetChild block-Methode in Ihrer eigenen local.xml (oder Modul) layout-Datei, dann können Sie nicht fügen Sie einen block mit, die layout-Namen.

<action method="unsetChild"><name>cart_sidebar</name></action>

Bitte beachten Sie, dass das layout remove Tags nicht erlauben Sie zu fügen Sie einen block mit dem gleichen Namen des Layouts, den block noch vorhanden ist, im layout, es ist einfach nicht die Ausgabe.

<remove name="cart_sidebar" />

Beachten Sie auch, dass unsetChild genannt werden muss von der übergeordneten block -, aber die remove tag kann angewendet werden, direkt unter layout handle.

Schließlich page.xml sollte nur die Definition der grundlegenden layout-Struktur auf der Seite, sollten Sie nicht in neue Blöcke hinzufügen, die direkt in das layout-Datei, sollten Sie stattdessen verweist Sie auf die Blöcke, entsteht hier in andere layout-Dateien und das hinzufügen Ihre eigenen Blöcke dort statt.

<reference name="header">
    .........
</reference>

Andere Tipps

Ich werde in einer anderen Antwort auf Ihren Kommentar antworten, da der Kommentar nicht ausreichend Platz bietet.

Das Layoutgriff definiert, zu welcher Seiten ein Block hinzugefügt wird. Wenn Sie also weiter nach oben schauen page.xml Über dem Abschnitt, den Sie gepostet haben, sehen Sie a <default> Schild. Dies ist das Öffnungslayout -Handle -Tag und verwendet Ursprünglich meint Wenden Sie die Layoutänderungen hier auf jede Seite an.

Wenn Sie sich andere Layoutdateien ansehen, sehen Sie beispielsweise andere Handles in catalog.xml Sie finden <catalog_product_view> Dies ist der Layout -Griff für Produktansichtseiten und alle in diesem Griff definierten Layoutelemente werden nur beim Betrachten eines Produkts verwendet. Das Layout -Handle wird aus einer unterstrichengetrennten Verkettung des Modulnamens, des Controller -Namens und des Aktionsnamens erstellt. Mit dem oben genannten Modul ist der Katalog, Controller ist Produkt und Aktion innerhalb dieser Controller IS View.

Dies gibt Ihnen den Umfang, den Sie benötigen, um Layout -Änderungen nur auf bestimmten Seiten von Ihren eigenen Layoutdateien vorzunehmen. Es ist auch erwähnenswert, dass wenn Sie nicht sicher sind, wie Sie das Layout -Handle für eine bestimmte Seite bestimmen können, es standardmäßig als erste Klasse in das eingefügt wird <body> HTML -Tag auf jeder Seite.

Beachten Sie, dass Frontend- und Administratorseiten separate Layoutdateien haben, damit die <default> Tag gilt nur für die Frontend oder admin abhängig davon, in welcher Layout -Datei sie platziert wurde.

Ich kann Ihnen nur empfehlen, Ihre eigenen zu erstellen local.xml Layoutdatei (oder wenn Sie eine Erweiterung erstellen config.xml). Verwendung local.xml ist eine viel sauberere Möglichkeit, Layouts zu verwalten - Sie lassen Standardlayout -Dateien unberührt und verwalten alle Layout -Änderungen mithilfe von Griffen über eine einzelne Datei. Wenn lokal.xml in Ihrem Themen -Layout -Verzeichnis nicht vorhanden ist, erstellen Sie es einfach und es wird automatisch aufgegriffen. Hier ist ein local.xml Layoutdatei mit einer Beispielsyntax, um den Einstieg zu erhalten:

<?xml version="1.0"?>
<layout version="0.1.0">
    <default>
        <reference name="content">
            <block type="page/html" name="new.block" after="-" template="module/block/template.phtml" />
        </reference>
    </default>
    <catalog_product_view>
        <reference name="right">
            <action method="unsetChild">
                <name>child.block.name</name>
            </action>
        </reference>
        <remove name="some.block.name" />
        <block type="page/html" name="other.new.block" template="module/block/other_template.phtml" before="block_name_to_appear_before" parent="content" />
    </catalog_product_view>
</layout>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top