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?
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?
Antworten:
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/disable
Versandschritt-Konfigurationseinstellung erstellt, damit Sie den Versandschritt in diesem system->configuration
Abschnitt 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.
Machen Sie Ihr Produkt als virtuelles Produkt und es wird automatisch entfernt.
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();
}
}
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.