2012-06-19 2 views
5

속성을 생성하고 기존 속성 세트에 할당하는 것은 해결 된 문제이지만 속성 세트를 작성하고 기본 및 특정 속성을 채우려는 시도에 문제가 있습니다. 이 사용하는 코드입니다 :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(); 
나는 광고로 initfromSkeleton 방법은 그러나 save() 후, 기본 attribute_set에서 속성을로드 않는다는 것을 통해 디버깅에 의해 확인할 수 있습니다

이 새로운 세트가 비어 있습니다.

집합에 새 특성을 추가 할 수 있으므로 존재하고 올바르게 작성되지만 누락 된 기본 특성으로 인해 SKU, 가격, 이름 등이 모두 필요하므로 사용할 수 없게됩니다.

답변

5

기본 속성 집합을 기반으로 특성 집합을 만드는 문제는 initSkeleton()을 호출하기 전에 한 번만 번 두 번 특성 집합을 저장해야한다는 것을 기억합니다.

나는 더 이상 정확한 이유가 기억이 나지 않습니다. 너무 오래 전입니다. 어쨌든, 여기에 나를 위해 일한 내용은 다음과 같습니다

// 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

감사합니다. Jurgen이 시도해 볼 것입니다. Magento 객체를 수정하기 전에 저장해야하는 다른 인스턴스를 보았습니다. 논리적이지 않지만 확실히 가능합니다! –

+0

나를 두 번 저축하는 것이 내게 진짜 문제였습니다. 답변 해주셔서 감사합니다! – Yorrd

0

이 설치 클래스는 그래서

$oEntitySetup->getEntityTypeId('catalog_product'); 

를 호출 할 수

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 

을 확장 할 필요가주의하시기 바랍니다.

0

저는 Jürgen Thelen의 답변을 사용했습니다.

그러나 나는 새로운 속성 ('catalog_product' '기본') 예 : $ installer-> getAttributeSetId 포함이 라운드 얻는

일반적으로 및 송장 등 기본 옵션 및 옵션 그룹을 가지고 있지 않은 설정 발견 initFromSkeleton()에서

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