Я использую Mangeto 1.9.1, и я пытаюсь создать модуль на 50% скидку от общей стоимости.
Я сделал некоторые вещи в модуле, но когда я пытаюсь открыть свой http://mymagento.com/checkout/cart/, у меня есть пустая страница в моем главном меню. Пустая страница, на которой должны находиться мои предметы и общая сумма.
Взглянуть:
Я сделал этот модуль с помощью этого ответа: Magento – проблема с созданием настраиваемого модуля
Итак, вот что я сделал:
В app / code / local / VivasIndustries / PercentPayment / etc / config.xml:
<?xml version="1.0"?> <config> <modules> <VivasIndustries_PercentPayment> <version>0.1.0</version> </VivasIndustries_PercentPayment> </modules> <global> <models> <percentpayment> <class>VivasIndustries_PercentPayment_Model</class> <resourceModel>percentpayment_mysql4</resourceModel> </percentpayment> </models> <resources> <percentpaymentatribute_setup> <setup> <module>VivasIndustries_PercentPayment</module> <class>Mage_Sales_Model_Mysql4_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </percentpaymentatribute_setup> <percentpaymentatribute_write> <connection> <use>core_write</use> </connection> </percentpaymentatribute_write> <percentpaymentatribute_read> <connection> <use>core_read</use> </connection> </percentpaymentatribute_read> </resources> <events> <checkout_type_onepage_save_order_after> <!-- identifier of the event we want to catch --> <observers> <checkout_type_onepage_save_order_after_discount_handler> <!-- identifier of the event handler --> <type>model</type> <!-- class method call type; valid are model, object and singleton --> <class>percentpayment/newordertotalobserver</class> <!-- observers class alias --> <method>saveDiscountTotal</method> <!-- observer's method to be called --> <args></args> <!-- additional arguments passed to observer --> </checkout_type_onepage_save_order_after_discount_handler> </observers> </checkout_type_onepage_save_order_after> <checkout_type_multishipping_create_orders_single> <!-- identifier of the event we want to catch --> <observers> <checkout_type_multishipping_create_orders_single_discount_handler> <!-- identifier of the event handler --> <type>model</type> <!-- class method call type; valid are model, object and singleton --> <class>percentpayment/newordertotalobserver</class> <!-- observers class alias --> <method>saveDiscountTotalForMultishipping</method> <!-- observer's method to be called --> <args></args> <!-- additional arguments passed to observer --> </checkout_type_multishipping_create_orders_single_discount_handler> </observers> </checkout_type_multishipping_create_orders_single> </events> <sales> <quote> <totals> <discount_total> <class>percentpayment/quote_address_total_discount</class> <after>subtotal,freeshipping,tax_subtotal,shipping</after> <before>grand_total</before> </discount_total> </totals> </quote> <order_invoice> <totals> <discount_total> <class>percentpayment/order_invoice_total_discount</class> <after>subtotal,freeshipping,tax_subtotal,shipping</after> <before>grand_total</before> </discount_total> </totals> </order_invoice> <order_creditmemo> <totals> <discount_total> <class>percentpayment/order_creditmemo_total_discount</class> <after>subtotal,freeshipping,tax_subtotal,shipping</after> <before>grand_total</before> </discount_total> </totals> </order_creditmemo> </sales> </global> </config>
In In app / code / local / VivasIndustries / PercentPayment / Model / Newordertotalobserver.php:
<?php class VivasIndustries_PercentPayment_Model_Newordertotalobserver { public function saveDiscountTotal(Varien_Event_Observer $observer) { $order = $observer -> getEvent() -> getOrder(); $quote = $observer -> getEvent() -> getQuote(); $shippingAddress = $quote -> getShippingAddress(); if($shippingAddress && $shippingAddress -> getData('discount_total')){ $order -> setData('discount_total', $shippingAddress -> getData('discount_total')); } else{ $billingAddress = $quote -> getBillingAddress(); $order -> setData('discount_total', $billingAddress -> getData('discount_total')); } $order -> save(); } public function saveDiscountTotalForMultishipping(Varien_Event_Observer $observer) { $order = $observer -> getEvent() -> getOrder(); $address = $observer -> getEvent() -> getAddress(); $order -> setData('discount_total', $shippingAddress -> getData('discount_total')); $order -> save(); } }
В приложении / code / local / VivasIndustries / PercentPayment / Model / Order / Creditmemo / Total / Discount.php:
return $this; $order = $creditmemo->getOrder(); $orderDiscountTotal = $order->getDiscountTotal(); if ($orderDiscountTotal) { $creditmemo->setGrandTotal($creditmemo->getGrandTotal()+$orderDiscountTotal); $creditmemo->setBaseGrandTotal($creditmemo->getBaseGrandTotal()+$orderDiscountTotal); } return $this; } }
В app / code / local / VivasIndustries / PercentPayment / Model / Order / Invoice / Total / Discount.php:
<?php class VivasIndustries_PercentPayment_Model_Order_Invoice_Total_Discount extends Mage_Sales_Model_Order_Invoice_Total_Abstract { public function collect(Mage_Sales_Model_Order_Invoice $invoice) { $order=$invoice->getOrder(); $orderDiscountTotal = $order->getDiscountTotal(); if ($orderDiscountTotal&&count($order->getInvoiceCollection())==0) { $invoice->setGrandTotal($invoice->getGrandTotal()+$orderDiscountTotal); $invoice->setBaseGrandTotal($invoice->getBaseGrandTotal()+$orderDiscountTotal); } return $this; } }
В приложении / code / local / VivasIndustries / PercentPayment / Model / Quote / Address / Total / Discount.php:
<?php class VivasIndustries_PercentPayment_Model_Quote_Address_Total_Discount extends Mage_Sales_Model_Quote_Address_Total_Abstract { public function __construct() { $this -> setCode('discount_total'); } /** * Collect totals information about discount * * @param Mage_Sales_Model_Quote_Address $address * @return Mage_Sales_Model_Quote_Address_Total_Shipping */ public function collect(Mage_Sales_Model_Quote_Address $address) { parent :: collect($address); $items = $this->_getAddressItems($address); if (!count($items)) { return $this; } $quote= $address->getQuote(); //amount definition $discountAmount = 50; //amount definition $discountAmount = $quote -> getStore() -> roundPrice($discountAmount); $this -> _setAmount($discountAmount) -> _setBaseAmount($discountAmount); $address->setData('discount_total',$discountAmount); return $this; } /** * Add discount totals information to address object * * @param Mage_Sales_Model_Quote_Address $address * @return Mage_Sales_Model_Quote_Address_Total_Shipping */ public function fetch(Mage_Sales_Model_Quote_Address $address) { parent :: fetch($address); $amount = $address -> getTotalAmount($this -> getCode()); if ($amount != 0){ $address -> addTotal(array( 'code' => $this -> getCode(), 'title' => $this -> getLabel(), 'value' => $amount )); } return $this; } /** * Get label * * @return string */ public function getLabel() { return Mage :: helper('modulename') -> __('Discount'); } }
И в app / code / local / VivasIndustries / PercentPayment / sql / percentpaymentatribute_setup / mysql4-install-0.1.0.php:
<?php $installer = $this; $installer->startSetup(); $installer->addAttribute("quote_address", "discount_total", array("type"=>"varchar")); $installer->addAttribute("order", "discount_total", array("type"=>"varchar")); $installer->endSetup();
И, наконец, я сделал это:
В приложении / etc / modules / VivasIndustries_PercentPayment.xml:
<?xml version="1.0"?> <config> <modules> <VivasIndustries_PercentPayment> <active>true</active> <codePool>local</codePool> <version>0.1.0</version> </VivasIndustries_PercentPayment> </modules> </config>
И это все, что я сделал, и я получаю эту пустую страницу без ошибок.
Не могли бы вы помочь мне найти проблему и исправить ее?
*РЕДАКТИРОВАТЬ
Когда я удаляю:
public function getLabel() { return Mage :: helper('modulename') -> __('Discount'); }
Страница исправлена и отображается только значение скидки без описания «Скидка».
Заранее спасибо!