Я намеревался создать собственный кредитный модуль, который может использовать кредиты нашего магазина для скидок.Изучив несколько примеров, я успешно добавил шаг оформления заказа на одностраничный заказ.А затем я расширяю Mage_Sales_Model_Quote_Address_Total_Abstract, чтобы иметь собственный коллектор для вычисления общего количества.В настоящее время я жестко запрограммировал некоторое значение скидки, чтобы увидеть, как оно работает:
public function collect(Mage_Sales_Model_Quote_Address $address) {
parent::collect ( $address );
//if($address->getData('address_type')=='billing') return $this;
try {
$this->_setAmount ( -10 )->_setBaseAmount ( -10 );
} catch ( Exception $e ) {
Mage::throwException ( $e->getMessage () );
//do nothing.
}
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address) {
parent::fetch ( $address );
//if($address->getData('address_type')=='billing') return $this;
$title = Mage::helper ( 'sales' )->__ ( 'Credittest' );
$address->addTotal ( array ('code' => $this->getCode (), 'title' => $title, 'value' => -10 ) );
return $this;
}
Раздел в config.xml выглядит следующим образом:
<sales>
<quote>
<totals>
<credittest>
<class>sales/quote_address_total_credit</class>
<after>tax_subtotal,subtotal,freeshipping</after>
<before>grand_total</before>
</credittest>
</totals>
</quote>
</sales>
Однако результат получается с вычетом -20,после некоторой трассировки отладки мой пользовательский коллектор вызывается дважды, когда тип адреса «биллинг», а другой - «доставка».Поэтому я добавил приведенный выше прокомментированный код для вычисления только при получении адреса доставки. Но я не уверен, что это правильный путь.
Почему другой класс в Mage_Sales_Model_Quote_Address не будет рассчитываться дважды?Они на самом деле вызываются дважды в соответствии с моим отслеживанием.И как правильно решить мою проблему?
Заранее спасибо.