Xóa các bước vận chuyển trong Onepage Checkout


14

Tôi đang sử dụng CE 1.9.1.0.

Tôi đang cố gắng loại bỏ các bước Thông tin vận chuyển và Phương thức giao hàng khỏi thanh toán onepage nhưng không thành công.

Có lẽ ai đó có thể giúp tôi ra hoặc chỉ cho tôi đi đúng hướng?



Liên kết trên là để kiểm tra onstep.
inrsaurabh

Câu trả lời:


33

Đây là những gì tôi đã làm.
Tôi đã loại bỏ bước vận chuyển và sử dụng một phương thức vận chuyển mặc định mà tôi biết sẽ luôn có sẵn.
Không chắc chắn nếu đây là những gì bạn cần nhưng ít nhất bạn có thể sử dụng nó như một điểm khởi đầu.
Đây là ý tưởng của tôi.
Tôi đã tạo một mô-đun mới với enable/disablecài đặt cấu hình bước vận chuyển, vì vậy bạn luôn có thể bật lại bước vận chuyển từ system->configurationphần đó.

Vì vậy, tạo các mô-đun StackExchange_Checkout.
Bạn sẽ cần các tập tin sau.

app/etc/modules/StackExchange_Checkout.xml - hồ sơ khai

<?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- tệp cấu hình nơi bạn xác định mô hình, khối và viết lại khối thanh toán onepage. Ngoài ra, nó đặt một phương thức vận chuyển mặc định.

<?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 - tệp hệ thống đặt cờ được bật / tắt cho bước vận chuyển

<?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 - người trợ giúp kiểm tra xem bước vận chuyển có bị vô hiệu hóa không

<?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 - khối thanh toán bị ghi đè

<?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 - ghi đè bộ điều khiển onepage để tự động đặt phương thức giao hàng mặc định.

<?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));
        }
    }
}

Xóa bộ nhớ cache và bạn đã hoàn tất.


Tôi vừa mới thực hiện điều này nhưng nhận được một thông báo cho tôi biết rằng phương thức giao hàng của tôi không hợp lệ?
Vince Pettit

@VincePettit. Tôi đã nêu trong câu trả lời rằng tôi đã sử dụng như một phương thức vận chuyển mặc định luôn có sẵn trong trường hợp của tôi. Có thể phương thức vận chuyển bạn sử dụng không phải lúc nào cũng có sẵn.
Marius

Làm thế nào để vô hiệu hóa thông tin vận chuyển?
Magento ngày 2

@Manojkothari Tôi không biết.
Marius

@Manojkothari nếu bạn thêm bất kỳ sản phẩm nào dưới dạng thông tin vận chuyển sản phẩm ảo và lựa chọn giao hàng sẽ không xuất hiện
Butterfly

7

Biến sản phẩm của bạn thành Sản phẩm ảo và nó sẽ tự động bị xóa.


1
Lưu ý rằng trong trường hợp này, bạn sẽ phải thay đổi tất cả các sản phẩm trên trang web thành ảo, đây là một công việc điên rồ và sẽ hoạt động nhiều hơn có thể gây ra sự cố với các quy trình Magento tiêu chuẩn khác.
Phong tục David

2
Lý tưởng là điều đúng đắn nếu bạn không muốn vận chuyển thông tin được thu thập bởi vì đó là sản phẩm ảo dành cho và tôi không thấy nó sẽ gây ra vấn đề với quy trình độc lập khác ..
Siddharth Vaghasia

Điều này cũng đúng với các sản phẩm có thể tải xuống. Xem tại đây .
quickshiftin

7

Tôi có một giải pháp tốt hơn một trong những @marius không cần viết lại.

Bạn vẫn cần tạo một mô-đun riêng, có rất nhiều hướng dẫn cho điều đó vì vậy tôi sẽ không giải thích nó ở đây. Bạn phải tạo một người quan sát và kích hoạt nó thông qua config.xml. Bạn có thể phải điều chỉnh mẫuapp/design/frontend/base/default/template/checkout/onepage.phtml

Trong của bạn 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>

Trong bạn 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();
    }
}

Nghe có vẻ ít phức tạp. Có cách nào để kiểm tra xem có nhiều hơn một phương thức giao hàng không và chỉ bỏ qua bước nếu đó là một phương thức?
Bernhard Prange

Bạn có thể cung cấp mã đầy đủ với lời giải thích?
Prashant Patil

-4

Tôi đã tìm kiếm một giải pháp dễ dàng hơn trong vài ngày qua vì tôi không muốn làm hỏng các tập tin lõi của pháp sư. Vì vậy, tôi đã đưa ra giải pháp của riêng tôi.

Kiểm tra div của phương thức vận chuyển và định vị tệp css. Trong trường hợp của tôi là

"pub / static / frontend / myTheme / themeName / en_US / css / stye-m.css"

Sau đó, tôi đã ghi đè lên css hiện tại, dĩ nhiên tôi đã sao lưu tập tin gốc của mình.

css:

.step-title, .totals.shipping.incl {display: none! Quan trọng;} # checkout-Shipping-method-load {display: none! Quan trọng;}

Ngoài ra, tôi muốn biết liệu có tập tin nào có hiệu lực với phương pháp này không. Tôi đã không phải đối mặt với bất kỳ vấn đề cho đến bây giờ.


1
Tập tin này được tạo tự động bởi triển khai tệp tĩnh Magentos. Thay đổi sẽ bị mất ngay sau khi các tệp được tạo lại.
Fabian Schmengler

2
đây không phải là câu hỏi magento 2
Jalpesh Patel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.