Per quanto riguarda il "non puoi aggiungere un blocco usando <reference name="left
/>, sei sicuro che la tua pagina CMS abbia un blocco chiamato a sinistra? Ad esempio, se consideri la home page predefinita fornita con i dati di esempio Magento, sembra che abbia un blocco chiamato sinistra.
Tuttavia, se guardi la pagina nel back-end, puoi vedere che è impostato per utilizzare il modello radice
`2 columns with right bar`
e quindi nella sua area di contenuto, la colonna di sinistra viene aggiunta usando il markup HTML (attiva il WYSIWYG alla vista sorgente)
<div class="col-left side-col">
<p class="home-callout"><a href="{{store direct_url="apparel/shoes/womens/anashria-womens-premier-leather-sandal.html"}}"><img src="{{skin url='images/ph_callout_left_top.gif'}}" alt="" border="0" /></a></p>
<p class="home-callout"><img src="{{skin url='images/ph_callout_left_rebel.jpg'}}" alt="" border="0" /></p>
{{block type="tag/popular" template="tag/popular.phtml"}}</div>
Questo grafico diretto chiarisce che non ci sono blocchi nominati left
da agganciare ( fare clic per l'immagine a dimensione intera )
Per quanto riguarda l'impostazione di un modello, se si osserva l'origine per il menu a discesa "Layout"
<select id="page_root_template" name="root_template" class=" required-entry select">
<option value="empty">Empty</option>
<option value="one_column">1 column</option>
<option value="two_columns_left">2 columns with left bar</option>
<option value="two_columns_right" selected="selected">2 columns with right bar</option>
<option value="three_columns">3 columns</option>
</select>
Si può vedere quando si sta impostando questo campo, il valore effettivo sempre risparmiato è qualcosa di simile one_column
, two_columns_left
e così via Questi valori corespond alle maniglie di layout con lo stesso nome.
#File: app/design/frontend/default/modern/layout/page.xml
<page_one_column translate="label">
<label>All One-Column Layout Pages</label>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
<action method="setLayoutCode"><name>one_column</name></action>
</reference>
</page_one_column>
...
<page_two_columns_left translate="label">
<label>All Two-Column Layout Pages (Left Column)</label>
<reference name="root">
<action method="setTemplate"><template>page/2columns-left.phtml</template></action>
<!-- Mark root page block that template is applied -->
<action method="setIsHandle"><applied>1</applied></action>
<action method="setLayoutCode"><name>two_columns_left</name></action>
</reference>
</page_two_columns_left>
Quando Magento esegue il rendering di una pagina CMS, fa riferimento ai valori salvati e aggiunge l'handle di layout appropriato alla pagina. Mentre è tangenziale alla domanda, quell'handle viene aggiunto qui
#File: app/code/core/Mage/Cms/Helper/Page.php
protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true)
{
//...
$action->addActionLayoutHandles();
if ($page->getRootTemplate()) {
$handle = ($page->getCustomRootTemplate()
&& $page->getCustomRootTemplate() != 'empty'
&& $inRange) ? $page->getCustomRootTemplate() : $page->getRootTemplate();
$action->getLayout()->helper('page/layout')->applyHandle($handle);
}
//...
}
Ancora più importante è l' ordine in cui vengono aggiunti gli handle di layout
Come puoi vedere nello screenshot sopra, l' page_two_columns_right
handle viene aggiunto dopo l' cms_index_index
handle. Ciò significa che se si aggiunge il codice di aggiornamento xml del layout per modificare il modello nel cms_index_index
codice verrà eseguito, ma successivamente page_two_columns_right
verrà eseguito il codice xml di aggiornamento del layout .
Ho sempre sospettato che ciò avvenisse in base alla progettazione per garantire che il modello impostato nell'interfaccia utente sia sempre corretto. Nella versione precedente di Magento la <action method="setIsHandle"><applied>1</applied></action>
chiamata del metodo sembra esistere per gli stessi motivi.
Quindi, non c'è modo di fare quello che vuoi usando un codice xml di layout puro. Se hai dimestichezza con la creazione di moduli personalizzati e codice osservatore, guarda l' cms_page_render
evento. Questo viene generato subito prima di loadLayoutUpdates
essere chiamato e ti consente di inserire un nome di handle aggiuntivo o rimuovere i nomi di handle esistenti.