Onepage Checkout में शिपिंग चरण निकालें


14

मैं CE 1.9.1.0 का उपयोग कर रहा हूं।

मैं onepage चेकआउट से शिपिंग सूचना और शिपिंग विधि चरणों को हटाने की कोशिश कर रहा हूं, लेकिन कोई सफलता नहीं है।

शायद कोई मेरी मदद कर सकता है या मुझे सही दिशा में इशारा कर सकता है?



उपरोक्त लिंक ऑनस्टेप चेकआउट के लिए है।
अरसौरभ

जवाबों:


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- कॉन्फ़िगरेशन फ़ाइल जहां आप मॉडल परिभाषित करते हैं, ब्लॉक और ऑनपेग चेकआउट ब्लॉक को फिर से लिखना। इसके अलावा यह एक डिफ़ॉल्ट शिपिंग विधि सेट करता है।

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

कैश साफ़ करें और आप कर रहे हैं।


मैंने अभी इसे लागू किया है लेकिन मुझे एक संदेश मिला है जिसमें कहा गया है कि मेरी शिपिंग विधि अमान्य है?
विंस पेटिट

@VincePettit। मैंने जवाब में कहा कि मैंने डिफ़ॉल्ट रूप से एक शिपिंग विधि का उपयोग किया है जो हमेशा मेरे मामले में उपलब्ध है। हो सकता है कि आपके द्वारा उपयोग की जाने वाली शिपिंग विधि हमेशा उपलब्ध न हो।
मारियस

शिपिंग जानकारी को अक्षम कैसे करें?
मैग्नेटो 2

@Manojkothari मुझे नहीं पता।
मेरियस

@Manojkothari यदि आप किसी उत्पाद को वर्चुअल उत्पाद शिपिंग जानकारी के रूप में जोड़ते हैं और शिपमेंट सेलेक्शन दिखाई नहीं देगा
बटरफ्लाई

7

अपने उत्पाद को वर्चुअल प्रोडक्ट के रूप में बनाएँ और यह अपने आप हट जाएगा।


1
ध्यान दें कि इस मामले में आपको साइट पर सभी उत्पादों को आभासी में बदलना होगा, जो काम की एक पागल राशि है और अन्य मानक Magento प्रक्रियाओं के साथ संभावित कारण समस्याओं की तुलना में काम करेगा।
डेविड मैनर्स 12

2
आदर्श रूप से यह सही बात है यदि आप जानकारी एकत्र नहीं करना चाहते हैं क्योंकि वह है जो वर्चुअल उत्पाद है और मैं नहीं देखता कि यह अन्य स्टैंडर प्रक्रिया के साथ समस्या का कारण बनेगा ..
सिद्धार्थ वाघसिया

यह भी डाउनलोड करने योग्य उत्पादों का सच है। देखें यहाँ
क्विकशिफ्टिन

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

कम जटिल लगता है। क्या यह जांचने का कोई तरीका है कि क्या एक से अधिक शिपिंग विधि है और केवल चरण छोड़ें यदि यह एक है?
बर्नहार्ड पेंज

क्या आप स्पष्टीकरण के साथ पूर्ण कोड दे सकते हैं?
प्रशांत पाटिल

-4

मैं पिछले कुछ दिनों के लिए एक आसान समाधान की तलाश में था क्योंकि मैं दाना कोर फ़ाइलों के साथ गड़बड़ नहीं करना चाहता था। इसलिए, मैं अपने समाधान के साथ आया।

शिपिंग विधि के div का निरीक्षण करें और css फ़ाइल का पता लगाएं। मेरे मामले में फ़ाइल में था

"पब / स्थिर / दृश्यपटल / myTheme / THEMENAME / en_US / सीएसएस / stye-m.css"

उसके बाद मैं वर्तमान सीएसएस को अधिलेखित करता हूं, टोर्कोस मैंने अपनी मूल फ़ाइल का बैकअप किया।

सीएसएस:

.step- शीर्षक, .totals.shipping.incl {डिस्प्ले: कोई नहीं! महत्वपूर्ण;} # चेकआउट-शिपिंग-मेथड-लोड {डिस्प्ले: कोई नहीं! महत्वपूर्ण;}

इसके अलावा, मैं यह जानना चाहूंगा कि क्या कोई फाइल इस पद्धति से प्रभावी है। मैंने अब तक किसी भी मुद्दे का सामना नहीं किया है।


1
यह फ़ाइल स्वचालित रूप से Magentos स्थिर फ़ाइल परिनियोजन द्वारा उत्पन्न होती है। जैसे ही फाइलें दोबारा जेनरेट होंगी, वैसे ही चेंज हो जाएंगे।
फाबियान शेंगलर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.