web-dev-qa-db-fra.com

Attribut produit Magento Obtenir une valeur

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

82
Denis Óbukhov
Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
140
Daniel Kocherga

Une façon que je connaisse:

$product->getResource()->getAttribute($attribute_code)
        ->getFrontend()->getValue($product)
38
Lucas Moeskops

vous pouvez utiliser 

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

Veuillez voir la réponse de Daniel Kocherga, car cela fonctionnera dans la plupart des cas.

En plus de cette méthode pour obtenir la valeur de l'attribut, vous souhaiterez parfois obtenir l'étiquette select ou multiselect. Dans ce cas, j'ai créé cette méthode que je stocke dans une classe d'assistance:

/**
 * @param int $entityId
 * @param int|string|array $attribute atrribute's ids or codes
 * @param null|int|Mage_Core_Model_Store $store
 *
 * @return bool|null|string
 * @throws Mage_Core_Exception
 */
public function getAttributeRawLabel($entityId, $attribute, $store=null) {
    if (!$store) {
        $store = Mage::app()->getStore();
    }

    $value = (string)Mage::getResourceModel('catalog/product')->getAttributeRawValue($entityId, $attribute, $store);
    if (!empty($value)) {
        return Mage::getModel('catalog/product')->getResource()->getAttribute($attribute)->getSource()->getOptionText($value);
    }

    return null;
}
8
Tyler V.

Il semble impossible d'obtenir de la valeur sans charger le modèle de produit. Si vous regardez le fichier app/code/core/Mage/Eav/Modèle/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 constater, cette méthode nécessite que l'objet chargé récupère des données (3ème ligne).

8
azakolyukin

Nous devons d’abord nous assurer que l’attribut souhaité est chargé, puis le sortir. Utilisez ceci:

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

Essaye ça 

 $attribute = $_product->getResource()->getAttribute('custom_attribute_code');
    if ($attribute)
    {
        echo $attribute_value = $attribute ->getFrontend()->getValue($_product);
    }
3
Keshav Kalra

Vous n'avez pas besoin de charger tout le produit .Les collections Magentos sont très puissantes et intelligentes.

$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToFilter('entity_id', $product->getId());
$collection->addAttributeToSelect('manufacturer');
$product = $collection->getFirstItem();
$manufacturer = $product->getAttributeText('manufacturer');

Au moment où vous appelez getFirstItem (), la requête sera exécutée et le produit obtenu est très minime:

[status] => 1
[entity_id] => 38901
[type_id] => configurable
[attribute_set_id] => 9
[manufacturer] => 492
[manufacturer_value] => JETTE
[is_salable] => 1
[stock_item (Varien_Object)] => Array
    (
        [is_in_stock] => 1
    )
1
Eydamos

Celui-ci fonctionne

echo $_product->getData('ATTRIBUTE_NAME_HERE');
1
th3pirat3

Vous pouvez obtenir une valeur d'attribut de la manière suivante

$model = Mage::getResourceModel('catalog/product');
$attribute_value = $model->getAttributeRawValue($productId, 'attribute_code', $storeId);
0
Magecode