製品属性値を取得できません
-
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());
}
これにより、ShippingModelで値を取得するために製品をロードする必要はありません。
これらの答えに追加するだけです。属性を取得する必要がある場合 価値, 、そしてあなたは利用可能なラクダケースコードを持っていません、あなたは使用できます getData()
代わりに製品について:
$product = $this->getProduct();
$attributeValue = $product->getData('attribute_code_here');