Как установить собственный шаблон для домашней страницы? - PullRequest
1 голос
/ 10 июня 2011

Я попытался установить шаблон 1column для домашней страницы, используя мой файл local.xml:

<cms_index_index>
    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
    </reference>
</cms_index_index>

Но это не работает. Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 10 июня 2011

Домашняя страница - это страница CMS. К сожалению, вы не можете назначить корневой шаблон для страниц CMS, используя макет, поскольку у них есть собственный атрибут «root_template» (таблица cms_page). Вы можете изменить этот атрибут в бэкэнде (CMS - Pages). Или вы можете изменить его в коде:

$homePage = Mage::getModel('cms/page')->load('home', 'identifier');
$homePage->setRootTemplate('one_column');
$homePage->save();

Я рекомендую написать обновление данных sql , которое обновит значение корневого шаблона для домашней страницы:

$installer = $this;
/* @var $installer Mage_Core_Model_Resource_Setup */

$installer->startSetup();

$installer->run("
    UPDATE `{$this->getTable('cms_page')}` SET `root_template` = 'one_column' WHERE `identifier` = 'home';
");

$installer->endSetup();
2 голосов
/ 13 июня 2011

Я уверен, что другие предложения работают хорошо, но все это выглядит слишком сложным для меня. То, что я сделал, что, кажется, работает отлично, это просто поместил следующее в XML-код обновления макета для рассматриваемой страницы CMS (в данном случае, вашей домашней страницы)

<reference name="root">
    <action method="setTemplate">
        <template>page/1column.phtml</template>
    </action>
</reference>
0 голосов
/ 10 июня 2011

Проблема лежит в Mage_Cms_Helper_Page :: _ renderPage.Применяются обновления макета - применяется предшествующий корневой шаблон (настроенный из бэкэнда):

Mage::dispatchEvent('cms_page_render', array('page' => $page, 'controller_action' => $action));

$action->loadLayoutUpdates();
$layoutUpdate = ($page->getCustomLayoutUpdateXml() && $inRange) ? $page->getCustomLayoutUpdateXml() : $page->getLayoutUpdateXml();
$action->getLayout()->getUpdate()->addUpdate($layoutUpdate);
$action->generateLayoutXml()->generateLayoutBlocks();

...

if ($page->getRootTemplate()) {
    $action->getLayout()->helper('page/layout')
        ->applyTemplate($page->getRootTemplate());
}

Также обратите внимание, что единственное событие в этом методе неудобно помещено над всем этим ... Если вы хотитеисправить это чисто (без запросов), вы должны наблюдать следующее событие:

controller_action_postdispatch_cms_index_index

Затем выполните следующее (не проверено, но должно работать):

$this->getEvent()->getControllerAction()->getLayout()->helper('page/layout')->applyTemplate('one_column');

Тогдасделать макет снова.Это всего лишь руководство, как решить эту проблему с помощью наблюдателей.

...