我想更新購物車中商品的自定義選項。我有物品ID,所以我可以加載我的控制器中的項目。那就是我卡住的地方,我可以從購物車中移除物品,並添加一個新的更新選項,但那不是我想要的。Magento:以編程方式更新購物車中的商品自定義選項?
我想直接更新購物車中的現有商品。任何想法如何做到這一點?
謝謝!
我想更新購物車中商品的自定義選項。我有物品ID,所以我可以加載我的控制器中的項目。那就是我卡住的地方,我可以從購物車中移除物品,並添加一個新的更新選項,但那不是我想要的。Magento:以編程方式更新購物車中的商品自定義選項?
我想直接更新購物車中的現有商品。任何想法如何做到這一點?
謝謝!
我遇到了可配置產品的確切問題。
現在,我知道Magento在'編輯購物車項目'頁面上顯示可配置的產品選項,並且選項列表是在沒有預先選擇可配置屬性的情況下生成的。該屬性是由JavaScript,這需要產生的數據集由
<script type="text/javascript">
var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);
</script>
但它只能在「編輯車項目」頁面顯示選定的屬性。 如果我手動調用它,它不顯示當前的屬性選擇。
一些結帳模塊也顯示購物車覆蓋視圖中的選定屬性,因爲我知道 - 所以,有可能從Magento獲取這些數據(但我不確定它是直接從數據庫還是以更友好的方式)。
config.xml的部分
<events>
<checkout_cart_update_items_after>
<observers>
<update_items_specific_option>
<class>mycompany_checkout/observer</class>
<method>updateItemsSpecificOption</method>
</update_items_specific_option>
</observers>
</checkout_cart_update_items_after>
</events>
應用程序/代碼/本地/ MyCompany的/ Observer.php部分
<?php
class MyCompany_Checkout_Model_Observer
extends Varien_Event_Observer
{
public function updateItemsSpecificOption($observer)
{
$event = $observer->getEvent();
$cart = $event->getCart();
$data = $event->getInfo();
foreach ($data as $itemId => $itemInfo) {
$item = $cart->getQuote()->getItemById($itemId);
if (!$item) {
continue;
}
$optionData = $this->_getSpecificOptionDataFromItem($item);
if(!$optionData) {
continue;
}
$params = clone $item->getBuyRequest();
$options = $params->getOptions() ? $params->getOptions() : array();
$updateItem = false;
if($shouldIRemoveOption) {
unset($options[$optionData['option_id']]);
$updateItem = true;
} elseif($shouldIAddOption) {
$options[$optionData['option_id']] = array($optionData['value_id']);
$updateItem = true;
}
if($updateItem) {
$params->setOptions($options);
$cart->updateItem($itemId, $params);
}
}
}
protected function _getSpecificOptionDataFromItem($item)
{
foreach($item->getProduct()->getOptions() as $option) {
if($this->_isMyNeededOption($option)) {
foreach($option->getValues() as $valueId => $value) {
if($this->_isMyNeededValue($value)) {
return array(
'option_id' => $option->getId(),
'value_id' => $valueId,
'price' => $value->getPrice()
);
}
}
}
}
return false;
}
}
我不知道到底要更改自定義選項,所以在這裏你有一個觀察員在購物車更新動作時會這樣做
你可以粘貼你到目前爲止嘗試過的代碼嗎? – 2013-04-05 16:22:07