Атрибут продукта Magento Получить ценность - PullRequest
82 голосов
/ 03 августа 2011

Как получить конкретное значение атрибута продукта, если я знаю идентификатор продукта без загрузки всего продукта?

Ответы [ 13 ]

140 голосов
/ 17 ноября 2011
Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, 'attribute_code', $storeId);
38 голосов
/ 03 августа 2011

Способ, который я знаю:

$product->getResource()->getAttribute($attribute_code)
        ->getFrontend()->getValue($product)
26 голосов
/ 10 июля 2013

вы можете использовать

<?php echo $product->getAttributeText('attr_id')  ?> 
8 голосов
/ 29 мая 2015

Пожалуйста, смотрите ответ Даниэля Кочерга , так как в большинстве случаев он будет работать для вас.

В дополнение к этому методу для получения значения атрибута вы можете иногда захотеть получить метку select или multiselect. В этом случае я создал этот метод, который я храню в классе помощника:

/**
 * @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 голосов
/ 03 августа 2011

Кажется невозможным получить значение без загрузки модели продукта.Если вы посмотрите файл app / code / core / Mage / Eav / Model / Entity / Attribute / Frontend / Abstract.php, вы увидите метод

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

.загруженный объект для получения данных из него (3-я строка).

5 голосов
/ 20 ноября 2013

Сначала мы должны убедиться, что нужный атрибут загружен, а затем вывести его.Используйте это:

$product = Mage::getModel('catalog/product')->load('<product_id>', array('<attribute_code>'));
$attributeValue = $product->getResource()->getAttribute('<attribute_code>')->getFrontend()->getValue($product);
3 голосов
/ 03 апреля 2015

Попробуйте это

 $attribute = $_product->getResource()->getAttribute('custom_attribute_code');
    if ($attribute)
    {
        echo $attribute_value = $attribute ->getFrontend()->getValue($_product);
    }
1 голос
/ 13 апреля 2016

Это работает -

echo $_product->getData('ATTRIBUTE_NAME_HERE');
1 голос
/ 31 января 2014

Вам не нужно загружать весь продукт. Коллекции Magentos очень мощные и умные.

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

В тот момент, когда вы вызываете getFirstItem (), запрос будет выполнен и результат будет очень минимальным:

[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
    )
0 голосов
/ 18 апреля 2018

Вы можете получить значение атрибута следующим образом

$model = Mage::getResourceModel('catalog/product');
$attribute_value = $model->getAttributeRawValue($productId, 'attribute_code', $storeId);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...