Это, вероятно, не так прямо, как хотелось бы, но вот как это работает.
Запрос на главную страницу направляется на метод indexAction
класса Mage_Cms_IndexController
.
Если вы посмотрите на метод indexAction
вы можете увидеть, Magento использует renderPage
метод cms/page
вспомогательный объект для отображения содержимого страницы
#File: app/code/core/Mage/Cms/controllers/IndexController.php
public function indexAction($coreRoute = null)
{
$pageId = Mage::getStoreConfig(Mage_Cms_Helper_Page::XML_PATH_HOME_PAGE);
if (!Mage::helper('cms/page')->renderPage($this, $pageId)) {
$this->_forward('defaultIndex');
}
}
$pageId
вытягивается из Magento, и является идентификатором URL страницы CMS.
Если Вы прыгаете к renderPage
методе
#File: app/code/core/Mage/Cms/Helper/Page.php
public function renderPage(Mage_Core_Controller_Front_Action $action, $pageId = null)
{
return $this->_renderPage($action, $pageId);
}
он оборачивает вызов защищенного _renderPage
метода. Если вы воспользуетесь этим методом, код загрузки страницы будет следующими.
#File: app/code/core/Mage/Cms/Helper/Page.php
protected function _renderPage(Mage_Core_Controller_Varien_Action $action, $pageId = null, $renderLayout = true)
{
$page = Mage::getSingleton('cms/page');
//...
if (!$page->load($pageId)) {
return false;
}
//...
}
Это загружает объект страницы CMS для домашней страницы. Обратите внимание на то, что модель представляет собой одноэлементный, что означает, что другой код, который мгновенно получит один синглтон, будет иметь одну и ту же страницу. После этого выполняется стандартное отображение страницы Magento. Возможно, соответствующие вашим интересам, блоки макета контента в конечном итоге выглядит как этот
Значение блока HTML для страницы CMS оказано следующим кодом в Mage_Cms_Block_Page
#File: app/code/core/Mage/Cms/Helper/Page.php
protected function _toHtml()
{
/* @var $helper Mage_Cms_Helper_Data */
$helper = Mage::helper('cms');
$processor = $helper->getPageTemplateProcessor();
$html = $processor->filter($this->getPage()->getContent());
$html = $this->getMessagesBlock()->toHtml() . $html;
return $html;
}
getPage
метод создает тот же самый синглтон, о котором мы упоминали выше. Другой код - это то, что заменяет директивы CMS {{...}}
с их фактическим содержанием.
Если бы я приближался к этому проекту, я бы рассмотрел переписывание класса для объекта Mage_Cms_Model_Page
, который выглядит примерно так.
public function load($id, $field=null)
{
if(... is mobile site ... AND ... $id is for the home page ...)
{
$id = ... ID of the mobile site, hard coded or pulled from custom config ...;
}
return parent::load($id, $field);
}
Там также cms_page_render
событие, которое срабатывает после загрузки страницы в методе _renderPage
. Вы можете попробовать перезагрузить переданный в объекте страницы другой идентификатор в наблюдателе. Вы также можете рассмотреть что-то в событиях model_load_after
или model_load_before
- хотя это становится сложнее, поскольку вы не можете напрямую изменить идентификатор.
Для кода, который не собирается оставлять систему одного клиента, я обычно выбираю переписать в эти дни, так как он быстрее (дешевле для клиентов) и имеет меньше осложнений (т.получение и изменение необходимой информации) во время разработки. Компромисс - это возможный конфликт в будущем с кем-то, кто переписывает класс.
Ваше умение/философия может отличаться.
Удачи вам!
По умолчанию я думаю, что это статическая страница, которая использует один из основных шаблонов (правый столбец, левый столбец, один столбец). Если у вас это не получилось, проверьте CMS в Magento Admin. – phpisuber01
Проверьте правильность выше. Я пытаюсь вытащить другую страницу CMS для мобильной версии сайта, я думаю, что мне нужно переопределить ее где-нибудь в мобильном шаблоне. Просто не знаю, где его переопределить! – valen
Вы можете создать Исключения на вкладке «Дизайн», чтобы использовать другую тему на основе пользовательского агента. Это пугающий способ сделать это. [Вот руководство по тому, как это сделать] (http://magebase.com/magento-tutorials/magent-design-exceptions-explained/) – phpisuber01