<reference name="left
Sind Sie sicher, dass Ihre CMS-Seite über /> keinen Block hinzufügen kann ? Wenn Sie beispielsweise die Standardhomepage betrachten, die mit den Magento-Beispieldaten geliefert wird, scheint sie einen Block mit dem Namen zu haben links.
Wenn Sie sich jedoch die Seite im Backend ansehen, sehen Sie, dass sie für die Verwendung der Stammvorlage konfiguriert ist
`2 columns with right bar`
Anschließend wird in seinem Inhaltsbereich die linke Spalte mithilfe von HTML-Markup hinzugefügt (WYSIWYG in die Quellansicht umschalten).
<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>
Diese gerichtete Grafik macht deutlich, dass es keinen Block gibt, in den left
man sich einklinken kann ( Klicken für ein Bild in voller Größe )
Zum Einstellen einer Vorlage, wenn Sie sich die Quelle für das Dropdown-Menü "Layout" ansehen
<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>
Sie können sehen, wenn Sie dieses Feld einstellen, dass der tatsächliche Wert, der gespeichert wird, in etwa so one_column
ist two_columns_left
, usw. Diese Werte entsprechen Layout-Ziehpunkten mit demselben Namen.
#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>
Wenn Magento eine CMS-Seite rendert, verweist es auf die gespeicherten Werte und fügt der Seite das entsprechende Layout-Handle hinzu. Während es tangential zur Frage ist, wird dieses Handle hier hinzugefügt
#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);
}
//...
}
Noch wichtiger ist jedoch die Reihenfolge, in der die Layout-Handles hinzugefügt werden
Wie Sie im obigen Screenshot sehen können, wird das page_two_columns_right
Handle nach dem cms_index_index
Handle eingefügt . Dies bedeutet, dass, wenn Sie Layout-XML-Aktualisierungscode hinzufügen, um die Vorlage in cms_index_index
Ihrem Code zu ändern, dieser ausgeführt wird. Anschließend wird jedoch der XML-Code für die Layout-Aktualisierung page_two_columns_right
ausgeführt.
Ich habe immer vermutet, dass dies beabsichtigt ist, um sicherzustellen, dass die in der Benutzeroberfläche festgelegte Vorlage immer korrekt ist. In der Vorgängerversion von Magento <action method="setIsHandle"><applied>1</applied></action>
schien der Methodenaufruf aus den gleichen Gründen vorhanden zu sein.
Es gibt also keine Möglichkeit, mit reinem Layout-XML-Code das zu tun, was Sie wollen. Wenn Sie mit dem Erstellen von benutzerdefinierten Modulen und Beobachtercode vertraut sind, schauen Sie sich das cms_page_render
Ereignis an. Dies wird unmittelbar vor dem loadLayoutUpdates
Aufruf ausgelöst und ermöglicht es Ihnen, einen zusätzlichen Handle-Namen einzufügen oder die vorhandenen Handle-Namen zu entfernen.