首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento管理海关销售报告

Magento管理海关销售报告
EN

Stack Overflow用户
提问于 2010-12-21 11:50:18
回答 2查看 4.3K关注 0票数 0

我要开发一个模块来导出产品、订单、客户组合的属性。因此,我认为,与其为此目的修改核心销售报告,不如做一个自定义功能。这些是我所做的步骤,但我无法产生它。为此使用了Magento1.4.1版本。

/var/www/magento141/app/code/core/Mage/Reports/etc/adminhtml.xml下的为菜单添加了这些行。

代码语言:javascript
复制
           <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为筛选条件添加了这些行。

代码语言:javascript
复制
<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下

代码语言:javascript
复制
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)。它不调用读取器网格,而不是只从销售中加载块和栅格。

我搜索了大部分与报告相关的文件,仍然找不到问题。希望你们中的很多人都经历过这样的问题,请任何人告诉我,我在哪里犯了错或者错过了什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-23 15:48:23

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

如果您仍然有问题,请详细介绍您在后台复制的块和模型。希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 01:59:05

您没有命名为'report_sales_ereaders.grid'的块,因为该块是由Magento动态创建的:

代码语言:javascript
复制
// 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:

代码语言:javascript
复制
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)变化

代码语言:javascript
复制
 $gridBlock = $this->getLayout()->getBlock('report_sales_ereaders.grid');      

代码语言:javascript
复制
 $gridBlock = $this->getLayout()->getBlock('report_sales_sales.grid');

因为"report_sales_sales“是块report_sales_sales (Mage_Adminhtml_Block_Report_Sales_Sales)中"_controller”的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4498936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档