2013-01-19 9 views
5

商品属性セットに属性が存在するかどうかを確認する方法は?製品属性セットに属性が存在するかどうかを確認する方法は? Magento

製品に属性セットの属性があるかどうかを知る必要があります。

は私が持つ属性を取得:

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

attributが設定され、製品の属性に存在する場合、$ attrPricekgディスプレイ:なし値は、製品のために設定されていない場合は、製品 または0に設定した値。

属性が製品属性セットに存在しない場合、$ attrPricekgは0を表示します。これは私の問題です。これを避ける必要があります。その製品の属性が存在しないことを確認したいと思います。

ありがとうございました。

答えて

-3

EDIT:これが正しい答えではありません。

$product->offsetExists('pricekg'); 

Varien_Object::offsetExists() (link)を参照してください。

+0

これは、その属性の値がある場合にのみtrueを返しますか?または、product_entity_attribute_ [type]テーブルにレコードがない場合、magentoは$ _dataのキーにNULL値を入れますか? – beeplogic

+7

これは正解ではありません。 – benmarks

0

は、この方法かもしれないあなたのためのより良いです:

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

+0

最初の解決策は正しく動作しません。私は特定の製品を確認する必要があります。 – user1992779

+0

$ attribute = Mage :: getModel( 'catalog/product') - > load(1) - > getResource() - > getAttribute($ attributeCode);を実行してください。 – freento

+0

またお試しください。 $ attributes = $ product-> getAttributes(); – freento

26

今私は関係なく動作する答えを提供します!

$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

特定の属性が製品に存在するかどうかを確認するには、属性の値が 'null'であってもtrueを返す必要があります。作品

一つの方法は次のとおりです。

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

見つかり:

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

また、もちろん1行で記述することができ

{ //属性が は、ここにコードが存在します}それを少し修正しました: https://github.com/astorm/Pulsestorm/issues/3

+0

これは一般的で全体的に完璧です。属性が存在する場合にのみ属性を削除する必要がありました。既存の属性 '$ installer-> removeAttribute( 'catalog_product'、 'attributecode_to_look_for');を削除します。 –

+0

答えをありがとう。最初の例の条件に閉じ括弧を加えた後、それは機能します! – Zsolti

関連する問題