我有一个 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);

$usedAttsfalse.

更新: 我在第一个示例中尝试了该方法,将产品加载 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');
许可以下: CC-BY-SA归因
scroll top