-
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图)。我需要将其设置为管理员商店的视图,然后我可以获取所需的所有产品信息。
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');
或者,如果您需要从产品本身加载ID值,则可以获取产品的所有选定ID值:
$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');