Hapus langkah Pengiriman di Onsite Checkout

14

Saya menggunakan CE 1.9.1.0.

Saya mencoba menghapus langkah-langkah Informasi Pengiriman dan Metode Pengiriman dari checkout di situs tetapi tidak berhasil.

Mungkin seseorang bisa membantu saya atau mengarahkan saya ke arah yang benar?

JackWhite
sumber
Tautan di atas adalah untuk checkout onstep.
inrsaurabh

Jawaban:

33

Inilah yang telah saya lakukan.
Saya menghapus langkah pengiriman dan menggunakan metode pengiriman default yang saya tahu akan selalu tersedia.
Tidak yakin apakah ini yang Anda butuhkan tetapi setidaknya Anda bisa menggunakannya sebagai titik awal.
Ini ideku.
Saya membuat modul baru dengan enable/disablepengaturan konfigurasi langkah pengiriman, sehingga Anda selalu dapat mengaktifkan kembali langkah pengiriman dari system->configurationbagian.

Jadi buat modul StackExchange_Checkout.
Anda akan membutuhkan file-file berikut.

app/etc/modules/StackExchange_Checkout.xml - file deklarasi

<?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- file konfigurasi tempat Anda menentukan model, blok, dan tulis ulang blok checkout di halaman. Juga menetapkan metode pengiriman default.

<?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 - file sistem yang menempatkan bendera yang diaktifkan / dinonaktifkan untuk langkah pengiriman

<?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 - pembantu yang memeriksa apakah langkah pengiriman harus dinonaktifkan

<?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 - blok checkout ditimpa

<?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 - menimpa pengontrol di tempat untuk mengatur secara otomatis metode pengiriman default.

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

Bersihkan cache dan Anda selesai.

Marius
sumber
Saya baru saja mengimplementasikan ini tetapi mendapat pesan yang memberitahukan bahwa metode pengiriman saya tidak valid?
Vince Pettit
@VincePettit. Saya menyatakan dalam jawaban yang saya gunakan sebagai metode pengiriman default yang selalu tersedia dalam kasus saya. Mungkin metode pengiriman yang Anda gunakan tidak selalu tersedia.
Marius
Bagaimana cara menonaktifkan informasi pengiriman?
Magento 2
@Manojkothari saya tidak tahu.
Marius
@Manojkothari jika Anda menambahkan produk apa pun sebagai info pengiriman produk virtual dan pilihan pengiriman tidak akan muncul
Butterfly
7

Jadikan produk Anda sebagai Produk Virtual dan secara otomatis akan dihapus.

Siddharth Vaghasia
sumber
1
Perhatikan bahwa dalam hal ini Anda harus mengubah semua produk di situs menjadi virtual, yang merupakan pekerjaan yang gila-gilaan dan akan berhasil daripada kemungkinan menyebabkan masalah dengan proses Magento standar lainnya.
David Manners
2
Idealnya adalah hal yang benar untuk dilakukan jika Anda tidak ingin mengirimkan informasi yang akan dikumpulkan karena itulah produk virtual untuk dan saya tidak melihatnya akan menyebabkan masalah dengan proses standar lainnya ..
Siddharth Vaghasia
Ini juga berlaku untuk produk yang dapat diunduh. Lihat di sini .
quickshiftin
7

Saya punya solusi yang lebih baik daripada @marius yang tidak membutuhkan penulisan ulang.

Anda masih perlu membuat modul sendiri, ada banyak tutorial untuk itu jadi saya tidak akan menjelaskannya di sini. Anda harus membuat pengamat dan memicunya melalui config.xml. Anda mungkin harus menyesuaikan templatapp/design/frontend/base/default/template/checkout/onepage.phtml

Di Anda 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>

Di Anda 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();
    }
}
Sylvain Rayé
sumber
terdengar tidak rumit. Apakah ada cara untuk memeriksa apakah ada lebih dari satu metode pengiriman dan hanya melewati langkah jika itu salah satu?
Bernhard Prange
Bisakah Anda memberikan kode lengkap dengan penjelasan?
Prashant Patil
-4

Saya mencari solusi yang lebih mudah untuk beberapa hari terakhir karena saya tidak ingin mengacaukan file inti mage. Jadi, saya datang dengan solusi saya sendiri.

Periksa div metode pengiriman dan cari file css. Dalam file kasus saya berada di

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

setelah itu saya menimpa css saat ini, tentu saja saya melakukan backup dari file asli saya.

css:

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

Juga, saya ingin tahu apakah ada file yang berpengaruh dengan metode ini. Saya belum menghadapi masalah apa pun sampai sekarang.

Zeeshu
sumber
1
File ini secara otomatis dihasilkan oleh penyebaran file statis Magentos. Perubahan akan hilang segera setelah file dihasilkan lagi.
Fabian Schmengler
2
ini bukan pertanyaan
magento