অনপেজ চেকআউটে শিপিং পদক্ষেপগুলি সরান


14

আমি সিই ব্যবহার করছি 1.9.1.0।

আমি অনেপেজ চেকআউট থেকে শিপিং তথ্য এবং শিপিং পদ্ধতির পদক্ষেপগুলি সরিয়ে দেওয়ার চেষ্টা করছি তবে কোনও সাফল্য নেই।

সম্ভবত কেউ আমাকে সাহায্য করতে পারে বা আমাকে সঠিক দিকে নির্দেশ করতে পারে?



উপরের লিঙ্কটি অনস্টিপ চেকআউটের জন্য।
ইনসৌরভ

উত্তর:


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 - ডিফল্ট শিপিং পদ্ধতিটি স্বয়ংক্রিয়ভাবে সেট করতে অনপেজ নিয়ামককে ওভাররাইড করুন।

<?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 আপনি ভার্চুয়াল পণ্যের শিপিং তথ্য এবং চালানের selction কোন পণ্য যোগ করুন যদি উপস্থিত হবে না
প্রজাপতি

7

আপনার পণ্যটিকে ভার্চুয়াল পণ্য হিসাবে তৈরি করুন এবং এটি স্বয়ংক্রিয়ভাবে সরানো হবে।


1
নোট করুন যে এক্ষেত্রে আপনাকে সাইটের সমস্ত পণ্যগুলিকে ভার্চুয়ালতে পরিবর্তন করতে হবে, এটি একটি পাগল পরিমাণ কাজ এবং অন্যান্য স্ট্যান্ডার্ড ম্যাজেন্টো প্রক্রিয়াগুলির সাথে সমস্যাযুক্ত সমস্যার চেয়ে কাজ করবে।
ডেভিড ম্যানার্স

2
আদর্শভাবে আপনি যদি তথ্য সংগ্রহ করার জন্য শিপিং না করতে চান তবে এটি করা ঠিক কারণ কারণ ভার্চুয়াল পণ্যটি এটি যা এবং আমি দেখতে পাচ্ছি না যে এটি অন্যান্য
স্ট্যান্ডার্ড

এটি ডাউনলোডযোগ্য পণ্যগুলির ক্ষেত্রেও সত্য। এখানে দেখুন ।
কুইকশিফ্টিন

7

আমার কাছে @ এমরিয়াসের চেয়ে ভাল সমাধান আছে যার কোনও পুনরায় লেখার প্রয়োজন নেই।

আপনার এখনও একটি নিজস্ব মডিউল তৈরি করতে হবে, এর জন্য প্রচুর টিউটোরিয়াল রয়েছে তাই আমি এটি এখানে ব্যাখ্যা করব না। আপনাকে একটি পর্যবেক্ষক তৈরি করতে হবে এবং এটির মাধ্যমে এটি ট্রিগার করতে হবে 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

আমি গত কয়েকদিন ধরে একটি সহজ সমাধানের সন্ধান করছিলাম কারণ আমি ম্যাজ কোর ফাইলগুলি নিয়ে গোলযোগ করতে চাইনি। সুতরাং, আমি আমার নিজের সমাধান নিয়ে এসেছি।

শিপিং পদ্ধতির ডিভিউ পরিদর্শন করুন এবং CSS ফাইলটি সন্ধান করুন। আমার ক্ষেত্রে ফাইল ছিল

"পাব / স্ট্যাটিক / ফ্রন্টএন্ড / myTheme / THEMENAME / en_US / সিএসএস / শূকরের খোঁয়াড়-m.css"

তার পরে আমি বর্তমান সিএসএসটি ওভাররাইট করব, অবশ্যই আমি আমার মূল ফাইলটির ব্যাকআপ করেছি।

CSS:

। পদক্ষেপ-শিরোনাম, .totals.shipping.incl {প্রদর্শন: কিছুই নয়! গুরুত্বপূর্ণ; check # চেকআউট-শিপিং-পদ্ধতি-লোড {প্রদর্শন: কিছুই নেই! গুরুত্বপূর্ণ;}

এছাড়াও, আমি জানতে চাই যে এই পদ্ধতিতে কোনও ফাইল কার্যকর রয়েছে কিনা। আমি এখন অবধি কোন সমস্যার মুখোমুখি হই নি।


1
এই ফাইলটি ম্যাজেন্টোস স্ট্যাটিক ফাইল স্থাপনার দ্বারা স্বয়ংক্রিয়ভাবে উত্পন্ন হয়। ফাইলগুলি আবার উত্পন্ন হওয়ার সাথে সাথে পরিবর্তনগুলি হারিয়ে যাবে।
ফ্যাবিয়ান শেমঙ্গলার

2
এটি ম্যাজেন্টো 2 প্রশ্ন নয়
জলপেশ প্যাটেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.