Как проверить, существует ли атрибут в атрибуте продукта? Magento

Как проверить, существует ли атрибут в атрибуте продукта?

Мне нужно знать, есть ли у продукта атрибут для его набора атрибутов.

Я получаю атрибут с помощью:

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

Если атрибут существует в наборе атрибутов продукта, отображение $attrPricekg: заданное значение для продукта или 0, если для продукта не установлено значение.

Если атрибут не существует в наборе атрибутов продукта, отображается значение $attrPricekg 0. Это моя проблема. Мне нужно избегать этого, я хочу проверить, что атрибут не существует для этого продукта.

Спасибо.

4 ответа

EDIT: это не правильный ответ.

$product->offsetExists('pricekg');

См. Varien_Object::offsetExists() (ссылка).


теперь я дам ответ, который работает независимо!

$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
}


Чтобы проверить, существует ли в продукте определенный атрибут, он должен возвращать true, даже если атрибут имеет значение "null".

Один из способов:

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

{       // атрибут существует код здесь   }

Можно также, конечно, записать в одну строку:

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

Нашел и немного изменил: https://github.com/astorm/Pulsestorm/issues/3


Может быть, так лучше для вас:

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

Также вы можете попробовать

$attributes = $product->getAttributes();

Но вы можете проверить все в коллекции атрибутов:

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

Может быть, исходный код нуждается в некоторых исправлениях, но я думаю, вы поймете эту идею.

См. еще несколько примеров, также - http://www.blog.magepsycho.com/playing-with-attribute-set-in-magento/

licensed under cc by-sa 3.0 with attribution.