How to load the layout at runtime in Magento?
I know that we can design the layout in *.xml
then in the action
just invoke loadLayout
, and renderLayout
to render the blocks/views
.
But, I have a 开发者_如何学Cquestion is:
- How can I load the layout at runtime?
If we have an action which does not really design its layout and will be decided how to render at runtime.
You can please consider the answer from the question for more clear.
Writing a new answer because it seems that you actually DO still want to render, you just want to render a different route's layout XML updates. I believe the _forward()
method from Mage_Core_Controller_Varien_Action
will allow you to do what you are describing with the least amount of pain.
You should add your action controller directory ahead of the catalog directory, create a ProductController with a viewAction, and check customer is not logged in - in this check you would call $this->_forward('customer','account','login');
.
This approach though is going to require more effort in order to be usable, as I imagine that you want the user to be sent to the product page upon login. Have you seen Vinai Kopp's Login Only Catalog module? It should do this for you.
loadLayout()
and renderLayout()
just execute block output method toHtml()
(usually) and take the resulting strings and apply them to the response object via appendBody()
. In an action controller you can just call $this->getResponse()->setBody('response string')
. How you build the string is up to you.
You can also use Mage_Core_Block_Flush
to immediately send output to the browser without using the response object.
精彩评论