2011-05-04 5 views
1

현재 Magento 용 EPOS 통합을 작성 중입니다. 주문이 이루어지면 ID는 대기열 파일에 저장됩니다. 1 분에 한 번 cron이 대기열을보고 EPOS 웹 API에 대한 최상위 순서를 실행 한 다음 결과에 따라 successlist 파일이나 faillist 파일로 ID를 이동합니다.맞춤 컬렉션을 사용하는 Magento 격자보기

이러한 목록의 내용을 사용자에게 표시하기 위해 파일 (직렬화 된 배열 포함)을 읽고, 각 주문의 주문 ID, 고객 이름 및 타임 스탬프를 포함하는 varien_object를 작성하고 그런 다음 이들 모두를 Varien_Data_collection의 인스턴스에 저장합니다. 그런 다음이 컬렉션은 grid.php의 _prepareCollection 함수로 전달되어 격자보기를 렌더링합니다.

1.4.1.1에서는 그리드가 잘 렌더링되지만 페이지 매김이 끊어지고 필터링이 작동하지 않습니다.

1.3.2.4에서 그리드는 렌더링되지만 '레코드 없음'이 표시됩니다.

Magento에서 파일의 정보를 표시하는 더 좋은 방법이 있다면 누가이 문제를 일으킬 수 있는지 알고 있습니까?

+1

직렬화 된 파일과의 동기화가 어렵 기 때문에 동시에 머리와 꼬리에 쓸 수 없습니다. 대기열이 데이터베이스의 테이블이 아닌 이유가 있습니까? 테이블은 행 수준의 잠금을 제공하고 동시 편집을 허용하며 관리자 그리드에서 이미 작동합니다. 필터링 및 페이지 매김은 SQL로 수행되므로 파일과 함께 작동하지 않습니다. – clockworkgeek

+0

이상적으로는 데이터베이스에있을 것이고, 장기적으로이 모듈을 다시 작성할 계획입니다. 그러나 나는이 코드를 이전 개발자로부터 상속 받았으며, 회사는 작동하도록 빠른 수정을 찾고 있습니다. 파일이 이상적인 상황이 아니라는 점에 동의합니다. 그리드보기가 데이터베이스를 염두에두고 구현 된 경우 그리드보기를 포기하고 사용자 지정보기를 사용하는 것이이 문제에 대한 더 나은 접근 방법일까요? – Geoff

+1

'Varien_Data_Collection_Db'과 호환되도록'addFieldToFilter()'와'load()'함수로'Varien_Data_Collection'의 자손을 만들 수 있다고 가정합니다. 현재 페이지, 페이지 크기 및 주문 설정을 존중해야합니다.그것은 "빠른"것보다 덜 들린다. 어쩌면 누군가가 DB 컬렉션을 완전히 모방하는 방법으로 대답 할 것이다. – clockworkgeek

답변

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 작업 데이터를 데이터베이스에 저장하면 훨씬 쉽게 데이터를 가져올 수 있습니다.