Question

J'essaie actuellement d'ajouter le panier de la barre latérale à l'en-tête du site je travaille, mais il ne semble pas fonctionner. Voici mes fichiers:

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'); ?>

À l'heure actuelle, je le cache désactivé dans Magento, mais j'ai essayé de vider le cache dans Système-> Gestion du cache. Toutes les idées?

Était-ce utile?

La solution

Le nom de la mise en page pour le bloc que vous avez défini (cart_sidebar) est le même que le nom de la mise en page par défaut pour ce bloc. Le nom de la mise en page doit être unique sur toute la mise en page de la page, mais l'alias (topcart) ne doit être unique dans le bloc parent.

Sauf si vous avez commenté autres blocs avec ce nom de mise en page dans leurs fichiers de mise en page, ou mieux les retirés de la mise en page en utilisant la méthode du bloc unsetChild dans votre propre local.xml (ou module) fichier de mise en page, vous ne pouvez pas ajouter un bloc avec ce nom de mise en page.

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

Notez que l'utilisation de la balise mise en page de remove ne vous permet de ne pas ajouter alors un bloc avec le même nom de mise en page, le bloc existe encore dans la mise en page, il est tout simplement pas sortie.

<remove name="cart_sidebar" />

Notez également que unsetChild doit être appelé à partir du bloc parent, mais la balise remove peut être appliqué directement sous la poignée de mise en page.

Enfin, page.xml ne devrait définir la structure de mise en page de base de la page, vous ne devez pas ajouter de nouveaux blocs directement dans ce fichier de mise en page, vous devriez plutôt être référencez les blocs créés ici dans d'autres fichiers de mise en page et en ajoutant vos propres blocs il à la place.

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

Autres conseils

Je vais répondre à votre commentaire dans une autre réponse que le commentaire ne donne pas suffisamment d'espace.

Les définit la poignée de mise en page les pages d'un bloc sera ajouté à, donc si vous regardez plus haut page.xml au-dessus de la section que vous avez posté, vous voyez une étiquette de <default>. Cette balise d'ouverture est la poignée de mise en page et en utilisant default moyen appliquer la mise en page change ici à chaque page .

Si vous regardez d'autres fichiers de mise en page, vous verrez d'autres poignées, par exemple dans catalog.xml vous trouvez <catalog_product_view> qui est la poignée de mise en page pour les pages d'affichage des produits et des éléments de mise en page définis dans cette poignée sera seulement être utilisé lors de la visualisation d'un produit. La poignée de mise en page est créé à partir d'un trait de soulignement séparé concaténation du nom du module, le nom de contrôleur et le nom de l'action, de sorte à ce qui précède, le module est catalogue, le contrôleur est produit et de l'action au sein de ce dispositif de commande est vue.

Cela vous donne la portée que vous devez apporter des modifications de mise en page seulement sur certaines pages de vos propres fichiers de mise en page. Il convient de noter également que si vous n'êtes pas sûr de savoir comment déterminer la poignée de mise en page pour une page particulière, il est inséré comme la première classe par défaut dans la balise HTML <body> sur chaque page.

Notez que frontend et pages d'administration ont des fichiers de mise en page séparés pour la balise <default> applique uniquement soit le frontend, ou en fonction d'administration sur lequel le fichier mise en page, il a été placé.

Je vous recommande fortement de créer votre propre fichier de mise en page de local.xml (ou si vous créez une extension de définir votre propre fichier de mise en page dans elle est config.xml). L'utilisation local.xml est beaucoup plus propre façon de gérer layouts - vous laisser des fichiers mise en page par défaut intacte et de gérer toutes les modifications de mise en page, à l'aide de poignées, à travers un seul fichier. Si local.xml n'existe pas dans vos thèmes mise en page il suffit de créer le répertoire et il sera automatiquement pris. Voici un fichier de mise en page de local.xml avec une syntaxe exemple pour vous aider à démarrer:

<?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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top