2010-10-19 52 views
1

我試圖在Magento後端創建一個自定義報告;我的策略是首先讓我的新模塊在管理面板中模擬現有的Reports/Sales/Orders功能,然後在看到這些部分如何組合在一起後進行所需的更改。我添加了我的新菜單項,並且該模塊加載了基本的管理佈局和一些麪包屑,因此模塊配置和控制器配置設置得當。但是,佈局塊未加載。這是問題代碼。假設我有相關的塊文件的副本,在應用程序/代碼/本地/ BULX /報告/座/報告/銷售/銷售/ Grid.php:爲新的管理模塊配置Magento佈局

class BULX_Reports_IndexController extends Mage_Adminhtml_Report_SalesController { 

    public function salesAction { 

    //...otherwise identical to parent class 

    //should load reference to Grid block 
    $gridBlock = $this->getLayout()->getBlock('report_sales_sales.grid'); 

    /* in original Mage module, will output Mage_Adminhtml_Block_Report_Sales_Sales_Grid 
    in BULX_Report, outputs nothing. */ 
    echo get_class($gridBlock)."<br>"; 

我的配置文件有

<global> 
    <blocks> 
    <bulx_reports> 
     <class>BULX_Reports_Block</class> 
    </bulx_reports> 
    </blocks> 
    ... 
</global> 

如果我更改代碼以

$gridBlock = $this->getLayout()->getBlock('bulx_reports/test'); 

與應用程序/代碼以下文件/本地/ BULX /報告/座/ test.php的

class BULX_Reports_Block_Test extends Mage_Core_Block_Abstract 
{ 
protected function _toHtml() { 
    echo 'to html'; 
} 
} 

我得到了相同的結果:不「HTML」輸出,無論從get_class通話

我添加日誌報表輸出這裏建議: http://www.fontis.com.au/blog/magento/magento-debugging-loading-blocks-layouts-and-config-files

,很明顯從Magento的不在我的新模塊中查找任何佈局塊。 Alan Storm的教程通常非常有幫助,但我沒有在alanstorm.com/magento_admin_controllers中找到我需要的東西(對不起,沒有足夠的聲望有兩個超鏈接);據我所知,我已經設置了相同的配置。難點在於'report_sales_sales.grid'字符串不會出現在任何地方 - 這些網格出現在管理員的很多地方,並且它們是通過我沒有找到的結構動態構建的。

我錯過了什麼?這是企業版1.8。謝謝!

回答

4
  1. 一般的PHP調試提示,從來沒有「回聲」瀏覽器,總是var_dump($ var)。這會做一些聰明的事情,比如實際上打印出「假」而不是空白字符串,這是我認爲在這裏發生的事情。

  2. 試圖獲取名爲「report_sales_sales.grid」的塊很可能返回false。這是因爲這個名稱的塊沒有被添加到佈局。

  3. 我不能肯定,但我的猜測是此名稱的塊地方加入由特定的佈局更新掀起執行鏈中app/design/adminhtml/default/default/layout/sales.xml

    store_ids created_at_order 訂單創建日期 updated_at_order Order Upda ted日期 report_type 說明 訂單更新日期報表是實時的,不需要統計刷新。

最有可能的,塊名爲sales.report.grid.container(與URI adminhtml/report_sales_sales這coresponds到類Mage_Adminhtml_Block_Report_Sales_Sales)增加了一個子塊(但不可以引用我這句話)

更大的一點是,你在這裏的一般方法是好的,但你沒有足夠的複製。使用佈局句柄「adminhtml_report_sales_sales」運行對Magento頁面的請求。對頁面的請求將使用類似「adminhtml_report_index_sales」的佈局處理來運行,這意味着上述佈局塊不會加載到系統中。 (如果這樣做毫無意義,對Layout Handles讀了。)

你要麼需要

  1. 配置您的模塊來使用,增加了塊你把手

  2. 使用自定義佈局文件一個local.xml做同樣的(注意,我不確定local.xml是用於管理佈局系統)

  3. 在您的控制器操作中實際添加所需的塊。

+0

管理員佈局手柄是否始終必須以adminhtml開頭?也許這是我的問題:我的句柄執行bulxreport_index_sales,但也許它應該是adminhtml_bulxreport_index_sales。但是,這似乎也不起作用。不幸的是,我不得不把它擱置幾天,並且不能再補充幾次 – kevinpaulconnor 2010-10-26 12:57:48

3

檢查文件app/design/adminhtml/default/default/layout/sales.xml的部分<adminhtml_report_sales_sales> - 它與請求的URL匹配。它有一個類型爲「adminhtml/report_sales_sales」的塊,它是一個網格容器,網格容器自動創建它們的子網格塊。

所以缺少的塊「report_sales_sales.grid」是通過在佈局中定義「adminhtml/report_sales_sales」塊創建的。由於你的頁面是新的,它的URL在佈局XML文件中還沒有匹配的部分,所以沒有網格容器,所以沒有網格。將sales.xml中的<adminhtml_report_sales_sales>部分複製到您自己的佈局文件中,並將其命名爲與您的頁面URL匹配。

+0

好的,這是有道理的。我在模塊配置中定義了bulxreports.xml,並將adminhtml_report_sales_sales部分複製到其中,並將其重命名爲bulxreports_index_sales,但沒有任何效果。我應該重新命名傳遞給getBlock的參數以匹配url嗎?我還能找什麼? – kevinpaulconnor 2010-10-19 17:21:57

+0

嘗試從Alanstorm.com安裝LayoutViewer,它會告訴您在當前請求中使用哪些佈局句柄。或者他的商業擴展。 – 2010-10-21 23:40:58

+0

LayoutViewer非常棒,我經常在前端使用它。我沒有意識到它在管理面板中的作用 - 謝謝。 – kevinpaulconnor 2010-10-26 12:56:54