2010-12-17 5 views
5

मैंने पहले कई मॉड्यूल लिखे हैं लेकिन किसी कारण से मेरा शिपिंग मॉड्यूल एक एक्सटिटिंग मैग्नेटो शिपिंग विधि को ओवरराइड नहीं करेगा। क्या यह अनुमति है? मुझे यहां क्या समझ नहीं आ रहा है? मॉड्यूल नाम कॉन्फ़िगरेशन क्षेत्र के उन्नत टैब में दिखाई देता है, इसलिए यह लोड हो रहा है, लेकिन कुछ भी नहीं हो रहा है। कोई संकेत?एक शिपिंग विधि को ओवरराइड करना - मुझे क्या याद आ रहा है

कोड

आदि/मॉड्यूल/Ssi_Shipping.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Ssi_Shipping> 
      <active>true</active> 
      <codepool>local</codepool> 
     </Ssi_Shipping> 
    </modules> 
</config> 

स्थानीय/ssi/शिपिंग/etc.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Ssi_Shipping> 
      <version>0.1.0</version> 
     </Ssi_Shipping> 
    </modules> 
    <global> 
     <models> 
      <shipping> 
       <rewrite> 
        <carrier_tablerate>Ssi_Shipping_Model_Carrier_Tablerate</carrier_tablerate> 
       </rewrite> 

      </shipping> 
     </models> 
    </global> 
</config> 

स्थानीय/ssi/शिपिंग/मॉडल/कैरियर/Tablerate .php

<?php 
class Ssi_Shipping_Model_Carrier_Tablerate 
    extends Mage_Shipping_Model_Carrier_Tablerate { 

     public function isActive() 
     { 
      Mage::log("here! Ssi_Shipping_Model_Carrier_Tablerate"); 

      // check to see if it's disabled 
      if (parent::isActive() == false) 
       return false; 

      // check in the shopping cart 
      foreach(Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item){ 
       if ($item->getDeliveryFlag() == "test") 
        return true; 
      } 

      // if nothing is found then disable this option. 
      return false; 

     } 


    } 

उत्तर

0

इस एक के माध्यम से एक सा काम करने के बाद, मैंने पाया कि शिपिंग नियंत्रक ओवरराइड करने के लिए एक ही रास्ता स्थानीय कोड फ़ोल्डर में फ़ाइल (और निर्देशिका संरचना) का डुप्लिकेट बनाने के लिए किया गया था। तब मैं मूल रूप से कोड को ट्विक कर सकता था।

यह सुनिश्चित नहीं है कि क्यों Magento इन शिपिंग कार्यों के मानक ओवरराइडिंग की अनुमति नहीं देता है, लेकिन कम से कम एक काम है।

+0

मैं दृढ़ता से इसकी अनुशंसा नहीं करता हूं। वाहक को ओवरराइड करने का एक साफ तरीका है, मेरा जवाब देखें। –

1

चे सीके पहले कि मॉडल को ओवरराइड किया जा रहा है। इस प्रयास करें:

var_dump(get_class(Mage::getModel("shipping/carrier_tablerate"))); 
+0

मैं इसे कहां रखूंगा? पेज पर कहीं भी? – Chris

+0

मैं एक फ़ाइल रखता हूं जो ढांचे को शुरू करता है लेकिन मुझे "स्क्रैचबोर्ड" (index.php फ़ाइल का लगभग क्लोन संस्करण) देता है, जल्दी होने के लिए, आपको इसे टेम्पलेट में डालने में सक्षम होना चाहिए, उदाहरण के लिए, और ठीक हो । बस इसे बाद में हटाने के लिए याद रखें। –

12

एक तरीका होता है, लेकिन यह स्पष्ट नहीं है और शिपिंग मॉड्यूल स्रोत ब्राउज़ करने के लिए मुझे आवश्यक:

आप को देखें, तो Mage_Shipping_Model_Config, तो आप उस कोड दाना के लिए पैरामीटर के रूप में उपयोग किया जाता है की खोज करेंगे :: getModel () स्टोर विन्यास से लिया जाता है। यह कोड मानक कोड नहीं है जैसे 'शिपिंग/carrier_tablerate', इसलिए यह सामान्य रूप से ओवरराइड करने में मदद नहीं करता है।

अब आपको पता होना चाहिए कि यह कोड क्या है। उदाहरण के लिए मैं matrixrate वाहक ओवरराइड करने के लिए चाहता था, इसलिए मैं इसे इस तरह का परीक्षण किया:

$carrierConfig = Mage::getStoreConfig('carriers/matrixrate') 
var_dump($carrierConfig['model']); 

हाँ, आप पेज अस्थायी पर कहीं भी इस कोड को रख सकते हैं, लेकिन यह इस तरह की चीजों के लिए एक अलग फाइल करने के लिए उपयोगी है जो कर सकते हैं (दाना के साथ शुरू :: एप्लिकेशन() Magento प्रारंभ करने में) कमांड लाइन से चलाया जा

मेरे मामले में कोड matrixrate_shipping/carrier_matrixrate था, इसलिए मुझे लगता है कि जैसे मेरी config.xml बदलना पड़ा:

<global> 
    <models> 
     <matrixrate_shipping> 
      <rewrite> 
       <carrier_matrixrate>my_class_name</carrier_matrixrate> 
      </rewrite> 
     </matrixrate_shipping> 
    </models> 
<global> 
    <models> 
     <matrixrate> 
      <rewrite> 
       <carrier_matrixrate>my_class_name</carrier_matrixrate> 
      </rewrite> 
     </matrixrate> 
    </models> 

शुभकामनाएं!

+0

दोस्त, इस के लिए धन्यवाद, यह मुझे कुछ समय के लिए सिरदर्द दे रहा है – Relja

0

यह थोड़ी देर हो गया है लेकिन मुझे पिछले दिनों में एक ही समस्या थी। मैं फ्रीशिपिंग और फ्लैट्रेट शिपिंग विधियों को ओवरराइड करना चाहता था और फैब के जवाब के अलावा मुझे निम्नलिखित कोड आदि/config.xml में जोड़ना पड़ा। मेरे मामले में मूल मान ऐप/कोड/कोर/मेज/शिपिंग/आदि/config.xml में स्थित हैं।

<?xml version="1.0"?> 
<config> 
    ... 
    <default> 
     <carriers> 
      <flatrate> 
       <model>your_module/shipping_carrier_flatrate</model> 
      </flatrate> 
      <freeshipping> 
       <model>your_module/shipping_carrier_freeshipping</model> 
      </freeshipping> 
     </carriers> 
    </default> 
</config> 

मॉडल मान उदाहरण हैं। आपको उन्हें अपने सही पथ से बदलना होगा।

+0

क्या आप कृपया शिपिंग_आरियर_फ्लैट्रेट क्लास के अंदर क्या साझा कर सकते हैं –

0

यदि किसी और को इस समस्या का सामना करना पड़ रहा है और समाधान के लिए यहां आया है, तो ऐसा लगता है कि ओपी ने मॉड्यूल फ़ाइल में codepool का उपयोग किया है, जहां यह codePool (पूंजी पी नोटिस) होना चाहिए।

संबंधित मुद्दे