Magento管理员自定义销售报告

我必须开发一个模块来导出产品,订单,客户组合属性的集合。所以我认为而不是为此目的修改核心销售报告,以便更好地进行自定义功能。这些是我做的步骤,但我无法生产它。使用magento 1.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 /中的ereaders。 然后在/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 ==> //var_dump($this->getLayout()->getBlock('report_sales_ereaders.grid'));我只得到bool(假)。它不会调用ereaders网格,而是仅调用Sales中的仍然加载块和网格。 我搜索了大部分与报告相关的文件,但仍然无法找到问题所在。 希望你们中的许多人经历过这些问题,请有人能告诉我哪里弄错了或遗失了什么。     
已邀请:
我没有在您的布局文件中看到名为“report_sales_ereaders.grid”的块,如果这是您要使用的名称,则应在布局中将“sales.report.grid.container”更改为“report_sales_ereaders.grid”。 getBlock方法使用布局文件中的name属性来加载块。 如果仍有问题,请详细了解您在后台复制的块和模型。希望这可以帮助。     
您没有名为“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 - > _ controller是关键。 然后在块中定义它,看看你的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)的块: '东西/ report_sales_ereaders_grid' 所以你也需要那个类,因此你可能想用
<blocks>
下的yout config.xml中使用的节点改变“某事” 该块将具有名称(在布局中):“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”是块“adminhtml / report_sales_sales”(
Mage_Adminhtml_Block_Report_Sales_Sales
)中“_controller”的值。     

要回复问题请先登录注册