J'utilise CE 1.9.1.0.
J'essaie de supprimer les étapes Informations sur l'expédition et Méthode d'expédition de la commande à la page, mais sans succès.
Peut-être que quelqu'un pourrait m'aider ou me diriger dans la bonne direction?
J'utilise CE 1.9.1.0.
J'essaie de supprimer les étapes Informations sur l'expédition et Méthode d'expédition de la commande à la page, mais sans succès.
Peut-être que quelqu'un pourrait m'aider ou me diriger dans la bonne direction?
Réponses:
Voici ce que j'ai fait.
J'ai supprimé l'étape d'expédition et utilisé une méthode d'expédition par défaut qui, je le sais, sera toujours disponible.
Je ne sais pas si c'est ce dont vous avez besoin, mais vous pouvez au moins l'utiliser comme point de départ.
Voici mon idée.
J'ai créé un nouveau module avec un enable/disable
paramètre de configuration de l'étape d'expédition, vous pouvez donc toujours réactiver l'étape d'expédition à partir de la system->configuration
section.
Créez donc le module StackExchange_Checkout
.
Vous aurez besoin des fichiers suivants.
app/etc/modules/StackExchange_Checkout.xml
- le dossier de déclaration
<?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
- le fichier de configuration dans lequel vous définissez les modèles, les blocs et réécrivez le bloc de paiement en une page. Il définit également une méthode d'expédition par défaut.
<?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
- le fichier système qui place le drapeau activé / désactivé pour l'étape d'expédition
<?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
- l'aide qui vérifie si l'étape d'expédition doit être désactivée
<?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
- le bloc de paiement écrasé
<?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
- remplacer le contrôleur onepage pour définir automatiquement la méthode d'expédition par défaut.
<?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));
}
}
}
Videz le cache et vous avez terminé.
Faites de votre produit un produit virtuel et il sera automatiquement supprimé.
J'ai une meilleure solution que celle de @marius qui n'a besoin d'aucune réécriture.
Vous devez toujours créer votre propre module, il y a des tonnes de tutoriels pour ça donc je ne l'expliquerai pas ici. Vous devez créer un observateur et le déclencher via le config.xml
. Vous devrez peut-être adapter le modèleapp/design/frontend/base/default/template/checkout/onepage.phtml
Dans votre 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>
Dans ton 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();
}
}
Je cherchais une solution plus facile depuis quelques jours car je ne voulais pas jouer avec les fichiers core de mage. J'ai donc trouvé ma propre solution.
Inspectez le div de la méthode d'expédition et recherchez le fichier css. Dans mon dossier,
"pub / static / frontend / myTheme / themeName / en_US / css / stye-m.css"
après cela, j'ai écrasé le css actuel, bien sûr j'ai fait une sauvegarde de mon fichier d'origine.
css:
.step-title, .totals.shipping.incl {display: none! important;} # checkout-shipping-method-load {display: none! important;}
Aussi, je voudrais savoir si des fichiers sont efficaces avec cette méthode. Je n'ai rencontré aucun problème jusqu'à présent.