web-dev-qa-db-fra.com

Comment puis-je obtenir le nom du jeu d'attributs?

J'essaie d'obtenir le nom du jeu d'attributs dans le modèle de vue du produit Magento. Je peux obtenir la valeur d'attribut par $_product->getAttributeText('attribute'), mais comment puis-je obtenir le nom du jeu d'attributs?

Je voudrais afficher un attribut uniquement s'il appartient à un certain ensemble d'attributs.

29
Moon

Chaque fois que vous avez un objet produit, vous pouvez accéder à ses attributs comme suit:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load($product->getAttributeSetId());
$attributeSetName  = $attributeSetModel->getAttributeSetName();

Cela vous donnera le nom de l'ensemble d'attributs, que vous pourrez ensuite comparer en utilisant strcmp:

if(0 == strcmp($attributeSetName, 'My Attribute Set')) {
    print $product->getAttributeText('attribute');
}

J'espère que cela pourra aider!

70
Joseph Mastey

Pour plus de sexualité, vous pouvez le raccourcir à:

$attributeSetName = Mage::getModel('eav/entity_attribute_set')->load($_product->getAttributeSetId())->getAttributeSetName();
24
trish

Essayez le code suivant:

$entityTypeId = Mage::getModel('eav/entity')
                ->setType('catalog_product')
                ->getTypeId();
$attributeSetName   = 'Default';
$attributeSetId     = Mage::getModel('eav/entity_attribute_set')
                    ->getCollection()
                    ->setEntityTypeFilter($entityTypeId)
                    ->addFieldToFilter('attribute_set_name', $attributeSetName)
                    ->getFirstItem()
                    ->getAttributeSetId();
echo $attributeSetId;

Vous trouverez plus d'informations sur l'ensemble d'attributs dans l'article suivant .

Merci

13
MagePsycho

La réponse de Joe nécessite quelques modifications pour que cela fonctionne.

Premièrement, il devrait s'agir de $ _product not $ product, et deuxièmement, il y a un ')' erroné dans la dernière ligne.

Le code suivant devrait être correct:

$attributeSetModel = Mage::getModel("eav/entity_attribute_set");
$attributeSetModel->load($_product->getAttributeSetId());
$attributeSetName = $attributeSetModel->getAttributeSetName();
1
Bit32

La comparaison avec une valeur de texte peut poser problème si les utilisateurs décident de modifier ultérieurement ce texte, ce qui est facile à faire dans Magento pour les ensembles d'attributs. Une autre option consiste à utiliser l'identifiant sous-jacent, qui ne changera jamais.

Vous pouvez l'obtenir en recherchant la valeur de la colonne attribute_set_id dans la base de données à l'aide de 

select * from eav_attribute_set;

Ce numéro est également dans le lien de modification dans admin qui est en gras ci-dessous

http: //.../index.php/admin/catalog_product_set/edit/id/10/key/6fe89fe2221cf2f80b82ac2ae457909ce04c92c51716b3e474ecad672a2ae2f3 /

Votre code utiliserait alors simplement la propriété du produit. Base sur l'id de 10 dans le lien ci-dessus, cela ne serait que

if (10 == $_product->getAttributeSetId()) {
  //Do work
}
0
Andrew Rutter