7

如何检查产品属性集中是否存在属性?

我需要知道产品是否具有其属性集的属性。

我得到的属性是:

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

如果产品属性集中存在属性,则 $attrPricekg 显示:为产品设置值,如果没有为产品设置值,则显示 0。

如果该属性在产品属性集中不存在,则 $attrPricekg 显示 0。这是我的问题。我需要避免这种情况,我想检查该产品的属性是否不存在。

谢谢。

4

4 回答 4

28

现在我将提供一个无论如何都有效的答案!

$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
}
于 2013-01-19T17:11:15.633 回答
6

要检查产品中是否存在特定属性,即使该属性的值为“null”,它也应该返回 true。

一种有效的方法是:

$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

于 2014-01-12T12:12:01.730 回答
-1

可能这种方式对你更好:

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

于 2013-01-19T12:21:06.430 回答
-3

编辑:这不是正确的答案。

$product->offsetExists('pricekg');

Varien_Object::offsetExists()(链接)

于 2013-01-19T13:43:04.317 回答