Вопрос

у меня есть Mage_Sales_Model_Order_Shipment_Item Объект, и я могу загрузить модель продукта, используя SKU элемента отправки (если я могу получить этот атрибут, просто используя элемент отправки, тем лучше).

Модель загруженного продукта, похоже, не содержит size атрибут. Когда я var_dump($prod->getData()) или же var_dump($prod) В его размере нет ничего. Код атрибута size. Анкет Он установлен на продукт, который я загружаю, он является глобальным, выпадающим типом, не уникальным, требуется. Как я могу получить конкретный атрибут продукта, в данном случае «размер», от модели, загруженной SKU?

$prod = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
echo $prod->getSize();
echo $prod->getData('size');

Кроме того, я ожидаю, что это вернет значение 57. Анкет Это атрибут раскрывающегося типа. Как я могу получить значение для этого OPTION_ID? Например, я хотел бы получить ценность "small", нет 57. Анкет Кстати, я вижу эти значения, установленные для этого конкретного SKU в базе данных.

я пытался это решение также

$pc = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeToFilter('size', array('notnull' => 'true'))
    ->addAttributeToFilter('size', array('neq' => ''))
    //->addAttributeToFilter('sku', array('eq' => '100-0055-BLK-S'))
    ->addAttributeToSelect('size');
//$p = $pc->getFirstItem();
$usedAtts = array_unique($pc->getColumnValues('size'));
$attModel = Mage::getSingleton('eav/config')->getAttribute('catalog_product', 'size');
$usedAtts = $attModel->getSource()->getOptionText(implode(',', $usedAtts));
var_dump($usedAtts);

Но $usedAtts является false.

Обновлять: Я попробовал метод в своем первом примере, загрузив продукт sku, при свежей установке, и это сработало. Я настраиваю атрибут размера точно так же, за исключением того, что новая установка имеет его в наборе атрибута «по умолчанию», где предыдущий является пользовательским. Я постараюсь изучить эти различия ... но в то же время у кого -то есть представление о том, почему я не могу получить их в своей предыдущей установке? Я настраиваю продукты одинаково. В предыдущем я могу получить цветной атрибут .. не уверен, почему я не могу получить размер.

Это было полезно?

Решение 2

Проблема заключалась в том, что, когда я инициализировал Magento, это не выполняло дефолт для представления магазина «по умолчанию» (Go Figure). Мне нужно было установить его в представление Admin Store, а затем я могу получить всю необходимую информацию о продукте.

require 'app/Mage.php';
umask(0);
Mage::app();

//admin store
Mage::app()->setCurrentStore(0);

И этот код теперь работает просто отлично:

$prod = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
echo $prod->getSize() . ' - ' . $prod->getAttributeText('size');

Другие советы

Чтобы ответить на вопрос:

Благодаря некоторым удобным встроенным методам вам не нужно делать нагрузку самостоятельно:

  • Mage_Sales_Model_Order_Shipment_Item обеспечивает getOrderItem
  • Mage_Sales_Model_Order_Item обеспечивает getProduct

Итак, все, что вам нужно сделать, это это:

$product = $shipmentItem->getOrderItem()->getProduct();

Если size сохраняется в предмет заказа, вы можете сделать:

$item = $shipmentItem->getOrderItem();
echo $item->getAttributeText('size');

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

$size = $shipmentItem->getOrderItem()->getProduct()->getSize();

Легче просто передать этот атрибут вашей цитате и заказу. Таким образом, вы можете получить это.

Добавьте его в цитату (в вашем config.xml из вашего расширения)

<sales>
<quote>
    <item>
        <product_attributes>
            <custom_attribute />
        </product_attributes>
    </item>
</quote>

конвертировать

<fieldsets>
    <sales_convert_quote_item>
        <custom_attribute>
            <to_order_item>*</to_order_item>
        </custom_attribute>
    </sales_convert_quote_item>
    <sales_convert_order_item>
        <custom_attribute>
            <to_quote_item>*</to_quote_item>
        </custom_attribute>
    </sales_convert_order_item>
</fieldsets>

Скопируйте атрибут в цитату

    <events>
            <sales_quote_item_set_product>
                <observers>
                    <yourmodule>
                        <class>yourmodule/observer</class>
                        <method>setCustomAttribute</method>
                    </yourmodule>
                </observers>
            </sales_quote_item_set_product>
   </events>

Все это находится под глобальным тегом в вашей конфигурации.

Далее вы можете скопировать свой атрибут в проводку цитаты. Наблюдатель, который вы только что назначили событие в своем конфигурации:

public function setCustomAttribute(Varien_Event_Observer $observer) {
    $_item = $observer->getQuoteItem();
    $_product = $observer->getProduct();
    $_item->setCustomAttribute($_product->getCustomAttribute());
}

Таким образом, вам не придется загружать свой продукт, чтобы получить ценность в вашей доставке.

Просто чтобы добавить к этим ответам; Если вам нужно получить атрибут ценность, и у вас нет доступного кода верблюда, вы можете использовать getData() Вместо этого на продукте:

$product = $this->getProduct();
$attributeValue = $product->getData('attribute_code_here');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top