2012-06-19 20 views
5

Tạo thuộc tính và gán chúng cho tập hợp thuộc tính hiện tại là một vấn đề được giải quyết nhưng chúng tôi đang gặp sự cố khi cố gắng tạo thuộc tính và điền thuộc tính mặc định và cụ thể là không thành công. Đây là mã được sử dụng:tạo thuộc tính được đặt trong tập lệnh thiết lập Magento

$setup->addAttributeSet('catalog_product', 'women_sizing_denim'); 

$oAttributeSetModel = Mage::getModel("eav/entity_attribute_set") 
     ->load($setup->getAttributeSetId('catalog_product', 'women_sizing_denim')) 
     ->initFromSkeleton($setup->getAttributeSetId('catalog_product', 'default')) 
     ->save(); 

tôi có thể xác minh bằng cách gỡ lỗi thông qua các phương pháp initfromSkeleton không tải các thuộc tính từ attribute_set mặc định như đã quảng cáo, tuy nhiên sau khi save(), các thiết lập mới là trống rỗng.

Việc thêm thuộc tính mới vào tập hợp là có thể, vì vậy nó tồn tại và được tạo chính xác, nhưng các thuộc tính mặc định bị thiếu làm cho nó không thể sử dụng được kể từ SKU, giá, tên, v.v.

Trả lời

5

Tôi nhớ rằng vấn đề với việc tạo tập hợp thuộc tính dựa trên tập thuộc tính mặc định là bạn cần lưu thuộc tính được đặt hai lần, trước khi gọi initSkeleton() và một lần sau đó.

Tôi không nhớ lý do chính xác nữa, quá lâu rồi. Dù sao, đây là những gì làm việc cho tôi:

// Mage_Eav_Model_Entity_Setup 
$oEntitySetup = $this; 
$oEntitySetup->startSetup(); 

$sNewSetName = 'myset'; 
$iCatalogProductEntityTypeId = (int) $oEntitySetup->getEntityTypeId('catalog_product'); 

$oAttributeset = Mage::getModel('eav/entity_attribute_set') 
    ->setEntityTypeId($iCatalogProductEntityTypeId) 
    ->setAttributeSetName($sNewSetName); 

if ($oAttributeset->validate()) { 
    $oAttributeset 
     ->save() 
     ->initFromSkeleton($iCatalogProductEntityTypeId) 
     ->save(); 
} 
else { 
    die('Attributeset with name ' . $sNewSetName . ' already exists.'); 
} 

$oEntitySetup->endSetup(); 
+0

cảm ơn Jurgen, sẽ dùng thử. Tôi đã thấy các trường hợp khác, nơi một đối tượng Magento cần phải được lưu trước khi sửa đổi, nó không hợp lý, nhưng chắc chắn có thể! –

+0

Tiết kiệm hai lần là vấn đề thực sự đối với tôi. Cảm ơn câu trả lời! – Yorrd

0

Xin lưu ý rằng lớp thiết lập cần phải mở rộng

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 

để

$oEntitySetup->getEntityTypeId('catalog_product'); 

có thể được gọi.

0

Tôi đã sử dụng câu trả lời của Jürgen Thelen hoạt động.

Nhưng tôi thấy các thuộc tính mới cài đặt không có các tùy chọn mặc định và lựa chọn nhóm như nói chung và hóa đơn, vv

Vì vậy, để có được vòng này bao gồm $ installer-> getAttributeSetId ('catalog_product', 'mặc định') trong initFromSkeleton()

if($attributeSet->validate()) { 
$attributeSet 
    ->save() 
    ->initFromSkeleton($installer->getAttributeSetId('catalog_product', 'default')) 
    ->save(); 
} else { 
die('Attributeset with name ' . $setName . ' already exists.'); 
}