Я не могу получить значение атрибута продукта
-
16-10-2019 - |
Вопрос
у меня есть 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');