2011-03-08 3 views
0

J'ai le code suivant, mais il affiche toutes les options d'attribut. Je veux seulement afficher ceux qui ont été assignés à un produit. Que changerais-je pour le faire?Magento - Comment afficher uniquement les attributs affectés aux produits?

$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $id); 
    foreach ($attribute->getSource()->getAllOptions(true) as $option){ 
     echo $option['label']; 
    } 

Répondre

1

getAllOptions retourne un tableau alors que nous avons besoin d'une collection ou d'une requête pour travailler avec. Cette première partie rejoint cette collection avec la table attributaire correspondante, normalement ce n'est pas une bonne idée de le faire manuellement alors soyez prudent.

$entity = 'catalog_product'; 
/* @var $options Mage_Eav_Model_Mysql4_Entity_Attribute_Option_Collection */ 

$options = Mage::getResourceModel('eav/entity_attribute_option_collection') 
    ->setAttributeFilter($id) 
    ->setStoreFilter(0); 

$options->getSelect()->join(
    array('ints'=>"{$entity}_entity_int"), 
    '(ints.value=store_value.value_id) AND (ints.attribute_id=main_table.attribute_id)', 
    '' 
)->group('option_id'); 

Maintenant, vous pouvez simplement parcourir les options,

/* @var $option Mage_Eav_Model_Entity_Attribute_Option */ 
foreach ($options as $option) { 
    echo $option->getValue(); 
} 

... ou convertir en tableau pour obtenir où vous avez commencé.

foreach ($options->toOptionArray() as $option) { 
    echo $option['label']; 
} 
0

Que diriez-vous ceci:

$product = Mage::getModel("catalog/product")->load(167); 
    foreach ($product->getOptions() as $o) { 

     echo "Custom Option TYPE: " . $o->getType() . "<br/>"; 
     echo "Custom Option TITLE: " . $o->getTitle() . "<br/>"; 
    } 
+0

Cela ne donne aucun résultat. – Chris

Questions connexes