Magento获得给定页面的布局

Tim*_*Tim 9 magento

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

我已经阅读了Alan Storm的优秀magento-nofrills电子书,我正在使用他的Commercebug插件来帮助我开发我的magento网站.我也花了一些时间在stackoverflow上寻找类似问题,如果我错过了,请原谅我.

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

我一直在玩这个请求,当我在前端运行这个代码时,我可以看到模块,控制器,布局句柄等在例如查看目录页面时被更改

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

但是当我从布局中检查xml时,我似乎无法强制magento向我显示(在此示例中)id为6的cms页面的xml:

Mage::app()->getLayout()->getNode()->asXml();
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!蒂姆

Joe*_*Joe 6

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

您可以通过调用getBlock($ block_name)来检查布局中块是否处于活动状态:

$left_block = $this->loadLayout()->getLayout()->getBlock('left');
Run Code Online (Sandbox Code Playgroud)

如果块不是布局的一部分(或被忽略),则$ left_block将为false.您可以将getBlock()与getSortedChildren()一起使用以查看其子块:

$this->loadLayout()->getLayout()->getBlock('content')->getSortedChildren();
Run Code Online (Sandbox Code Playgroud)

上面将返回"内容"块中的块名称的字符串数组.仅返回活动块的名称.