Атрибут продукта Magento Get Value

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

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

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

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

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

     getAttributeText('attr_id') ?> 

    Кажется невозможным получить стоимость без загрузки модели продукта. Если вы посмотрите на файл 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-я строка).

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

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

     /** * @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; } 

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

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

    Попробуй это

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

    Вам не нужно загружать весь продукт. Коллекции 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 ) 

    Это работает,

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

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

     $model = Mage::getResourceModel('catalog/product'); $attribute_value = $model->getAttributeRawValue($productId, 'attribute_code', $storeId); 
     $orderId = 1; // YOUR ORDER ID $items = $block->getOrderItems($orderId); foreach ($items as $item) { $options = $item->getProductOptions(); if (isset($options['options']) && !empty($options['options'])) { foreach ($options['options'] as $option) { echo 'Title: ' . $option['label'] . '
    '; echo 'ID: ' . $option['option_id'] . '
    '; echo 'Type: ' . $option['option_type'] . '
    '; echo 'Value: ' . $option['option_value'] . '
    ' . '
    '; } } }

    Вы можете написать метод, который будет делать это напрямую через sql.

    Будет выглядеть примерно так:

    Переменные:

     $store_id = 1; $product_id = 1234; $attribute_code = 'manufacturer'; 

    Запрос:

     SELECT value FROM eav_attribute_option_value WHERE option_id IN ( SELECT option_id FROM eav_attribute_option WHERE FIND_IN_SET( option_id, (SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '$product_id' AND attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code='$attribute_code') ) ) > 0) AND store_id='$store_id'; 

    Вам нужно будет получить значение из правильной таблицы на основе атрибута backend_type (поле в eav_attribute), хотя для этого требуется как минимум 1 дополнительный запрос.

    Если у вас есть атрибут text / textarea с именем my_attr, вы можете получить его: product->getMyAttr();

    Давайте будем гением компьютера.