82 votes

Obtenir la valeur d'un attribut de produit Magento

Comment obtenir la valeur d'un attribut de produit spécifique si je connais l'ID du produit sans charger le produit entier ?

1 votes

Ce n'est pas une bonne réponse, mais vous pourriez créer un modèle qui interroge directement les tables appropriées :)

141voto

Daniel Kocherga Points 504
Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);

1 votes

Comment obtenir le texte de l'option ? quelqu'un le sait-il ?

2 votes

Pour ceux à qui cela importe : cette méthode n'est disponible qu'en 1.6+.

40voto

Lucas Moeskops Points 3200

Un moyen que je connais :

$product->getResource()->getAttribute($attribute_code)
        ->getFrontend()->getValue($product)

3 votes

Merci. C'est ce que je cherchais.

4 votes

Je suis nouveau sur Magento pourquoi utiliser $product deux fois ?

29 votes

@Mr_Green Parce que c'est Magento. Aucun "pourquoi" ne reçoit de réponse raisonnable.

26voto

vishal Points 388

Vous pouvez utiliser

<?php echo $product->getAttributeText('attr_id')  ?>

2 votes

Ce code fonctionne bien. J'ai cherché beaucoup de blog mais aucun code n'a fonctionné pour moi sauf celui-ci. Vraiment bien.

3 votes

Ce code ne fonctionne que lorsque le modèle de produit contient la valeur de l'attribut, lorsque vous ne connaissez que l'id du produit, cela ne fonctionnera pas.

1 votes

Cela fonctionne pour les attributs comme les listes déroulantes, mais si l'attribut est un simple champ de texte, une fonction différente est nécessaire. Si l'attribut est mon_nom, le code devient $product->getMyName().

8voto

azakolyukin Points 811

Il semble impossible d'obtenir une valeur sans charger le modèle du produit. Si vous jetez un coup d'oeil au fichier app/code/core/Mage/Eav/Model/Entity/Attribute/Frontend/Abstract.php vous verrez la méthode

public function getValue(Varien_Object $object)
{
    $value = $object->getData($this->getAttribute()->getAttributeCode());
    if (in_array($this->getConfigField('input'), array('select','boolean'))) {
        $valueOption = $this->getOption($value);
        if (!$valueOption) {
            $opt = new Mage_Eav_Model_Entity_Attribute_Source_Boolean();
            if ($options = $opt->getAllOptions()) {
                foreach ($options as $option) {
                    if ($option['value'] == $value) {
                        $valueOption = $option['label'];
                    }
                }
            }
        }
        $value = $valueOption;
    }
    elseif ($this->getConfigField('input')=='multiselect') {
        $value = $this->getOption($value);
        if (is_array($value)) {
            $value = implode(', ', $value);
        }
    }
    return $value;
}

Comme vous pouvez le voir, cette méthode requiert un objet chargé pour en récupérer les données (3ème ligne).

5voto

Sveta Oksen Points 101

Nous devons d'abord nous assurer que l'attribut souhaité est chargé, puis l'éditer. Utilisez ceci :

$product = Mage::getModel('catalog/product')->load('<product_id>', array('<attribute_code>'));
$attributeValue = $product->getResource()->getAttribute('<attribute_code>')->getFrontend()->getValue($product);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X