2011-05-04 84 views
1

我目前正在爲Magento寫一個EPOS集成。當訂單發出時,它的ID被放入隊列文件中。一分鐘後,cron會查看隊列,向EPOS web api發送頂級命令,然後根據結果將ID移至成功列表文件或失敗者文件。Magento網格視圖使用自定義集合

爲了向用戶顯示這些列表的內容,我創建了一個讀取文件(包含序列化數組)的管理頁面,爲每個訂單創建一個varien_object,其中包含訂單ID,客戶名稱和時間戳記,以及然後將所有這些存儲在Varien_Data_collection的實例中。然後將此集合傳遞給grid.php中的_prepareCollection函數以呈現網格視圖。

在1.4.1.1,電網呈現罰款,但分頁被打破,過濾不工作。

在1.3.2.4網格渲染,但是說,有「沒有找到記錄」。

有誰知道這可能是導致這些問題,如果有要去大約從Magento的文件中顯示信息的更好的辦法?

+1

與序列化的文件同步是困難的,所以不可能寫入到頭部和尾部在同一時間。數據庫中的隊列不是表的原因是什麼?一個表可以提供行級鎖,允許同時進行編輯,並且已經可以與管理網格一起使用。過濾和分頁使用SQL來完成,這就是爲什麼它不能使用文件。 – clockworkgeek 2011-05-04 10:31:26

+0

理想情況下,它將在一個數據庫中,從長遠來看,我打算重寫這個模塊。不過,我從前面的開發人員那裏繼承了這些代碼,而且我的公司正在尋找一個快速修復的工具。我同意你的觀點,檔案不是理想的情況。 也許會放棄網格視圖和一個自定義視圖會是一個更好的辦法解決這個問題,如果網格視圖時考慮數據庫中實現? – Geoff 2011-05-04 11:08:05

+1

我想這可能與'addFieldToFilter創建自己的Varien_Data_Collection'的'後代()'和'負載()'的功能,使其與'Varien_Data_Collection_Db'兼容。它需要尊重當前頁面,頁面大小和訂單設置。這聽起來不及「快」,也許有人會用完全模仿數據庫集合的方式回答。 – clockworkgeek 2011-05-04 11:45:06

回答

0

爲什麼你可以看到的條目(1.4+),但不能過濾的原因是,Magento的使用收集API修改的對象。如果您只是將數值從模型中提取出來,那麼沒有什麼大不了的,但是如果您正在搜索和過濾,Magento需要將集合作爲數據庫的一個實例。它使用Varien_Db_Select對象來進行查詢,這些查詢會解析爲原始sql,因此這不適用於數組。

我會建議您嘗試,以應對不同的方式中的數據。

這聽起來像您使用的是平面文件的工作,所以構建一個SQL查詢的顯而易見的解決方案來獲取你的一切將不會削減它。我會嘗試創建一個Zend_Db_Table的實例,並在實時填充值。

事情是這樣的:

class Foo_Bar_Model_Resource_Success_Collection extends Mage_Core_Model_Resource_Db_Abstract 
{ 
    public function _construct() 
    { 
     //declare write adapter in config 
     $table = new Zend_Db_Table('my_db.my_table'); 

     foreach($this->getEposArray() as $entry) 
      $table->insert($entry); 

     $this->_init('my_table', 'id'); 
    } 
} 

誠然,我從來沒有做過什麼很喜歡這一點,但在此之前有過自定義電網濾波器問題突然出現在我身上,要知道,如果你想搜索,你需要將你的數據放在某種表格中。請查看Zend's docs。我很確定在Magento中有這樣的方法,但我無法開始考慮解決方案。

我的建議是,存儲在數據庫中的cron作業的數據,就會使拉把數據傳回了容易得多。

相關問題