Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Magento skip shipping method on checkout page

Tags:

php

magento

I have two shipping method , Free shipping and flat rate , where free shipping has minimum shipping amount 1500 and flat rate has fixed amount of 135.

I have to skip shipping method option on one step checkout page, but it should be applied to total amount in cart.

I skipped shipping method on checkout page, but at the end of payment, it gives me error, that please specify shipping method

like image 877
Nilesh Avatar asked Aug 19 '14 11:08

Nilesh


People also ask

How do I change the default shipping method in Magento 2?

How to Configure Magento 2 Shipping Settings? Before configuring the default shipping methods available in Magento 2 you have to configure the default shipping settings. For this go to Stores > Configuration > Sales > Shipping Settings and configure Origin and Shipping Policy Parameters.

How do I change shipping in Magento?

On the Admin sidebar, go to Stores > Settings > Configuration. In the left panel, expand the Sales section and choose Shipping Methods. Scroll down to the Magento Shipping section to configure the shipping profile settings. Click Configure to complete each profile.


1 Answers

you need to override the onepage controller and onepage block

Please refer below code.

**Magento: Skip Shipping Method from onepage checkout**

First override following files(i.e. in local directory) rather than changing the core:
1) app/code/core/Mage/Checkout/Block/Onepage/Onepage.php
2) app/code/core/mage/checkout/controller/Onepagecontrollers.php
3) app/code/core/Mage/Sales/Model/Service/Quote.php
4) app/design/frontend/base/default/template/checkout/onepage/progress.phtml
5) app/code/core/Mage/Sales/Model/Service/Quote.php

Once done follow the below steps:

**Step 1: app/code/local/Mage/Checkout/Block/Onepage.php**

Change the line:
$stepCodes = array('billing', 'shipping', 'shipping_method', 'payment', 'review');

In Magento 1.7+ you will find $stepCodes in for each just replace with below code 
with:
$stepCodes = array('billing', 'shipping', 'payment', 'review');


**Step 2: app/code/local/Mage/Checkout/controller/Onepagecontrollers.php**

Change the line:
protected $_sectionUpdateFunctions = array(
'payment-method' => '_getPaymentMethodsHtml',
'shpping-method' => '_getShippingMeghtoHtml',
'review' => '_getReviewHtml',
);

with:
protected $_sectionUpdateFunctions = array(
'payment-method' => '_getPaymentMethodsHtml',
'review' => '_getReviewHtml',
);


**Step 3: app/code/local/Mage/Checkout/controller/Onepagecontrollers.php**

Change saveBillingAction() function with:

public function saveBillingAction()
{
if ($this->_expireAjax()) {
return;
}
if ($this->getRequest()->isPost()) {
$postData = $this->getRequest()->getPost('billing', array());
$data = $this->_filterPostData($postData);
$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) {
$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));
}
}

Change saveShippingAction() function with:

public function saveShippingAction()
{
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);

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

**Step 4: app/code/local/Mage/Sales/Model/Service/Quote.php**

Change _validate() function with:

protected function _validate()
{
$helper = Mage::helper('sales');
if (!$this->getQuote()->isVirtual()) {
$address = $this->getQuote()->getShippingAddress();
$addressValidation = $address->validate();
if ($addressValidation !== true) {
Mage::throwException(
$helper->__('Please check shipping address information. %s', implode(' ', $addressValidation))
);
}
}

$addressValidation = $this->getQuote()->getBillingAddress()->validate();
if ($addressValidation !== true) {
Mage::throwException(
$helper->__('Please check billing address information. %s', implode(' ', $addressValidation))
);
}

if (!($this->getQuote()->getPayment()->getMethod())) {
Mage::throwException($helper->__('Please select a valid payment method.'));
}

return $this;
}


**Step 5: app/design/frontend/default/default/template/checkout/onepage/progress.phtml**

Remove the shipping method block.

**Step 6: app/locale/en_US/template/email/sales/order_new.html**

Remove the shipping method block(i.e. {{var order.getShippingDescription()}}).
like image 134
Manoj Chaurasia Avatar answered Oct 08 '22 21:10

Manoj Chaurasia