Разная домашняя страница для каждого клиента
Привет, у меня есть вопрос, можно ли создать один статический блок, чтобы получать разный контент для каждого клиента, который вошел в систему. И с этим, чтобы получить другую домашнюю страницу для клиентов.
3 answers
Интересная идея.
Если бы я реализовал что-то подобное, я бы сделал это так.
Давайте начнем с другой домашней страницы.
Действие, которое отображает домашнюю страницу, является Mage_Cms_IndexController::indexAction
.
По умолчанию это выглядит так:
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');
}
}
Это означает, что magento получает страницу, которую вы установили в качестве домашней страницы в system->конфигурация, и отображает ее.
Если такой страницы нет, она возвращается на страницу по умолчанию.
Я бы переписал это действие и применил к нему свою логику. Конечно существует проблема управления этими домашними страницами. Но это зависит от вас.
Что касается блоков, то это должно быть проще.
Просто создайте один статический блок с таким содержимым:
{{block type="core/template" template="path/to/template.phtml"}}
И вы можете поместить свою логику в path/to/template.phtml
, где вы можете получить доступ к текущему клиенту следующим образом:
$customer = Mage::getSingleton('customer/session')->getCustomer();
Уверен, что это возможно.
Поместите phtml в содержимое страницы, используя этот синтакс
{{block type="core/template" template="page/home_content.phtml"}}
Внутри этого home_content.phtml поместите этот код
if(Mage::getSingleton('customer/session')->isLoggedIn()) {
$customer = Mage::getSingleton('customer/session')->getCustomer();
if($customer->isMyFriend()) //Check some data into customer
echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_block_id_friend')->toHtml();
else
echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_block_id_foe')->toHtml();
}
else
echo $this->getLayout()->createBlock('cms/block')->setBlockId('cms_block_not_logged_in')->toHtml();
Конечно, это всего лишь скелет, но его должно быть достаточно, чтобы направить вас в правильном направлении
Вы можете сделать это с группами клиентов и показать другой блок в соответствии с группой, в которой находится клиент. Вам придется кодировать это самостоятельно, так как я не видел никаких расширений для достижения этой цели.