Entfernen Sie die Versandschritte in Onepage Checkout

14

Ich verwende CE 1.9.1.0.

Ich versuche, die Schritte "Versandinformationen" und "Versandart" aus der Online-Kaufabwicklung zu entfernen, aber ohne Erfolg.

Vielleicht könnte mir jemand weiterhelfen oder mich in die richtige Richtung weisen?

JackWhite
quelle
Der obige Link ist für die Online-Kaufabwicklung.
Inrsaurabh

Antworten:

33

Folgendes habe ich getan.
Ich habe den Versandschritt entfernt und eine Standardversandmethode verwendet, von der ich weiß, dass sie immer verfügbar sein wird.
Ich bin mir nicht sicher, ob Sie dies benötigen, aber Sie können es zumindest als Ausgangspunkt verwenden.
Hier ist meine Idee.
Ich habe ein neues Modul mit einer enable/disableVersandschritt-Konfigurationseinstellung erstellt, damit Sie den Versandschritt in diesem system->configurationAbschnitt immer wieder aktivieren können .

Also erstelle das Modul StackExchange_Checkout.
Sie benötigen die folgenden Dateien.

app/etc/modules/StackExchange_Checkout.xml - die Anmeldedatei

<?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- Die Konfigurationsdatei, in der Sie Modelle und Blöcke definieren und den Onepage-Checkout-Block neu schreiben. Außerdem wird eine Standardversandmethode festgelegt.

<?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 - Die Systemdatei, in der das Kennzeichen "Aktiviert / Deaktiviert" für den Versandschritt platziert ist

<?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 - der Helfer, der prüft, ob der Versandschritt deaktiviert werden soll

<?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 - der überschriebene Kassenblock

<?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 - Überschreiben Sie den Onepage-Controller, um die Standardversandmethode automatisch festzulegen.

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

Leeren Sie den Cache und Sie sind fertig.

Marius
quelle
Ich habe das gerade implementiert, bekomme aber eine Meldung, dass meine Versandmethode ungültig ist?
Vince Pettit
@VincePettit. In der Antwort habe ich angegeben, dass ich standardmäßig eine Versandmethode verwendet habe, die in meinem Fall immer verfügbar ist. Möglicherweise ist die von Ihnen verwendete Versandart nicht immer verfügbar.
Marius
Wie kann ich Versandinformationen deaktivieren?
Magento, 2.
@Manojkothari Ich weiß es nicht.
Marius
@Manojkothari, wenn Sie ein Produkt als virtuelles Produkt hinzufügen Versandinformationen und Versandauswahl wird nicht angezeigt
Schmetterling
7

Machen Sie Ihr Produkt als virtuelles Produkt und es wird automatisch entfernt.

Siddharth Vaghasia
quelle
1
Beachten Sie, dass Sie in diesem Fall alle Produkte auf der Site auf virtuell umstellen müssen, was eine verrückte Menge an Arbeit ist und wahrscheinlich Probleme mit anderen Standard-Magento-Prozessen verursacht.
David Manners
2
Im Idealfall ist es richtig , was zu tun ist, wenn Sie nicht wollen , Informationen zu Versand gesammelt werden , weil das ist , was für eine virtuelles Produkt ist und ich nicht mit anderem standar Prozess verursacht Problem sehen ..
Siddharth Vaghasia
Dies gilt auch für herunterladbare Produkte. Sehen Sie hier .
Quickshiftin
7

Ich habe eine bessere Lösung als die von @marius, die keine Umschreibungen benötigt.

Sie müssen noch ein eigenes Modul erstellen. Dafür gibt es jede Menge Tutorials, deshalb werde ich es hier nicht erklären. Sie müssen einen Beobachter anlegen und über den auslösen config.xml. Möglicherweise müssen Sie die Vorlage anpassenapp/design/frontend/base/default/template/checkout/onepage.phtml

In Ihrem 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>

In deiner 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é
quelle
klingt weniger kompliziert Gibt es eine Möglichkeit, zu überprüfen, ob es mehr als eine Versandmethode gibt, und nur einen Schritt zu überspringen, wenn es eine gibt?
Bernhard Prange
Können Sie den vollständigen Code mit einer Erklärung angeben?
Prashant Patil
-4

Ich habe in den letzten Tagen nach einer einfacheren Lösung gesucht, weil ich mich nicht mit Magierkerndateien anlegen wollte. Also habe ich mir eine eigene Lösung ausgedacht.

Überprüfen Sie die Versandart und suchen Sie die CSS-Datei. In meinem Fall lag die Akte bei

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

Danach habe ich das aktuelle CSS überschrieben. Natürlich habe ich eine Sicherungskopie meiner Originaldatei erstellt.

CSS:

.step-title, .totals.shipping.incl {Anzeige: keine! wichtig;} # checkout-shipping-method-load {Anzeige: keine! wichtig;}

Außerdem würde ich gerne wissen, ob Dateien mit dieser Methode wirksam sind. Ich habe bis jetzt keine Probleme gehabt.

Zeeshu
quelle
1
Diese Datei wird automatisch durch die Bereitstellung statischer Magentos-Dateien generiert. Änderungen gehen verloren, sobald die Dateien erneut generiert werden.
Fabian Schmengler
2
Dies ist nicht Magento 2 Frage
Jalpesh Patel