我要开发一个模块来导出产品、订单、客户组合的属性。因此,我认为,与其为此目的修改核心销售报告,不如做一个自定义功能。这些是我所做的步骤,但我无法产生它。为此使用了Magento1.4.1版本。
/var/www/magento141/app/code/core/Mage/Reports/etc/adminhtml.xml下的为菜单添加了这些行。
<ereaders translate="title" module="reports">
<title>Sales Report</title>
<children>
<ereaders translate="title" module="reports">
<title>Sales Report</title>
<action>adminhtml/report_sales/ereaders</action>
</ereaders>
</children>
</ereaders>在下
/var/www/magento141/app/design/adminhtml/default/default/layout/sales.xml为筛选条件添加了这些行。
<adminhtml_report_sales_ereaders>
<update handle="report_sales"/>
<reference name="content">
<block type="adminhtml/report_sales_sales" template="report/grid/container.phtml" name="sales.report.grid.container">
<block type="adminhtml/store_switcher" template="report/store/switcher/enhanced.phtml" name="store.switcher">
<action method="setStoreVarName"><var_name>store_ids</var_name></action>
</block>
<block type="sales/adminhtml_report_filter_form_order" name="grid.filter.form">
----
</block>
</block>
</reference>
</adminhtml_report_sales_ereaders>然后从销售中复制所需的块、模型文件,并将它们重命名为/var/www/magento141/app/code/core/Mage/Adminhtml/.下的读取器。
然后将阅读器的操作置于/var/www/magento141/app/code/core/Mage/Adminhtml/controllers/Report/SalesController.php下
public function ereadersAction()
{
$this->_title($this->__('Reports'))->_title($this->__('Sales'))->_title($this->__('EReaders Sales'));
$this->_showLastExecutionTime(Mage_Reports_Model_Flag::REPORT_ORDER_FLAG_CODE, 'ereaders');
$this->_initAction()
->_setActiveMenu('report/sales/ereaders')
->_addBreadcrumb(Mage::helper('adminhtml')->__('EReaders Sales Report'), Mage::helper('adminhtml')->__('EReaders Sales Report'));
$gridBlock = $this->getLayout()->getBlock('report_sales_ereaders.grid');
$filterFormBlock = $this->getLayout()->getBlock('grid.filter.form');
$this->_initReportAction(array(
$gridBlock,
$filterFormBlock
));
$this->renderLayout();
}在这里,当我使用//var_dump($this->getLayout()->getBlock('report_sales_ereaders.grid'));var_dump ==>时,只会得到bool(false)。它不调用读取器网格,而不是只从销售中加载块和栅格。
我搜索了大部分与报告相关的文件,仍然找不到问题。希望你们中的很多人都经历过这样的问题,请任何人告诉我,我在哪里犯了错或者错过了什么。
发布于 2010-12-23 15:48:23
我在布局文件中没有看到一个名为"report_sales_ereaders.grid“的块,如果这是您想要使用的名称,您应该将布局中的"sales.report.grid.container”更改为"report_sales_ereaders.grid“。getBlock方法使用布局文件中的name属性来加载块。
如果您仍然有问题,请详细介绍您在后台复制的块和模型。希望这能有所帮助。
发布于 2012-03-15 01:59:05
您没有命名为'report_sales_ereaders.grid'的块,因为该块是由Magento动态创建的:
// class Mage_Adminhtml_Block_Widget_Grid_Container
protected function _prepareLayout()
{
$this->setChild( 'grid',
$this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
$this->_controller . '.grid')->setSaveParametersInSession(true) );
return parent::_prepareLayout();
}$this->_控制器是这里的关键。然后在块中定义它,看到sales.xml是"adminhtml/report_sales_sales“。
该块应该从Mage_Adminhtml_Block_Widget_Grid_Container,扩展而来,您应该在该块的收缩器内定义::_controller:
public function __construct()
{
$this->_blockGroup = 'something';
$this->_controller = 'report_sales_ereaders'; // THIS !!!
parent::__construct();
... // see a similar block from magento
}另外,从上面的第一段代码(_prepareLayout)中还可以注意到,Mage_Adminhtml_Block_Widget_Grid_Container将尝试使用一个名为(Uri)的块:
'something/report_sales_ereaders_grid'
因此,您也需要这个类,因此您可能希望用yout config.xml中<blocks>下的节点来更改“东西”。
该块将具有名称(在布局中):"report_sales_ereaders.grid“
因此,根据您想要做的事情,您在这里有两个选择:
1)在sales.xml布局中更改块的类型,因此它指向您自己的块(您在那里定义了我在上面展示的"_controller“,等等)。
2)变化
$gridBlock = $this->getLayout()->getBlock('report_sales_ereaders.grid'); 至
$gridBlock = $this->getLayout()->getBlock('report_sales_sales.grid');因为"report_sales_sales“是块report_sales_sales (Mage_Adminhtml_Block_Report_Sales_Sales)中"_controller”的值。
https://stackoverflow.com/questions/4498936
复制相似问题