2011-08-11 41 views
8

我正在研究一个Magento模块,我想从前端页面获取布局。通过前端页面我的意思是所有类型的网页,即CMS页面,类别,产品,购物车,我的帐户等Magento得到给定页面的布局

我读过Alan Storm的优秀magento-nofrills电子书,我使用他的Commercebug插件帮助我开发我的magento网站。我也花了一些时间寻找相似的问题,请原谅我,如果我错过了它。

如果例如我有一个页面ID或类别ID,我如何从后台运行的代码中获取该前端页面的布局?

我一直在玩的请求,当我运行在前端这段代码我可以看到,模块,控制器,layouthandles等发生变化时,例如在看目录页

$request = Mage::app()->getRequest(); 
$request->setModuleName('cms'); 
$request->setRouteName('cms'); 
$request->setControllerName('page'); 
$request->setActionName('view'); 
$request->setParam('page_id', 6); 

但当我检查从布局中的XML,我似乎无法强制Magento的向我展示了XML(在这个例子中)CMS页面ID = 6:

Mage::app()->getLayout()->getNode()->asXml(); 

也许是我想太复杂虽然。我想检查某个页面是否有侧边栏,哪些块和元素显示在页面和侧边栏中(只有活动块,而不是被忽略的页面)。

在此先感谢! Tim

+1

你知道吗?我很好奇自己。 – chrisjlee

回答

5

在getLayout()之前调用loadLayout()。

您可以检查是否有块通过调用getBlock($ block_name)是在布局主动:

$left_block = $this->loadLayout()->getLayout()->getBlock('left'); 

如果该块不是布局的一部分(或忽略),那么$ left_block会假。 您可以结合使用getBlock()与getSortedChildren(),看看它的子块:

$this->loadLayout()->getLayout()->getBlock('content')->getSortedChildren(); 

以上将“内容”块内返回块名称的字符串数组。只有活动块的名称将被返回。

+0

我试图用你的代码片段来获得$ left_block; 但我有一个异常错误。在这行代码之前是否应该添加任何内容? – Kamal

+0

你在哪里放置代码?上面的例子属于控制器文件。 – Joe

+0

owh ...我需要在phtml文件上使用它...有什么办法可以做到吗?我在这里问它http://stackoverflow.com/questions/11133522/magento-get-which-layout-being-used-on-phtml-files。会很高兴,如果你能回答它:) – Kamal