ลบขั้นตอนการจัดส่งในการชำระเงิน Onepage


14

ฉันใช้ CE 1.9.1.0

ฉันกำลังพยายามลบข้อมูลการจัดส่งและขั้นตอนการจัดส่งจากขั้นตอนการชำระเงินแบบ onepage แต่ไม่ประสบความสำเร็จ

บางทีใครบางคนสามารถช่วยฉันชี้แนะทิศทางที่ถูกต้อง?



ลิงค์ด้านบนใช้สำหรับการชำระเงินทันที
inrsaurabh

คำตอบ:


33

นี่คือสิ่งที่ฉันทำ
ฉันลบขั้นตอนการจัดส่งและใช้วิธีการจัดส่งเริ่มต้นที่ฉันรู้ว่ามีอยู่เสมอ
ไม่แน่ใจว่านี่คือสิ่งที่คุณต้องการ แต่อย่างน้อยคุณสามารถใช้เป็นจุดเริ่มต้นได้
นี่คือความคิดของฉัน
ฉันสร้างโมดูลใหม่ด้วยการ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));
        }
    }
}

ล้างแคชและคุณทำเสร็จแล้ว


ฉันเพิ่งใช้งานไป แต่ได้รับข้อความแจ้งว่าวิธีการจัดส่งของฉันไม่ถูกต้อง
Vince Pettit

@VincePettit ฉันระบุไว้ในคำตอบที่ฉันใช้เป็นค่าเริ่มต้นวิธีการจัดส่งที่สามารถใช้ได้ในกรณีของฉันเสมอ บางทีวิธีการจัดส่งที่คุณใช้อาจไม่สามารถใช้ได้เสมอไป
Marius

วิธีการปิดการใช้งานข้อมูลการจัดส่ง?
วีโอไอพี 2

@Manojkothari ฉันไม่รู้
Marius

@Manojkothari หากคุณเพิ่มผลิตภัณฑ์ใด ๆ เป็นข้อมูลการจัดส่งสินค้าเสมือนจริงและการจัดส่งจะไม่ปรากฏ
Butterfly

7

ทำให้ผลิตภัณฑ์ของคุณเป็นผลิตภัณฑ์เสมือนจริงและจะถูกลบโดยอัตโนมัติ


1
โปรดทราบว่าในกรณีนี้คุณจะต้องเปลี่ยนผลิตภัณฑ์ทั้งหมดในเว็บไซต์เป็นเสมือนซึ่งเป็นปริมาณงานที่บ้าและจะทำงานได้ดีกว่าที่จะเกิดปัญหากับกระบวนการวีโอไอพีแบบมาตรฐานอื่น ๆ
มารยาทของเดวิด

2
เป็นการดีที่จะทำถ้าคุณไม่ต้องการรวบรวมข้อมูลการจัดส่งเพราะนั่นคือสิ่งที่ผลิตภัณฑ์เสมือนจริงสำหรับและฉันไม่เห็นมันจะทำให้เกิดปัญหากับกระบวนการมาตรฐานอื่น ๆ
Siddharth Vaghasia

นี่เป็นความจริงของผลิตภัณฑ์ที่สามารถดาวน์โหลดได้ ดูที่นี่
quickshiftin

7

ฉันมีวิธีแก้ปัญหาที่ดีกว่า @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();
    }
}

ฟังดูซับซ้อนน้อยลง มีวิธีตรวจสอบว่ามีวิธีการจัดส่งมากกว่าหนึ่งวิธีหรือไม่และเพียงข้ามขั้นตอนหากเป็นวิธีเดียว
Bernhard Prange

คุณสามารถให้รหัสเต็มพร้อมคำอธิบายได้หรือไม่
Prashant Patil

-4

ฉันกำลังมองหาทางออกที่ง่ายขึ้นในช่วงไม่กี่วันที่ผ่านมาเพราะฉันไม่ต้องการยุ่งกับไฟล์ผู้วิเศษ ดังนั้นฉันจึงคิดวิธีแก้ปัญหาของตัวเองขึ้นมา

ตรวจสอบ div ของวิธีการจัดส่งและค้นหาไฟล์ css ในกรณีที่ไฟล์ของฉันเป็นที่

"ผับ / คงที่ / หน้า / myTheme / THEMENAME / th / CSS / กุ้งยิง-m.css"

หลังจากนั้นฉันเขียนทับ css ปัจจุบันแน่นอนฉันทำสำเนาสำรองของไฟล์ต้นฉบับของฉัน

CSS:

.step-title, .totals.shipping.incl {display: none! important;} # checkout-shipping-method-load {แสดง: none! important;}

นอกจากนี้ฉันต้องการทราบว่าไฟล์ใดมีผลกับวิธีนี้หรือไม่ ฉันยังไม่ได้ประสบปัญหาใด ๆ จนถึงตอนนี้


1
ไฟล์นี้สร้างขึ้นโดยอัตโนมัติโดยการปรับใช้ไฟล์คงที่ Magentos การเปลี่ยนแปลงจะหายไปทันทีที่ไฟล์ถูกสร้างขึ้นอีกครั้ง
เฟเบียน Schmengler

2
นี่ไม่ใช่คำถามคุณภาพเยี่ยม 2
Jalpesh Patel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.