Layout 在Magento外部调用时,块布局不同

Layout 在Magento外部调用时,块布局不同,layout,magento,external,block,xml-layout,Layout,Magento,External,Block,Xml Layout,我使用了这里建议的代码片段 在Magento外部显示块。 这是我的密码: Mage::getSingleton('core/session', array('name'=>'frontend')); $layout = Mage::app()->getLayout(); $layout->getUpdate() ->addHandle('default') ->load(); $layout->generateXml() -

我使用了这里建议的代码片段

在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;
页眉已打印,但顶部链接与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>
但我的用户结果总是在登录时注销。

我缺少什么?

首先,您只加载了一个布局句柄。除了
默认
句柄之外,每个Magento页面请求都会加载商店的句柄(例如
store\u english
),以及指示客户是登录
还是注销
(例如
customer\u logged\u 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';
}