2015-01-09 3 views
1

Я настраиваю пользовательский контроллер для расширения Mage_Core_Controller_Front_Action. Если пользователь добавляет элемент в корзину, я хочу проверить срок действия цитаты. Если он достаточно стар, то пользователю должна быть предоставлена ​​новая цитата. Ничего не нужно делать для более молодых цитат. Эта добавленная функциональность поможет нам обойти проблему брошенной корзины, с которой сталкивается клиент. Мы не беспокоимся о каких-либо сиротских котировках, мы просто хотим, чтобы старая цитата дублировалась в новую, давая нам совершенно новую цитату.Magento - Как инициализировать новую Цитату для данного Checkout/Session?

В 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 дней, вы можете изменить ее с администратора в 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; 
}