我知道我们可以在*.xml
中设计布局,然后在action
中调用loadLayout
和renderLayout
来呈现blocks/views
。
但是,我有一个问题是:
- 如何在运行时加载布局?
如果我们有一个没有真正设计其布局的动作,将决定如何在运行时渲染。
您可以从the answer考虑the question以获得更明确的信息。
答案 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
立即将输出发送到浏览器,而无需使用响应对象。