2011-12-19 3 views
3

나는 catalog_product_collection_load_after에 관찰자를 설정 한 다음 코드가 호출됩니다 : 당신이 볼 수 있듯이젠토 AddAttributeToSelect() 사용자 정의 추가 속성 (관찰자)에

<?php 
class Drench_Admindetails_Model_Observer { 
    public function loadAfter($observer){ 
     $collection = $observer->getEvent()->getCollection(); 
     $collection->addAttributeToFilter('admin_id', Mage::getSingleton('admin/session')->getUser()->getUserId()); 
     foreach($collection as $item) { 
      fb($item->getAdminId()); //fb() is a firebug call 
     } 
     return $this; 
    } 
} 

, 나는, admin_id에 컬렉션을 필터링하고있는 다음 설치 스크립트 (namespace/module/Resource/Eav/Mysql4/Setup.php)를 통해 만들었습니다.

<?php 

class Drench_Admindetails_Resource_Eav_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup 
{ 
    public function getDefaultEntities() 
    { 
     return array(
      'catalog_product'      => array (
       'entity_model'      => 'catalog/product', 
       'attribute_model'     => 'catalog/resource_eav_attribute', 
       'table'        => 'catalog/product', 
       'additional_attribute_table'   => 'catalog/eav_attribute', 
       'entity_attribute_collection'  => 'catalog/product_attribute_collection', 
       'attributes'       => array (
        'admin_id'      => array (
         'group'      => '', 
         'label'      => '', 
         'type'      => 'int', 
         'input'      => '', 
         'default'     => '0', 
         'class'      => '', 
         'backend'     => '', 
         'frontend'     => '', 
         'source'      => '', 
         'global'      => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE, 
         'visible'     => false, 
         'required'     => false, 
         'user_defined'    => false, 
         'searchable'     => false, 
         'filterable'     => false, 
         'comparable'     => false, 
         'visible_on_front'   => false, 
         'visible_in_advanced_search' => false, 
         'unique'      => false 
        ) 
       ) 
      ) 
     ); 
    } 
} 

이 속성은 제품을 추가 한 관리자를 저장합니다. 그러나 컬렉션은 admin_id에서 필터링되지 않고 관찰자 메서드의 foreach() 루프에서 admin_id이 반환되는 대신 NULL이 반환됩니다.

왜 작동하지 않는지에 대한 아이디어가 있습니까?

+0

admin_id는 배열입니까? ... 당신의 설정대로? – Nasaralla

+0

아니요, admin_id는 'int'입니다. magento EAV 속성으로 catalog_product에 추가했습니다. –

+0

필자가 아는 바는 int 형으로 추가 되었기 때문에 (배열에 int 형의 이유는 무엇인가?) 나는 magento 개발에 익숙하지 않기 때문에 틀렸다면 수정해라. 튜토리얼 : http://www.magentocommerce.com/wiki/5_-_modules_and_development/catalog/programmatically_adding_attributes_and_attribute_sets –

답변

5

모음을로드 한 후에는 필터링 할 수 없습니다. 대신 catalog_product_collection_load_before 이벤트를 사용하십시오. 이 시점에서 컬렉션을 반복하려고하면 동일한 이벤트가 호출되어 무한 재귀가 시작되어 나쁜 결과를 초래할 수 있습니다.

used_in_product_listingtrue으로 설정되어 있지 않으면 admin_id 속성이 제품 목록의 선택된 열에 추가되지 않을 것입니다. 로드 이벤트 이전에 $collection->addAttributeToSelect('admin_id')을 사용하여 성공할 수도 있습니다.

+0

나쁘다.이 제품은 관리 백엔드 (제품 관리)에만 사용된다는 점을 잊어 버렸지 만, 전에, 그것을 보여주지 않을 것입니다. 이제 절대적으로 작동합니다! 매우 감사합니다! –