2012-03-24 5 views
0

나는 하루 종일이 작업을 이미 마쳤으므로 명령에 사용자 정의 EAV 속성을 추가 할 가능성이 없어 지므로이 작업을 수행 할 수 없다고 생각합니다. 적어도 sales_order_entity가 누락 된 것으로 나타났습니다.Magento 1.6.2.0 Sales Orders 사용자 정의 속성이 작동하지 않음

글쎄, 내가하려는 것은 판매 주문에 맞춤 입력란을 추가하는 것입니다. 나는 카테고리 제품과 같은 방식으로 작동 할 것이라고 생각했지만, 싫어 보인다. 카탈로그에 제품을 추가하는 사람을 추적하고 특정 사용자 (고객이 아님)와 특정 주문을 연결하려고하기 때문에이 모든 작업을 수행하는 전반적인 요점이 있습니다.

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(
       'seller_id' => array(
        'group'    => 'MyCustom', 
        'label'    => 'Seller ID', 
        'type'    => 'int', 
        'input'    => 'text', 
        'default'   => '0', 
        'class'    => '', 
        'backend'   => '', 
        'frontend'   => '', 
        'source'   => '', 
        'global'   => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE, 
        'visible'   => false, 
        'required'   => true, 
        'user_defined'  => true, 
        'searchable'  => true, 
        'filterable'  => true, 
        'comparable'  => false, 
        'visible_on_front' => false, 
        'visible_in_advanced_search' => false, 
        'unique'   => false, 
       ), 
      ), 
     ), 
     'order' => array(
      'entity_model'  => 'sales/order', 
      'table'    => 'sales/order', 
      'increment_model' => 'eav/entity_increment_numeric', 
      'attributes'  => array(
       'seller_id' => array(
        'group'    => 'MyCustom', 
        'label'    => 'Seller ID', 
        'type'    => 'int', 
        'input'    => 'text', 
        'default'   => '0', 
        'class'    => '', 
        'backend'   => '', 
        'frontend'   => '', 
        'source'   => '', 
        'global'   => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE, 
        'visible'   => false, 
        'required'   => true, 
        'user_defined'  => true, 
        'searchable'  => true, 
        'filterable'  => true, 
        'comparable'  => false, 
        'visible_on_front' => false, 
        'visible_in_advanced_search' => false, 
        'unique'   => false, 
       ), 
      ), 
     ), 
    ); 
} 

이 기능은 제품에는 적용되지만 주문에는 해당되지 않습니다. eav_attribute 테이블에 항목이 필요합니다. 내가 잘못한 일을하고 있거나 이것이 불가능하다는 것을 나는 모른다. 또한 사용자 주문 제품 간의 관계를 추적하기 위해 추가 테이블을 작성하여이 다른 방법을 해결할 생각을했습니다. 이를 위해서는 더 많은 작업이 필요합니다.

아이디어가 있으십니까? 감사합니다. .

답변

3

나는 이것이 오래된 문제라는 것을 알고 있지만 같은 문제에 대한 답을 찾고있을 때 우연히 만났기 때문에 내 해결책을 공유 할 것이라고 생각했습니다.

예를 들어 판매 주문에 특성을 추가 할 수 있습니다. 당신은 코어/마법사/판매를 보면

첫째, 마 젠토 더 이상 사용자, 판매에 대한 실체를 EAV의/etc/config.xml에 sales_entity (EAV), 그것은 지금 시점에서

<sales> 
     <class>Mage_Sales_Model</class> 
     <resourceModel>sales_resource</resourceModel> 
</sales> 

resouceModel 더 이상 포인트 sales_resource (플랫). 당신이 sales_resource 노드의 아이들을 보면, 당신은 주문 노드를 찾을 수 있습니다 :

<order> 
     <table>sales_flat_order</table> 
</order> 

이것은 Mage_Sales_Model_Order이 sales_flat_order의 테이블이 Mage_Sales_Model_Resource_Order의 자원 모델을 가지고 있다는 것을 의미한다.

젠토 개발자는 당신이 EAV 구조에 속성을 추가 한 것입니다 거의 같은 방법으로이 새로운 "플랫"구조에 속성을 추가 할 수 있습니다 클래스 Mage_Sales_Model_Resource_Setup를 제공하고 있습니다. 이제 단순히 Mage_Sales_Model_Resource_Setup의 인스턴스를 얻고 올바른 매개 변수와 공공 addAttribute 메소드를 호출하는 경우라고 볼 수이 정보를

/** 
* Add entity attribute. Overwrited for flat entities support 
* 
* @param int|string $entityTypeId 
* @param string $code 
* @param array $attr 
* @return Mage_Sales_Model_Resource_Setup 
*/ 
public function addAttribute($entityTypeId, $code, array $attr) 
{ 

    if (isset($this->_flatEntityTables[$entityTypeId]) && 
     $this->_flatTableExist($this->_flatEntityTables[$entityTypeId])) 
    { 
     $this->_addFlatAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr); 
     $this->_addGridAttribute($this->_flatEntityTables[$entityTypeId], $code, $attr, $entityTypeId); 
    } else { 
     parent::addAttribute($entityTypeId, $code, $attr); 
    } 
    return $this; 
} 

: 당신이 Mage_Sales_Model_Resource_Setup 내부를 살펴 경우 다음과 같은 기능을 볼 수 있습니다. 판매 주문에 franchise_id 속성을 추가

코드는 : 버전에 대한

$salesResourceSetupModel = Mage::getModel('sales/resource_setup', 'core_setup'); 

$data=array(
    'type'=>'int', 
    'input'=>'text', 
    'label'=>'Franchise', 
    'global'=> 1, 
    'is_required'=>'0', 
    'is_comparable'=>'0', 
    'is_searchable'=>'0', 
    'is_unique'=>'0', 
    'is_configurable'=>'0', 
    'user_defined'=>'1', 
    //whether it should be including in the sales order grid 
    'grid'=>1 
); 

//first param should relate to a key of the protected $_flatEntityTables array 
$salesResourceSetupModel->addAttribute('order', 'franchise_id', $data); 
+0

정말로 감사합니다. – Ivo

0

> 당신이 sales_flat_order 테이블에 열을 만들어야합니다 1.4.1.0. 이 게시물에서 살펴볼 수 있습니다. is magento sales eav

관련 문제