Onepage Checkout'ta Gönderim adımlarını kaldırın


14

CE 1.9.1.0 kullanıyorum.

Gönderim Bilgileri ve Gönderim Yöntemi adımlarını sayfadaki ödeme işleminden kaldırmaya çalışıyorum ancak başarılı olamadım.

Belki biri bana yardım edebilir ya da beni doğru yönde gösterebilir?



Yukarıdaki bağlantı, adım adım ödeme içindir.
inrsaurabh

Yanıtlar:


33

İşte yaptığım şey.
Gönderim adımını kaldırdım ve her zaman kullanılabilir olacağını bildiğim varsayılan bir gönderim yöntemi kullandım.
İhtiyacınız olanın bu olduğundan emin değilim ama en azından başlangıç ​​noktası olarak kullanabilirsiniz.
İşte benim fikrim. Gönderim adımı yapılandırma ayarıyla
yeni bir modül oluşturdum enable/disable, böylece gönderim adımını her zaman system->configurationbölümden yeniden etkinleştirebilirsiniz .

Böylece modülü oluşturun StackExchange_Checkout.
Aşağıdaki dosyalara ihtiyacınız olacak.

app/etc/modules/StackExchange_Checkout.xml - beyan dosyası

<?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- modelleri, blokları tanımladığınız ve sayfadaki ödeme bloğunu yeniden yazdığınız yapılandırma dosyası. Ayrıca varsayılan bir gönderim yöntemi ayarlar.

<?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 - gönderim adımı için etkin / devre dışı bayrağını yerleştiren sistem dosyası

<?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 - nakliye adımının devre dışı bırakılıp bırakılmayacağını kontrol eden yardımcı

<?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 - üzerine yazılan ödeme bloğu

<?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 - varsayılan gönderim yöntemini otomatik olarak ayarlamak için sayfa denetleyicisini geçersiz kılın.

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

Önbelleği temizleyin ve işiniz bitti.


Bunu yeni uyguladım ancak gönderim yöntemimin geçersiz olduğunu belirten bir mesaj mı aldınız?
Vince Pettit

@VincePettit. Cevabımda varsayılan olarak her zaman benim durumumda bulunan bir gönderim yöntemi kullandığımı belirtmiştim. Belki kullandığınız nakliye yöntemi her zaman mevcut değildir.
Marius

Gönderim bilgileri nasıl devre dışı bırakılır?
Magento 2

@Manojkothari Bilmiyorum.
Marius

@Manojkothari herhangi bir ürünü sanal ürün olarak eklerseniz gönderi bilgileri ve gönderi seçimleri görünmez
Butterfly

7

Ürününüzü Sanal Ürün olarak yapın, ürün otomatik olarak kaldırılacaktır.


1
Bu durumda, sitedeki tüm ürünleri sanal olarak değiştirmeniz gerekecektir, bu da çılgın bir iştir ve diğer standart Magento süreçleriyle ilgili sorunlara neden olacaktan daha fazla çalışacaktır.
David Manners

2
İdeal olarak, toplanacak bilgileri göndermek istemiyorsanız yapmak doğru bir şeydir çünkü sanal ürün bunun içindir ve diğer standart süreçlerle ilgili soruna neden olacağını görmüyorum ..
Siddharth Vaghasia

Bu, indirilebilir ürünler için de geçerlidir. Buraya bakın .
quickshiftin

7

Herhangi bir yeniden yazmaya ihtiyaç duymayan Marius'tan daha iyi bir çözümüm var.

Hala kendi modülünü oluşturmanız gerekiyor, bunun için tonlarca öğretici var, bu yüzden burada açıklamayacağım. Bir gözlemci oluşturmalı ve onu tetiklemelisiniz config.xml. Şablonu uyarlamanız gerekebilirapp/design/frontend/base/default/template/checkout/onepage.phtml

Sizin 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>

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

daha az karmaşık geliyor. Birden fazla gönderim yöntemi olup olmadığını kontrol etmenin ve yalnızca bir tane varsa adımı atlamanın bir yolu var mı?
Bernhard Prange

Açıklama ile tam kod verebilir misiniz?
Prashant Patil

-4

Son birkaç gün için daha kolay bir çözüm arıyordum çünkü mage çekirdek dosyalarıyla uğraşmak istemedim. Böylece kendi çözümümü buldum.

Shipping div yöntemini inceleyin ve css dosyasını bulun. Benim durumumda dosya

"Pub / statik / kullanıcı arayüzü / Mytheme / THEMENAME / tr / css / arpacık-m.css"

Bundan sonra geçerli css, tabii ki orijinal dosyama bir yedek yaptım.

css:

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

Ayrıca, herhangi bir dosyanın bu yöntemle etkisi olup olmadığını bilmek istiyorum. Şimdiye kadar herhangi bir sorunla karşılaşmadım.


1
Bu dosya otomatik olarak Magentos statik dosya dağıtımı tarafından oluşturulur. Dosyalar yeniden oluşturulur oluşturulmaz değişiklikler kaybedilecektir.
Fabian Schmengler

2
Bu eflatun 2 soru değil
Jalpesh Patel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.