2010-12-21 109 views
0

我必須開發一個模塊來導出產品,訂單,客戶組合屬性的集合。所以我認爲,不要爲了這個目的修改核心銷售報告,而是更好地進行自定義功能。這些是我做過的步驟,但我無法制作它。用於此的magento 1.4.1版本。Magento管理員自定義銷售報告

/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 /應用/代碼/核心/法師/ 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('report_sales_ereaders.grid'));我只得到布爾(虛假)。它不會調用電子書閱讀器網格,而不是從銷售中繼續加載塊和網格。

我搜索了大部分與報告相關的文件,我仍然無法找出問題所在。 希望你們中的許多人經歷過這些問題,請任何人都可以告訴我在哪裏犯錯或缺少什麼。

回答

1

我在佈局文件中看不到名爲「report_sales_ereaders.grid」的塊,如果這是您要使用的名稱,您應該將「sales.report.grid.container」更改爲「report_sales_ereaders.grid」你的佈局。 getBlock方法使用佈局文件中的name屬性來從中加載塊。

如果仍有問題,請詳細瞭解您在後臺複製的塊和模型。希望這可以幫助。

+0

完美,謝謝。 – Elamurugan 2010-12-24 06:57:25

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(); 
} 

$此 - > _控制器是這裏的關鍵。 然後你在塊中定義它,看到你的sales.xml是「adminhtml/report_sales_sales」。
該塊應該從Mage_Adminhtml_Block_Widget_Grid_Container延伸,你應該定義:: _該塊的contrusctor內部控制器:

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'

,所以你需要一個類也一樣,一d所以你可能要改變「東西」在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」 是 「_controller」 塊「adminhtml/report_sales_sales」 內部Mage_Adminhtml_Block_Report_Sales_Sales)的值。