Domanda

Attualmente sto cercando di aggiungere il carro barra laterale per l'intestazione del sito su cui sto lavorando, ma non sembra funzionare. Qui sono i miei file:

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

Al momento, ho la cache disattivata in Magento, ma ho provato lo svuotamento della cache in Sistema-> Gestione Cache. Tutte le idee?

È stato utile?

Soluzione

Il nome del layout per il blocco è stato definito (cart_sidebar) è lo stesso del nome del layout di default per questo blocco. Il nome di layout deve essere univoco su tutto il layout per la pagina, ma l'alias (topcart) ha solo bisogno di essere univoco all'interno del blocco padre.

A meno che non si è commentata altri blocchi con questo nome layout in loro file di layout, o meglio li rimosso dal layout utilizzando il metodo blocco unsetChild nel file di layout proprio local.xml (o modulo), quindi non è possibile aggiungere un blocco con quel nome layout.

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

Si noti che utilizzando il tag di layout remove non consente quindi di aggiungere un blocco con lo stesso nome del layout, il blocco esiste ancora nel layout, semplicemente non viene emesso.

<remove name="cart_sidebar" />

Si noti inoltre che unsetChild deve essere richiamato dal blocco genitore, ma il tag remove può essere applicato direttamente sotto la maniglia di layout.

Infine, page.xml dovrebbe definire solo la struttura layout di base della pagina, non si dovrebbe aggiungere nuovi blocchi direttamente in questo file di layout, si dovrebbe invece essere riferimento al blocchi creati qui in altri file di layout e aggiungendo i propri blocchi lì invece.

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

Altri suggerimenti

I risponderà al tuo commento in un'altra risposta, come il commento non dà spazio sufficiente.

I definisce manico di layout quali pagine di un blocco sarà aggiunto, quindi se si guarda più in alto page.xml sopra la sezione che hai postato, si vede un tag <default>. Questo è tag di apertura maniglia layout e utilizzando default significa applicare il layout cambia qui per ogni pagina .

Se si guarda in altri file di layout vedrete altre maniglie per esempio nel catalog.xml a trovare <catalog_product_view> che è la maniglia layout per le pagine prodotto vedi e tutti gli elementi di layout definite all'interno di questa maniglia verrà essere utilizzato solo durante la visualizzazione di un prodotto. La maniglia layout è realizzato con una sottolineatura separato concatenazione di nome di modulo, nome del controller e il nome di azione, quindi con quanto sopra, il modulo è catalogo, controller è prodotto e l'azione all'interno di tale regolatore è vista.

Questo vi dà l'ambito è necessario apportare modifiche al layout solo su particolari pagine i propri file di layout. vale la pena di notare anche che se non si è sicuri come determinare il manico layout per una pagina particolare, è inserito come la prima classe di default nel tag <body> HTML in ogni pagina.

Si noti che le pagine di frontend e amministrazione hanno file di layout separati in modo che il tag <default> si applica solo a uno frontend, o admin dipende da quale file di layout che è stato messo in.

vi consiglio vivamente di creare il proprio file di layout local.xml (o se si sta creando un'estensione definire il proprio file di layout in esso è config.xml). Utilizzando local.xml è molto modo più pulito per gestire i layout - si lascia i file intatti layout predefinito e gestire tutte le modifiche del layout, utilizzando le maniglie, attraverso un unico file. Se local.xml non esiste nei vostri temi del formato directory basta crearlo e sarà automaticamente raccolto. Ecco un file di layout local.xml con qualche esempio di sintassi per iniziare:

<?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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top