Magento — Как мне инициализировать новую цитату для данной проверки / сеанса?

Я устанавливаю пользовательский контроллер для расширения Mage_Core_Controller_Front_Action. Если пользователь добавляет товар в корзину, я хочу проверить срок действия предложения. Если он достаточно старый, то пользователю нужно дать новую цитату. Ничего не нужно делать для младших цитат. Эта дополнительная функциональность поможет нам обойти проблему брошенной корзины, с которой сталкивается клиент. Мы не беспокоимся о каких-либо потерянных кавычках, мы просто хотим, чтобы старая цитата дублировалась в новую, давая нам совершенно новый quoteId.

В CartController.php я могу получить текущий quoteId и элементы внутри с помощью:

$current_cart = Mage::getSingleton('checkout/session');
$quote_id= $current_cart->getQuoteId();

$old_items = $this->_getQuote()->getAllVisibleItems();

Но я не знаю, как проверить срок действия котировки (т. Е. Текущее время минус последнее обновление котировки), и не знаю, как инициализировать совершенно новую цитату. Я знаю, что все это хранится в таблицах sales_flat_quote и sales_flat_quote_item, но я надеялся, что Magento был способен сделать это без использования опасных операторов SQL.

Есть идеи?

1

Решение

Magento настроен на очистку старых цитат с помощью cron. Срок действия котировки по умолчанию составляет 30 дней, вы можете изменить это значение с помощью admin System > Configuration > Sales > Checkout,

Cron задание определено в app/code/core/Mage/Sales/etc/config.xml

<sales_clean_quotes>
<schedule>
<cron_expr>0 0 * * *</cron_expr>
</schedule>
<run>
<model>sales/observer::cleanExpiredQuotes</model>
</run>
</sales_clean_quotes>

Также, если вы посмотрите на cleanExpiredQuotes метод внутри Mage_Sales_Model_Observer вы заметите, что удаляются только неактивные цитаты. Цитата помечается как неактивная после ее преобразования в заказ.

$quotes->addFieldToFilter('is_active', 0);

Если вы удалите это, Magento удалит все просроченные кавычки. Самый простой способ сделать это — создать собственного наблюдателя и переопределить <model>sales/observer::cleanExpiredQuotes</model> в вашем config.xml

Я не уверен, что это ответ, который вы ищете, но я надеюсь, что он по крайней мере будет полезным.

1

Другие решения

Вы могли бы продлить Mage_Checkout_Model_Session::getQuote() с чем-то вроде

public function getQuote()
{
$quote = parent::getQuote();
// If older than 24 hours...
if (strtotime($quote->getUpdatedAt()) < Mage::getSingleton('core/date')->gmtTimestamp() - 60 * 60 * 24) {
// Kill this quote
$this->setQuoteId(null);
// Go get a new one
return parent::getQuote();
}
return $quote;
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector