it-swarm.com.de

Magento-Produktattribut Get Value

Wie erhalte ich einen bestimmten Produktattributwert, wenn ich die Produkt-ID kenne, ohne das gesamte Produkt zu laden?

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

Ein Weg, den ich kenne:

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

sie können verwenden 

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

Bitte sehen Sie Daniel Kochergas answer, da es in den meisten Fällen für Sie funktioniert.

Zusätzlich zu dieser Methode zum Abrufen des Attributwerts möchten Sie möglicherweise die Bezeichnung einer select oder multiselect abrufen. In diesem Fall habe ich diese Methode erstellt, die ich in einer Hilfsklasse speichere:

/**
 * @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.

Es scheint unmöglich, einen Wert zu erhalten, ohne das Produktmodell zu laden. Wenn Sie sich die Datei app/code/core/Mage/Eav/Model/Entity/Attribute/Frontend/Abstract.php ansehen, sehen Sie die Methode

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;
}

Wie Sie sehen, erfordert diese Methode ein geladenes Objekt, um Daten von ihr abzurufen (3. Zeile).

8
azakolyukin

Zuerst müssen wir sicherstellen, dass das gewünschte Attribut geladen wird, und es dann ausgeben. Benutze das:

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

Versuche dies 

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

Sie müssen nicht das gesamte Produkt laden. __ Die Magentos-Kollektionen sind sehr leistungsstark und intelligent.

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

In dem Moment, in dem Sie getFirstItem () aufrufen, wird die Abfrage ausgeführt und das Ergebnisprodukt ist sehr minimal:

[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

Dieser arbeitet

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

Sie können den Attributwert auf folgende Weise erhalten

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