2013-01-19 26 views
5

Jak sprawdzić, czy atrybut istnieje w zestawie atrybutów produktu?Jak sprawdzić, czy atrybut istnieje w zestawie atrybutów produktu? Magento

Muszę wiedzieć, czy produkt ma atrybut dla swojego zestawu atrybutów.

uzyskać atrybut z:

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

Jeśli Attribut istnieć w ustawionym atrybutem produktu, $ attrPricekg wyświetlacza: ustawić wartość dla produktu lub 0 w przypadku braku wartości ustawionej dla tego produktu.

Jeśli atrybut nie istnieje w zestawie atrybutów produktu, $ attrPricekg wyświetla 0. To jest mój problem .. Muszę tego uniknąć, chcę sprawdzić, czy atrybut nie istnieje dla tego produktu.

Dzięki.

Odpowiedz

-3

EDIT: to nie jest prawidłowa odpowiedź.

$product->offsetExists('pricekg'); 

Zobacz Varien_Object::offsetExists() (link).

+0

Czy będzie to prawdziwe tylko wtedy, gdy istnieje wartość tego atrybutu? A może Magento umieścił klucz w $ _data z wartością NULL, gdy nie ma rekordu w tabelach product_entity_attribute_ [type]? – beeplogic

+7

To nie jest poprawna odpowiedź. – benmarks

0

Może w ten sposób jest dla was lepsze:

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

Również można spróbować

$attributes = $product->getAttributes(); 

Ale można sprawdzić wszystko w kolekcji atrybut:

$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(); 

Może być źródłem kod wymaga pewnych poprawek, ale myślę, że zrozumiesz ten pomysł.

Zobacz kilka więcej przykładów tu również - http://www.blog.magepsycho.com/playing-with-attribute-set-in-magento/

+0

Pierwsze rozwiązanie nie działa poprawnie. Muszę sprawdzić konkretny produkt. – user1992779

+0

Spróbuj zrobić $ atrybut = Mag :: getModel ("katalog/produkt") -> load (1) -> getResource() -> getAttribute ($ attributeCode); – freento

+0

również możesz spróbować $ attributes = $ product-> getAttributes(); – freento

26

teraz udzielę odpowiedzi, która działa niezależnie!

$product = Mage::getModel('catalog/product')->load(16); 

$eavConfig = Mage::getModel('eav/config'); 
/* @var $eavConfig Mage_Eav_Model_Config */ 

$attributes = $eavConfig->getEntityAttributeCodes(
    Mage_Catalog_Model_Product::ENTITY, 
    $product 
); 

if (in_array('pricekg',$attributes)) { 
    // your logic 
} 
5

Aby sprawdzić, czy określony atrybut istnieje w produkcie, powinien zwrócić wartość true, nawet jeśli atrybut ma wartość "null".

Jednym ze sposobów, że działa to:

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

{ // atrybut istnieje kod tutaj }

Można też oczywiście być napisane w jednym wierszu:

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

Found zmodyfikowano go nieco na: https://github.com/astorm/Pulsestorm/issues/3

+0

ten jest ogólny i ogólnie doskonały. Potrzebowałem tego, aby usunąć atrybut tylko wtedy, gdy istnieje. aby usunąć istniejące atrybuty '$ installer-> removeAttribute (" katalog_produktu "," attributecode_to_look_for ");' proste. –

+0

Dzięki za odpowiedź. Po dodaniu nawiasu zamykającego do stanu pierwszego przykładu działa! – Zsolti