使用自定义集合的Magento网格视图

时间:2011-05-04 09:41:54

标签: php magento grid adminhtml

我目前正在为Magento编写EPOS集成。订单生成时,它的ID放在队列文件中。每分钟一次,cron查看队列,将最高顺序激活到EPOS web api,然后将ID移动到successlist文件或faillist文件,具体取决于结果。

为了向用户显示这些列表的内容,我创建了一个读取文件(包含序列化数组)的管理页面,创建了一个varien_object,其中包含每个订单的订单ID,客户名称和时间戳,然后将所有这些存储在Varien_Data_collection的实例中。然后将此集合传递给grid.php中的_prepareCollection函数,以呈现网格视图。

在1.4.1.1中,网格呈现正常,但分页被破坏,过滤不起作用。

在1.3.2.4中,网格呈现但是表示“找不到记录”。

有没有人知道可能导致这些问题的原因,以及是否有更好的方法来显示Magento中文件的信息?

1 个答案:

答案 0 :(得分: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作业数据存储在数据库中,这样可以更轻松地将数据拉回来。