Пользовательский отчет о продажах Magento Admin - PullRequest
0 голосов
/ 21 декабря 2010

Мне нужно разработать модуль для экспорта коллекции атрибутов продукта, заказа, клиента. Поэтому я подумал, а не модифицировать основной отчет о продажах для этой цели, чтобы сделать пользовательский функционал. Это шаги, которые я сделал, но я не в состоянии произвести это. Для этого использовалась версия 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>

Под

/ вар / WWW / magento141 / приложение / дизайн / adminhtml / по умолчанию / по умолчанию / макет / 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>

А затем скопировал нужный блок, смоделировал файлы из продаж и переименовал их все в 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 ==> //var_dump($this->getLayout()->getBlock( areport_sales_ereaders.grid ')); получаю только bool (false). Он не вызывает сетку ereaders вместо своих по-прежнему загружаемых блоков и сеток только из Sales.

Я искал большинство файлов, связанных с отчетом, но все еще не могу найти проблему. Надеюсь, что многие из вас прошли через такие проблемы, пожалуйста, кто-нибудь может сказать мне, где я делаю ошибку или что-то упустил.

Ответы [ 2 ]

1 голос
/ 15 марта 2012

У вас нет блока с именем '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 , и вы должны определить :: _ контроллер в конструкторе этогоblock:

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'

поэтому вам также нужен этот класс, и, следовательно, вы, вероятно, захотите изменить «что-то» с узлом, используемым в файле 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» - это значение «_controller» внутри блока «adminhtml / report_sales_sales» (Mage_Adminhtml_Block_Report_Sales_Sales).

1 голос
/ 23 декабря 2010

Я не вижу блок с именем "report_sales_ereaders.grid" в вашем файле макета, если это имя, которое вы хотите использовать, вам следует заменить "sales.report.grid.container" на "report_sales_ereaders.grid" в вашем файле раскладка. метод getBlock использует атрибут name в файле макета для загрузки блоков из.

Если у вас все еще есть проблемы, попробуйте подробнее рассказать о блоках и моделях, которые вы скопировали в фоновом режиме. надеюсь, это поможет.

...