2013-01-19 18 views
5

Wie überprüft man, ob ein Attribut in der Produktattributmenge existiert?Wie überprüft man, ob ein Attribut in der Produktattributmenge existiert? Magento

Ich muss wissen, ob ein Produkt ein Attribut für seinen Satz von Attributen hat.

ich das Attribut mit:

$attrPricekg = Mage::getModel('catalog/product')->load($_product->getId())->getPricekg(); 

Wenn Ausprägungs in Produkt Attribute existieren gesetzt, $ attrPricekg Anzeige: Sollwert für das Produkt oder 0, wenn kein Wert für das Produkt festgelegt.

Wenn das Attribut nicht im Produktattributsatz vorhanden ist, wird $ attrPricekg angezeigt 0. Dies ist mein Problem .. Ich muss dies vermeiden, ich möchte überprüfen, dass das Attribut für dieses Produkt nicht existiert.

Danke.

Antwort

-3

EDIT: Dies ist nicht die richtige Antwort ist.

$product->offsetExists('pricekg'); 

Siehe Varien_Object::offsetExists() (link).

+0

Wird nur true zurückgegeben, wenn für dieses Attribut ein Wert vorhanden ist? Oder fügt Magento einen Schlüssel in $ _data mit einem NULL-Wert ein, wenn in den product_entity_attribute_ [type] -Tabellen kein Datensatz vorhanden ist? – beeplogic

+7

Dies ist nicht die richtige Antwort. – benmarks

0

Kann sein, diese Art und Weise ist besser für Sie:

$attribute = Mage::getModel('catalog/product')->load($productId)->getResource()->getAttribute($attributeCode); 
if ($attribute && $attribute->getId()) { ... } 

Auch Sie können versuchen

$attributes = $product->getAttributes(); 

Sie können aber alle in Attributsammlung überprüfen:

$entityTypeId = Mage::getModel('eav/entity') 
      ->setType('catalog_product') 
      ->getTypeId(); 
$attributeId = 5; 
$attributeSetName = 'Default'; 
$attributeSetId  = Mage::getModel('eav/entity_attribute') 
       ->getCollection() 
       ->addFieldToFilter('entity_type_id', $entityTypeId) 
       ->addFieldToFilter('attribute_set_name', $attributeSetName) 
       ->addFieldToFilter('attribute_id', $attributeId) 
       ->getFirstItem(); 

Quelle sein kann Code braucht einige Korrekturen, aber ich denke, Sie werden die Idee verstehen.

Sehen Sie einige weitere Beispiele hier auch - http://www.blog.magepsycho.com/playing-with-attribute-set-in-magento/

+0

Die erste Lösung funktioniert nicht richtig. Ich muss nach einem bestimmten Produkt suchen. – user1992779

+0

Versuchen Sie $ attribute = Mage :: getModel ('Katalog/Produkt') -> load (1) -> getResource() -> getAttribute ($ attributeCode); – freento

+0

können Sie auch versuchen $ attributes = $ product-> getAttributes(); – freento

26

jetzt werde ich eine Antwort geben, die unabhängig funktioniert!

5

Um zu überprüfen, ob ein bestimmtes Attribut im Produkt vorhanden ist, sollte es auch dann true zurückgeben, wenn das Attribut den Wert 'null' hat.

Eine Möglichkeit, die funktioniert, ist:

$attr = Mage::getModel('catalog/resource_eav_attribute')->loadByCode('catalog_product',$code); 
if (null!==$attr->getId()) 

{ // Attribut existiert Code hier }

Es kann natürlich auch in einer Zeile geschrieben werden:

if(null!===Mage::getModel('catalog/resource_eav_attribute')->loadByCode('catalog_product','attributecode_to_look_for')->getId()) { 
    //'attributecode_to_look_for' exists code here 
} 

gefunden es und ein bisschen geändert auf: https://github.com/astorm/Pulsestorm/issues/3

+0

dieser ist allgemein und insgesamt perfekt. Ich brauchte das, um ein Attribut nur zu entfernen, wenn es existiert. um das vorhandene Attribut '$ installer-> removeAttribute ('catalog_product', 'attributecode_to_look_for') zu entfernen;' simple. –

+0

Danke für die Antwort. Nach dem Hinzufügen einer schließenden Klammer zum Zustand des ersten Beispiels funktioniert es! – Zsolti