मैं CE 1.9.1.0 का उपयोग कर रहा हूं।
मैं onepage चेकआउट से शिपिंग सूचना और शिपिंग विधि चरणों को हटाने की कोशिश कर रहा हूं, लेकिन कोई सफलता नहीं है।
शायद कोई मेरी मदद कर सकता है या मुझे सही दिशा में इशारा कर सकता है?
मैं CE 1.9.1.0 का उपयोग कर रहा हूं।
मैं onepage चेकआउट से शिपिंग सूचना और शिपिंग विधि चरणों को हटाने की कोशिश कर रहा हूं, लेकिन कोई सफलता नहीं है।
शायद कोई मेरी मदद कर सकता है या मुझे सही दिशा में इशारा कर सकता है?
जवाबों:
यहाँ मैंने क्या किया है।
मैंने शिपिंग चरण को हटा दिया और डिफ़ॉल्ट शिपिंग विधि का उपयोग किया जो मुझे पता है कि हमेशा उपलब्ध होने वाला है।
निश्चित नहीं है कि यह वही है जो आपको चाहिए लेकिन आप कम से कम इसे एक प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं।
यहाँ मेरा विचार है
मैंने एक enable/disable
शिपिंग कदम कॉन्फ़िगरेशन सेटिंग के साथ एक नया मॉड्यूल बनाया है , ताकि आप हमेशा system->configuration
अनुभाग से शिपिंग चरण को फिर से सक्षम कर सकें ।
इसलिए मॉड्यूल बनाएं StackExchange_Checkout
।
आपको निम्न फ़ाइलों की आवश्यकता होगी।
app/etc/modules/StackExchange_Checkout.xml
- घोषणा फ़ाइल
<?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
- कॉन्फ़िगरेशन फ़ाइल जहां आप मॉडल परिभाषित करते हैं, ब्लॉक और ऑनपेग चेकआउट ब्लॉक को फिर से लिखना। इसके अलावा यह एक डिफ़ॉल्ट शिपिंग विधि सेट करता है।
<?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
- सिस्टम फ़ाइल जो शिपिंग कदम के लिए सक्षम / अक्षम ध्वज को रखती है
<?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
- सहायक जो जाँचता है कि शिपिंग कदम अक्षम होना चाहिए
<?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
- अधिलेखित चेकआउट ब्लॉक
<?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
- स्वचालित रूप से डिफ़ॉल्ट शिपिंग विधि सेट करने के लिए onepage कंट्रोलर को ओवरराइड करें।
<?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));
}
}
}
कैश साफ़ करें और आप कर रहे हैं।
अपने उत्पाद को वर्चुअल प्रोडक्ट के रूप में बनाएँ और यह अपने आप हट जाएगा।
मेरे पास @marius से बेहतर समाधान है जिसे किसी भी पुनर्लेखन की आवश्यकता नहीं है।
आपको अभी भी अपना खुद का मॉड्यूल बनाने की ज़रूरत है, इसके लिए बहुत सारे ट्यूटोरियल हैं इसलिए मैं इसे यहाँ नहीं समझाऊँगा। आपको एक पर्यवेक्षक बनाना होगा और इसे इसके माध्यम से ट्रिगर करना होगा config.xml
। आपको खाका अनुकूलित करना पड़ सकता हैapp/design/frontend/base/default/template/checkout/onepage.phtml
अपने में 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>
अपने में 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();
}
}
मैं पिछले कुछ दिनों के लिए एक आसान समाधान की तलाश में था क्योंकि मैं दाना कोर फ़ाइलों के साथ गड़बड़ नहीं करना चाहता था। इसलिए, मैं अपने समाधान के साथ आया।
शिपिंग विधि के div का निरीक्षण करें और css फ़ाइल का पता लगाएं। मेरे मामले में फ़ाइल में था
"पब / स्थिर / दृश्यपटल / myTheme / THEMENAME / en_US / सीएसएस / stye-m.css"
उसके बाद मैं वर्तमान सीएसएस को अधिलेखित करता हूं, टोर्कोस मैंने अपनी मूल फ़ाइल का बैकअप किया।
सीएसएस:
.step- शीर्षक, .totals.shipping.incl {डिस्प्ले: कोई नहीं! महत्वपूर्ण;} # चेकआउट-शिपिंग-मेथड-लोड {डिस्प्ले: कोई नहीं! महत्वपूर्ण;}
इसके अलावा, मैं यह जानना चाहूंगा कि क्या कोई फाइल इस पद्धति से प्रभावी है। मैंने अब तक किसी भी मुद्दे का सामना नहीं किया है।