Layout 为新管理模块配置Magento布局
我正在尝试在Magento后端创建自定义报告;我的策略是,首先让我的新模块模仿管理面板中现有的报表/销售/订单功能,然后在我看到各个部分是如何组合在一起后进行必要的更改。我添加了我的新菜单项,模块加载了基本的管理布局和一些面包屑,因此模块配置和控制器配置设置足够正确。但是,没有加载布局块。这是问题代码。假设我在app/code/local/BULX/Reports/block/Report/Sales/Sales/Grid.php上有一个相关块文件的副本:Layout 为新管理模块配置Magento布局,layout,magento,module,admin,Layout,Magento,Module,Admin,我正在尝试在Magento后端创建自定义报告;我的策略是,首先让我的新模块模仿管理面板中现有的报表/销售/订单功能,然后在我看到各个部分是如何组合在一起后进行必要的更改。我添加了我的新菜单项,模块加载了基本的管理布局和一些面包屑,因此模块配置和控制器配置设置足够正确。但是,没有加载布局块。这是问题代码。假设我在app/code/local/BULX/Reports/block/Report/Sales/Sales/Grid.php上有一个相关块文件的副本: class BULX_Reports_
class BULX_Reports_IndexController extends Mage_Adminhtml_Report_SalesController {
public function salesAction {
//...otherwise identical to parent class
//should load reference to Grid block
$gridBlock = $this->getLayout()->getBlock('report_sales_sales.grid');
/* in original Mage module, will output Mage_Adminhtml_Block_Report_Sales_Sales_Grid
in BULX_Report, outputs nothing. */
echo get_class($gridBlock)."<br>";
下面的文件位于app/code/local/BULX/Reports/Block/Test.php
class BULX_Reports_Block_Test extends Mage_Core_Block_Abstract
{
protected function _toHtml() {
echo 'to html';
}
}
我得到了相同的结果:没有“to html”输出,没有get_类调用的输出
我在这里建议添加日志语句:
很明显,Magento在我的新模块中找不到任何布局块。Alan Storm的教程通常非常有用,但我在alanstorm.com/magento_admin_controllers中找不到我需要的内容(抱歉,没有足够的声誉来提供两个超链接);据我所知,我已经设置了相同的配置。一个困难是“report\u sales\u sales.grid”字符串没有出现在那些网格出现在管理中的很多地方的任何地方,它们是由我没有找到的结构动态生成的
我错过了什么?这是企业版,1.8。谢谢 检查文件
app/design/adminhtml/default/default/layout/sales.xml
中与请求的URL匹配的部分。它有一个“adminhtml/report\u sales\u sales”类型的块,这是一个网格容器,网格容器自动创建它们的子网格块
因此,缺少的块“report\u sales\u sales.grid”是通过在布局中定义“adminhtml/report\u sales\u sales”块创建的。因为您的页面是新的,所以它的URL在布局XML文件中还没有匹配的部分,所以没有网格容器,所以没有网格。将sales.xml中的
部分复制到您自己的布局文件中,并将其命名为与页面URL匹配的文件。检查文件app/design/adminhtml/default/default/layout/sales.xml
,查看与请求的URL匹配的部分
。它有一个“adminhtml/report\u sales\u sales”类型的块,这是一个网格容器,网格容器自动创建它们的子网格块
因此,缺少的块“report\u sales\u sales.grid”是通过在布局中定义“adminhtml/report\u sales\u sales”块创建的。因为您的页面是新的,所以它的URL在布局XML文件中还没有匹配的部分,所以没有网格容器,所以没有网格。将sales.xml中的
部分复制到您自己的布局文件中,并将其命名为与页面URL匹配的文件
app/design/adminhtml/default/default/layout/sales.xml中的特定布局更新所引发
存储单元ID
按订单创建
订单创建日期
按订单更新
订单更新日期
报告类型
笔记
订单更新日期报告是实时的,不需要刷新统计信息。
sales.report.grid.container
(带有URIadminhtml/report\u sales\u sales
,与类Mage\u adminhtml\u block\u report\u sales\u sales相关)的块添加了一个子块(但不要引用我的话)
更重要的一点是,你在这里的一般方法是好的,但你没有足够的复制。对Magento页面的请求使用布局句柄“adminhtml\u report\u sales\u sales”运行。对页面的请求将使用类似“adminhtml\u report\u index\u sales”的布局句柄运行,这意味着上面的布局块不会加载到系统中。(如果这没有意义,请继续阅读。)
你要么需要
local.xml
执行与上述相同的操作(注意,我不确定local.xml
是否用于管理布局系统)app/design/adminhtml/default/default/layout/sales.xml中的特定布局更新所引发
存储单元ID
按订单创建
订单创建日期
按订单更新
订单更新日期
报告类型
$gridBlock = $this->getLayout()->getBlock('bulx_reports/test');
class BULX_Reports_Block_Test extends Mage_Core_Block_Abstract
{
protected function _toHtml() {
echo 'to html';
}
}