2012-06-19 13 views
5

Tworzenie atrybutów i przypisywanie ich do istniejących zestawów atrybutów jest rozwiązanym problemem, ale napotkaliśmy problem podczas próby utworzenia zestawu atrybutów i wypełnienia go domyślnymi i specyficznymi atrybutami. Jest to kod używany:utwórz zestaw atrybutów w skrypcie instalacyjnym 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(); 

mogę zweryfikować przez debugowanie przez że metoda initfromSkeleton jest ładowany atrybuty z domyślnej attribute_set jak w reklamie, jednak po save(), nowy zestaw jest pusty.

Dodawanie nowych atrybutów do zestawu jest możliwe, więc istnieją i są tworzone poprawnie, ale brakujące domyślne atrybuty sprawiają, że jest on bezużyteczny, ponieważ wymagane są: kod SKU, cena, nazwa itp.

Odpowiedz

5

Pamiętam, że problem z tworzeniem zestawów atrybutów w oparciu o atrybut domyślny zestaw był taki, że trzeba zapisać atrybut ustawiony dwukrotnie, raz przed wywołaniem initSkeleton() i raz po niej.

Nie pamiętam już dokładnego powodu, zbyt dawno temu. W każdym razie, oto co pracował dla mnie:

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

dzięki Jurgen, spróbuję. Widziałem inne przypadki, w których obiekt Magento musiał zostać zapisany przed modyfikacjami, nie jest logiczny, ale zdecydowanie możliwy! –

+0

Dwukrotne uratowanie było dla mnie prawdziwym problemem. Dziękuję za odpowiedź! – Yorrd

0

Proszę zauważyć, że klasa konfiguracja musi rozszerzyć

Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 

tak że

$oEntitySetup->getEntityTypeId('catalog_product'); 

można nazwać.

0

Użyłem odpowiedzi Jürgena Thelena, która zadziałała.

Ale znalazłem nowy zestaw atrybutów nie ma opcji domyślnych i opcji grupę takich jak ogólne i faktura itp

Tak, aby ominąć ten obejmuje $ installer-> getAttributeSetId („catalog_product”, „default”) w initFromSkeleton()

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