ฉันใช้ CE 1.9.1.0
ฉันกำลังพยายามลบข้อมูลการจัดส่งและขั้นตอนการจัดส่งจากขั้นตอนการชำระเงินแบบ onepage แต่ไม่ประสบความสำเร็จ
บางทีใครบางคนสามารถช่วยฉันชี้แนะทิศทางที่ถูกต้อง?
ฉันใช้ CE 1.9.1.0
ฉันกำลังพยายามลบข้อมูลการจัดส่งและขั้นตอนการจัดส่งจากขั้นตอนการชำระเงินแบบ onepage แต่ไม่ประสบความสำเร็จ
บางทีใครบางคนสามารถช่วยฉันชี้แนะทิศทางที่ถูกต้อง?
คำตอบ:
นี่คือสิ่งที่ฉันทำ
ฉันลบขั้นตอนการจัดส่งและใช้วิธีการจัดส่งเริ่มต้นที่ฉันรู้ว่ามีอยู่เสมอ
ไม่แน่ใจว่านี่คือสิ่งที่คุณต้องการ แต่อย่างน้อยคุณสามารถใช้เป็นจุดเริ่มต้นได้
นี่คือความคิดของฉัน
ฉันสร้างโมดูลใหม่ด้วยการenable/disable
ตั้งค่าการจัดส่งขั้นตอนการจัดส่งดังนั้นคุณสามารถเปิดใช้งานขั้นตอนการจัดส่งได้อีกครั้งจากsystem->configuration
ส่วน
StackExchange_Checkout
ดังนั้นการสร้างโมดูล
คุณจะต้องใช้ไฟล์ต่อไปนี้
app/etc/modules/StackExchange_Checkout.xml
- ไฟล์ประกาศ
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Checkout>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Checkout />
</depends>
</StackExchange_Checkout>
</modules>
</config>
app/code/local/StackExchange/Checkout/etc/config.xml
- ไฟล์กำหนดค่าที่คุณกำหนดรุ่นบล็อกและเขียนบล็อกการชำระเงิน onepage อีกครั้ง นอกจากนี้ยังตั้งค่าวิธีการจัดส่งเริ่มต้น
<?xml version="1.0"?>
<config>
<modules>
<StackExchange_Checkout>
<version>0.0.1</version>
</StackExchange_Checkout>
</modules>
<global>
<blocks>
<checkout>
<rewrite>
<onepage>StackExchange_Checkout_Block_Onepage</onepage><!-- rewrite the onepage chackout block -->
</rewrite>
</checkout>
</blocks>
<helpers>
<stackexchange_checkout>
<class>StackExchange_Checkout_Helper</class>
</stackexchange_checkout>
</helpers>
<models>
<stackexchange_checkout>
<class>StackExchange_Checkout_Model</class>
</stackexchange_checkout>
</models>
</global>
<default>
<checkout>
<options>
<hide_shipping>1</hide_shipping>
<default_shipping>tablerate_bestway</default_shipping><!-- set the default shipping method code -->
</options>
</checkout>
</default>
<frontend>
<routers>
<checkout>
<args>
<modules>
<StackExchange_Checkout before="Mage_Checkout">StackExchange_Checkout</StackExchange_Checkout>
</modules>
</args>
</checkout>
</routers>
<translate>
<modules>
<StackExchange_Checkout>
<files>
<default>StackExchange_Checkout.csv</default>
</files>
</StackExchange_Checkout>
</modules>
</translate>
</frontend>
</config>
app/code/local/StackExchange/Checkout/etc/system.xml
- ไฟล์ระบบที่วางธงเปิด / ปิดการใช้งานสำหรับขั้นตอนการจัดส่ง
<?xml version="1.0"?>
<config>
<sections>
<checkout>
<groups>
<options>
<fields>
<hide_shipping translate="label" module="stackexchange_checkout">
<label>Hide shipping method step</label>
<frontend_type>select</frontend_type>
<source_model>adminhtml/system_config_source_yesno</source_model>
<sort_order>100</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</hide_shipping>
<default_shipping translate="label" module="stackexchange_checkout">
<label>Default shipping method code</label>
<frontend_type>text</frontend_type>
<sort_order>110</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</default_shipping>
</fields>
</options>
</groups>
</checkout>
</sections>
</config>
app/code/local/StackExchange/Checkout/Helper/Data.php
- ผู้ช่วยที่ตรวจสอบว่าขั้นตอนการจัดส่งควรจะปิดการใช้งาน
<?php
class StackExchange_Checkout_Helper_Data extends Mage_Core_Helper_Abstract
{
const XML_HIDE_SHIPPING_PATH = 'checkout/options/hide_shipping';
const XML_DEFAULT_SHIPPING_PATH = 'checkout/options/default_shipping';
public function getHideShipping()
{
if (!Mage::getStoreConfigFlag(self::XML_HIDE_SHIPPING_PATH)){
return false;
}
if (!$this->getDefaultShippingMethod()){
return false;
}
return true;
}
public function getDefaultShippingMethod()
{
return Mage::getStoreConfig(self::XML_DEFAULT_SHIPPING_PATH);
}
}
app/code/local/StackExchange/Checkout/Block/Onepage.php
- บล็อกการชำระเงินที่เขียนทับ
<?php
class StackExchange_Checkout_Block_Onepage extends Mage_Checkout_Block_Onepage
{
protected function _getStepCodes()
{
if (!Mage::helper('stackexchange_checkout')->getHideShipping()){
return parent::_getStepCodes();
}
return array_diff(parent::_getStepCodes(), array('shipping_method'));
}
}
app/code/local/StackExchange/Checkout/controllers/OnepageController.php
- แทนที่คอนโทรลเลอร์ onepage เพื่อตั้งค่าวิธีการจัดส่งเริ่มต้นโดยอัตโนมัติ
<?php
require 'Mage/Checkout/controllers/OnepageController.php';
class StackExchange_Checkout_OnepageController extends Mage_Checkout_OnepageController
{
public function saveBillingAction()
{
if (!Mage::helper('stackexchange_checkout')->getHideShipping()){
parent::saveBillingAction();
return;
}
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('billing', array());
$customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
if (isset($data['email'])) {
$data['email'] = trim($data['email']);
}
$result = $this->getOnepage()->saveBilling($data, $customerAddressId);
if (!isset($result['error'])) {
/* check quote for virtual */
if ($this->getOnepage()->getQuote()->isVirtual()) {
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
} elseif (isset($data['use_for_shipping']) && $data['use_for_shipping'] == 1) {
//add default shipping method
$data = Mage::helper('stackexchange_checkout')->getDefaultShippingMethod();
$result = $this->getOnepage()->saveShippingMethod($data);
$this->getOnepage()->getQuote()->save();
/*
$result will have erro data if shipping method is empty
*/
if(!$result) {
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method',
array('request'=>$this->getRequest(),
'quote'=>$this->getOnepage()->getQuote()));
$this->getOnepage()->getQuote()->collectTotals();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
}
$result['allow_sections'] = array('shipping');
$result['duplicateBillingInfo'] = 'true';
} else {
$result['goto_section'] = 'shipping';
}
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
public function saveShippingAction()
{
if (!Mage::helper('stackexchange_checkout')->getHideShipping()){
parent::saveShippingAction();
return;
}
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$data = $this->getRequest()->getPost('shipping', array());
$customerAddressId = $this->getRequest()->getPost('shipping_address_id', false);
$result = $this->getOnepage()->saveShipping($data, $customerAddressId);
$data = Mage::helper('stackexchange_checkout')->getDefaultShippingMethod();
$result = $this->getOnepage()->saveShippingMethod($data);
$this->getOnepage()->getQuote()->save();
if (!isset($result['error'])) {
$result['goto_section'] = 'payment';
$result['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
}
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
}
ล้างแคชและคุณทำเสร็จแล้ว
ทำให้ผลิตภัณฑ์ของคุณเป็นผลิตภัณฑ์เสมือนจริงและจะถูกลบโดยอัตโนมัติ
ฉันมีวิธีแก้ปัญหาที่ดีกว่า @marius ซึ่งไม่ต้องการการเขียนซ้ำ
คุณยังคงต้องสร้างโมดูลของตัวเองมีบทเรียนมากมายสำหรับสิ่งนั้นดังนั้นฉันจะไม่อธิบายที่นี่ config.xml
คุณต้องสร้างผู้สังเกตการณ์และเรียกมันผ่าน คุณอาจต้องปรับแม่แบบapp/design/frontend/base/default/template/checkout/onepage.phtml
ในconfig.xml
:
<?xml version="1.0"?>
<config>
<modules>
<Namepace_Module>
<version>1.0.0</version>
</Namepace_Module>
</modules>
....
<frontend>
<events>
<controller_action_postdispatch_checkout_onepage_saveBilling>
<observers>
<namespace_module_skip_shipping_method>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>controllerActionPostdispatchCheckoutOnepageSaveBilling</method>
</namespace_module_skip_shipping_method>
</observers>
</controller_action_postdispatch_checkout_onepage_saveBilling>
<controller_action_postdispatch_checkout_onepage_saveShipping>
<observers>
<namespace_module_skip_shipping_method>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>controllerActionPostdispatchCheckoutOnepageSaveBilling</method>
</namespace_module_skip_shipping_method>
</observers>
</controller_action_postdispatch_checkout_onepage_saveShipping>
</events>
</frontend>
</config>
ในตัวคุณ Model/Observer.php
class Namepsace_Module_Model_Observer {
/**
* @param Varien_Event_Observer $observer
*/
public function controllerActionPostdispatchCheckoutOnepageSaveBilling(Varien_Event_Observer $observer)
{
if (!Mage::helper('namespace_module')->skipShippingMethod()) {
return;
}
/* @var $controller Mage_Checkout_OnepageController */
$controller = $observer->getEvent()->getControllerAction();
$response = Mage::app()->getFrontController()->getResponse()->getBody(true);
if (!isset($response['default'])) {
return;
}
$response = Mage::helper('core')->jsonDecode($response['default']);
if ($response['goto_section'] == 'shipping_method') {
$response['goto_section'] = 'payment';
$response['update_section'] = array(
'name' => 'payment-method',
'html' => $this->_getPaymentMethodsHtml()
);
$controller->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
}
}
/**
* @return string
* @throws Mage_Core_Exception
*/
protected function _getPaymentMethodsHtml()
{
$layout = Mage::getModel('core/layout');
$update = $layout->getUpdate();
$update->load('checkout_onepage_paymentmethod');
$layout->generateXml();
$layout->generateBlocks();
return $layout->getOutput();
}
}
ฉันกำลังมองหาทางออกที่ง่ายขึ้นในช่วงไม่กี่วันที่ผ่านมาเพราะฉันไม่ต้องการยุ่งกับไฟล์ผู้วิเศษ ดังนั้นฉันจึงคิดวิธีแก้ปัญหาของตัวเองขึ้นมา
ตรวจสอบ div ของวิธีการจัดส่งและค้นหาไฟล์ css ในกรณีที่ไฟล์ของฉันเป็นที่
"ผับ / คงที่ / หน้า / myTheme / THEMENAME / th / CSS / กุ้งยิง-m.css"
หลังจากนั้นฉันเขียนทับ css ปัจจุบันแน่นอนฉันทำสำเนาสำรองของไฟล์ต้นฉบับของฉัน
CSS:
.step-title, .totals.shipping.incl {display: none! important;} # checkout-shipping-method-load {แสดง: none! important;}
นอกจากนี้ฉันต้องการทราบว่าไฟล์ใดมีผลกับวิธีนี้หรือไม่ ฉันยังไม่ได้ประสบปัญหาใด ๆ จนถึงตอนนี้