Расположение блоков отличается при вызове вне Magento - PullRequest
1 голос
/ 20 июля 2011

Я использовал предложенный здесь фрагмент

Загрузить блок за пределами Magento и применить текущий шаблон

для отображения блока вне Magento.
Вот мой код:

Mage::getSingleton('core/session', array('name'=>'frontend'));

$layout = Mage::app()->getLayout();
$layout->getUpdate()
    ->addHandle('default')
    ->load();

$layout->generateXml()
       ->generateBlocks();

$header = $layout->getBlock('header')->toHtml();
echo $header;

Заголовок печатается, но topLinks отличаются от тех, что отображаются в Magento.
Более того, HTML немного отличается (некоторые div отсутствуют).
Это мой макет XML:

<block type="page/html_header" name="header" as="header">
    <block type="core/text_list" name="top.menu" as="topMenu" translate="label">
        <label>Navigation Bar</label>
    </block>
    <block type="page/switch" name="store_language" as="store_language" template="page/switch/languages.phtml"/>
    <block type="page/template_links" name="top.links" as="topLinks"/>
    <block type="page/html_wrapper" name="top.bar" as="topBar" translate="label">
        <label>Breadcrumbs</label>
        <action method="setElementClass"><value>top-bar</value></action>
        <block type="page/html_breadcrumbs" name="breadcrumbs" as="breadcrumbs"/>
    </block>
    <block type="page/html_wrapper" name="top.container" as="topContainer" translate="label">
        <label>Page Header</label>
        <action method="setElementClass"><value>top-container</value></action>
    </block>
</block>

Что не так?

UPDATE

Благодаря предложению Алана Шторма теперь я знаю, что ошибка не устанавливает правильные дескрипторы.
Мне нужно добавить customer_logged_in или customer_logged_out в макет $.
Я пробовал с

Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('customer/session', array('name'=>'frontend'));

$login_status = '';
if($session->isLoggedIn()){
    $login_status = 'customer_logged_in';
} else {
    $login_status = 'customer_logged_out';
} 

Но результаты моего пользователя всегда выходили из системы, даже когда он был зарегистрирован.
Чего мне не хватает?

1 Ответ

0 голосов
/ 20 июля 2011

Для начала вы загрузили только один маркер макета. Помимо дескриптора default, каждый запрос страницы Magento загружает дескриптор магазина (например, STORE_english ) и дескриптор, указывающий, зарегистрирован ли клиент in или out (например, customer_logged_out). Без этих ручек некоторые вещи не произойдут, и конечная страница будет выглядеть по-другому.

...