在Magento外部加载块,并应用当前模板

| 我有与外部网站集成的Magento安装,我希望将Magento的购物车块显示在此外部网站的标题上。 我通过以下代码实现了这一点:
<?php

require_once(dirname(__FILE__).\'/store/app/Mage.php\');

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

$block = $app
    ->getLayout()
    ->getBlockSingleton(\'checkout/cart_sidebar\')
    ->setTemplate(\'checkout/cart/sidebar.phtml\');

echo $block->toHtml();
但是,我想要(并相信这是可能的)更好的方法。 我不喜欢必须通过
setTemplate()
手动指定模板的事实,这涉及对模板位置进行硬编码并在其他地方(在设计的布局xml文件中)重复定义的内容。我尝试通过
$app->getLayout()->getBlock($name)
加载块,但是没有结果(
$name
表示块的参考名称,如布局xml文件中所定义)。 所以问题是: 有什么方法可以在magento外部渲染块(具有以下条件)? 我希望基本布局xml和设计更改的商店的设计布局更新能够自动加载,因此我不需要手动(再次)指定模板路径和块类型。 我想通过其引用名称加载该块,因此可以利用布局xml文件上应用于该块的属性。 这个问题的目的是将其包装在一个函数中,并以与在Magento模板上相同的方式渲染Magento外部的每个块。例如:
<div id=\"sidebar-cart-container\">
    <?php echo $this->renderMagentoBlock(\'cart-block-reference-id\'); ?>
</div>
提前致谢。     
已邀请:
        花了我几分钟的调试时间,但这似乎相对容易。
<?php

/*
 * Initialize magento.
 */
require_once \'app/Mage.php\';
Mage::init();

/*
 * Add specific layout handles to our layout and then load them.
 */
$layout = Mage::app()->getLayout();
$layout->getUpdate()
    ->addHandle(\'default\')
    ->addHandle(\'some_other_handle\')
    ->load();

/*
 * Generate blocks, but XML from previously loaded layout handles must be
 * loaded first.
 */
$layout->generateXml()
       ->generateBlocks();

/* 
 * Now we can simply get any block in the usual way.
 */
$cart = $layout->getBlock(\'cart_sidebar\')->toHtml();
echo $cart;
请注意,您必须手动指定要从中加载块的布局句柄。 \'default \'布局句柄将包含侧边栏,因为它是从checkout.xml内部放置的。 但是,由于许多模块将其块放置在此句柄中,因此使用“默认”布局句柄会带来巨大的性能成本。您可能需要将外部站点上使用的所有块放在单独的布局句柄中,然后简单地加载它。 这是你的选择。祝好运。     

要回复问题请先登录注册