Добавить пользовательский параметр в элемент цитаты (продукт в корзине)?
Я бегу Magento 1.7.
Я пытаюсь добавить вариант элемента цитаты, пользовательский, в sales_flat_quote_item_option.
Я пытался с функциями addOption и addCustomOption, но, похоже, не запущен запрос к базе данных.
Это мой код прямо сейчас (в пользовательском модуле помощник):
public function assignDocumentToQuoteItem(Mage_Sales_Model_Quote_Item $quoteItem, $documentid)
{
if (is_numeric($documentid) && $documentid > 0) {
/** @var Mage_Catalog_Model_Product */
$product = $quoteItem->getProduct();
$quoteItem->addOption(array(
'product_id' => $product->getId(),
'product' => $product,
'code' => 'documentid',
'value' => $documentid
));
$quoteItem->save();
return true;
}
throw new Exception(__METHOD__.' - Document id has to be a numeric value.');
}
1 ответ
Да, это возможно, вам нужно использовать наблюдателя
Я добавляю дату доставки с каждым продуктом в заказах
Таким образом, вы можете изменить это, чтобы быть вариантом, который вы хотите добавить к каждому продукту или около того.
<controller_action_predispatch_checkout>
<observers>
<options_observer>
<class>YOUR_CLASS_NAME</class>
<method>setProductInfo</method>
</options_observer>
</observers>
</controller_action_predispatch_checkout>
public function setProductInfo($observer)
{
if ('checkout_cart_add' != $observer->getEvent()->getControllerAction()->getFullActionName()) {
return;
}
$request = Mage::app()->getRequest();
$prId = $request->getParams();
$product = Mage::getModel('catalog/product')->load($prId['product']);
// fixed spelling of cofigurable/configurable
if ($product->getTypeId() == 'configurable') {
return $this;
}
if (!$product->getHasOptions()) {
$optionID = $this->saveProductOption($product);
} else {
$options = $product->getOptions();
if ($options) {
foreach ($options as $option) {
if ($option->getTitle() == 'Delivery Date') {
$optionID = $option->getOptionId();
}
}
}
if (empty($optionID)) {
$optionID = $this->saveProductOption($product);
}
}
$deliveryDate = $prId['delivery_date'];
if (!empty($deliveryDate)) {
$opt['options'] = array($optionID => $deliveryDate);
$request->setParams($opt);
}
return $this;
}
function saveProductOption($product)
{
$store = Mage::app()->getStore()->getId();
$opt = Mage::getModel('catalog/product_option');
$opt->setProduct($product);
$option = array(
'is_delete' => 0,
'is_require' => false,
'previous_group' => 'text',
'title' => 'Delivery Date',
'type' => 'field',
'price_type' => 'fixed',
'price' => '0.0000'
);
$opt->addOption($option);
$opt->saveOptions();
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
$product->setHasOptions(1);
$product->save();
$options = $product->getOptions();
if ($options) {
foreach ($options as $option) {
if ($option->getTitle() == 'Delivery Date') {
$optionID = $option->getOptionId();
}
}
}
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load($store));
return $optionID;
}