Con respecto a su "no se puede agregar un bloque usando <reference name="left
/>, ¿está seguro de que su página CMS tiene un bloque llamado izquierda? Por ejemplo, si considera la página de inicio predeterminada que se envía con los datos de muestra de Magento, parece tener un bloque llamado izquierda.
Sin embargo, si mira la página en el backend, puede ver que está configurada para usar la plantilla raíz
`2 columns with right bar`
y luego en su área de contenido, la columna izquierda se agrega usando marcado HTML (alternar el WYSIWYG a la vista de origen)
<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>
Este gráfico dirigido deja en claro que no hay ningún bloque con nombre left
para enganchar ( haga clic para obtener una imagen a tamaño completo )
Con respecto a la configuración de una plantilla, si observa el origen del menú desplegable "Diseño"
<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>
Se puede ver cuando se está configurando este campo, el valor real de ser salvo es algo así como one_column
, two_columns_left
, etc. Estos valores coresponden a los mangos de diseño del mismo nombre.
#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>
Cuando Magento representa una página CMS, hace referencia a los valores guardados y agrega el controlador de diseño apropiado a la página. Si bien es tangencial a la pregunta, ese identificador se agrega aquí
#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);
}
//...
}
Sin embargo, lo más importante es el orden en que se agregan los controladores de diseño
Como puede ver en la captura de pantalla anterior, el page_two_columns_right
controlador se agrega después del cms_index_index
controlador. Esto significa que si agrega el código de actualización xml de diseño para cambiar la plantilla en cms_index_index
su código, se ejecutará, pero luego page_two_columns_right
se ejecutará el código xml de actualización de diseño .
Siempre sospeché que esto es así por diseño para garantizar que la plantilla establecida en la interfaz de usuario sea siempre correcta. En versiones anteriores de Magento, la <action method="setIsHandle"><applied>1</applied></action>
llamada al método parece haber existido por las mismas razones.
Por lo tanto, no hay forma de hacer lo que quiere con un código XML de diseño puro. Si se siente cómodo con la creación de módulos personalizados y código de observador, investigue el cms_page_render
evento. Esto se activa justo antes de que loadLayoutUpdates
se llame, y le permitiría deslizar un nombre de identificador adicional o eliminar los nombres de identificador existentes.