如何在Magento中运行时加载布局?

时间:2011-10-03 14:50:40

标签: magento

我知道我们可以在*.xml中设计布局,然后在action中调用loadLayoutrenderLayout来呈现blocks/views

但是,我有一个问题是:

  

- 如何在运行时加载布局?

     

如果我们有一个没有真正设计其布局的动作,将决定如何在运行时渲染。

您可以从the answer考虑​​the question以获得更明确的信息。

2 个答案:

答案 0 :(得分:4)

写一个新的答案,因为你似乎仍然想要渲染,你只想渲染一个不同的路径的布局XML更新。我相信来自_forward()的{​​{1}}方法可以让您以最少的痛苦来完成您所描述的内容。

您应该在目录目录之前添加操作控制器目录,使用viewAction创建ProductController,并检查客户是否未登录 - 在此检查中,您将调用Mage_Core_Controller_Varien_Action

虽然这种方法需要更多努力才能使用,因为我想您希望用户在登录时发送到产品页面。你看过Vinai Kopp's Login Only Catalog module了吗?它应该为你做到这一点。

答案 1 :(得分:2)

loadLayout()renderLayout()只执行块输出方法toHtml()(通常)并获取结果字符串并通过appendBody()将它们应用于响应对象。在动作控制器中,您只需拨打$this->getResponse()->setBody('response string')即可。你如何构建字符串取决于你。

您还可以使用Mage_Core_Block_Flush立即将输出发送到浏览器,而无需使用响应对象。