我有一个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模板相同的方式呈现每个块。例如:
<div id="sidebar-cart-container">
<?php echo $this->renderMagentoBlock('cart-block-reference-id'); ?>
</div>
先行致谢。
Mage::init()
之后,如果没有以下行,则无法查看购物车内容:Mage::getSingleton('core/session', array('name'=>'frontend'));
- azkotoki