Magento管理员定制销售报告

时间:2010-12-21 11:50:18

标签: magento magento-1.4

我必须开发一个模块来导出产品,订单,客户组合属性的集合。所以我认为而不是为此目的修改核心销售报告,以便更好地进行自定义功能。这些是我做的步骤,但我无法生产它。使用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 ==&gt; //var_dump($this->getLayout()->getBlock('report_sales_ereaders.grid'));我只得到bool(假)。它不会调用ereaders网格,而是仅调用Sales中的静态加载块和网格。

我搜索了大部分与报告相关的文件,但仍然无法找到问题所在。 希望你们中的许多人经历过这些问题,请有人能告诉我哪里弄错了或遗失了什么。

2 个答案:

答案 0 :(得分:1)

我没有在您的布局文件中看到名为“report_sales_ereaders.grid”的块,如果这是您要使用的名称,则应将“sales.report.grid.container”更改为“report_sales_ereaders.grid”。布局。 getBlock方法使用布局文件中的name属性来加载块。

如果仍有问题,请详细了解您在后台复制的块和模型。希望这有帮助。

答案 1 :(得分:1)

您没有名为'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-&gt; _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)的块:

'something / 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”的值。