2010-12-17 8 views
5

Ich habe viele viele Module geschrieben, aber aus irgendeinem Grund wird mein Versandmodul eine bestehende Magneto Versandmethode nicht überschreiben. Ist das erlaubt? Was fehlt mir hier? Der Modulname wird auf der erweiterten Registerkarte des Konfigurationsbereichs angezeigt, sodass er geladen wird, aber nichts passiert. Irgendwelche Hinweise?Eine Versandmethode überschreiben - Was mir fehlt

-Code

etc/modules/Ssi_Shipping.xml

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

local/Ssi/Versand/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> 

local/Ssi/Versand/Model/Carrier/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; 

     } 


    } 

Antwort

0

Nach einem wenig durch diese Arbeit, fand ich, dass der einzige Weg, um den Versand Controller außer Kraft zu setzen war ein Duplikat der Datei (und Verzeichnisstruktur) in den lokalen Code-Ordnern zu machen. Dann könnte ich den Code grundlegend verändern.

Nicht sicher, warum Magento nicht scheint, das Standard-Überschreiben dieser Versandfunktionen zu erlauben, aber mindestens gibt es eine Arbeit herum.

+0

Ich empfehle das nicht. Es gibt eine saubere Möglichkeit, den Träger außer Kraft zu setzen, siehe meine Antwort. –

1

Che Ck zuerst, dass das Modell überhaupt übersteuert wird. Versuchen Sie folgendes:

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

Wo würde ich das hinstellen? Irgendwo auf der Seite? – Chris

+0

Ich halte eine Datei herum, die das Framework initialisiert, aber gibt mir ein "Scratchboard" (eine fast geklonte Version der index.php-Datei). Um schnell zu sein, sollten Sie es zum Beispiel in eine Vorlage einfügen können . Denken Sie daran, es später zu entfernen. –

12

Es gibt einen Weg, aber es ist nicht klar, und verlangte von mir die Versandmodul Quelle durchsuchen:

Wenn Sie bei aussehen Mage_Shipping_Model_Config, werden Sie feststellen, dass der Code als Parameter für Mage verwendet :: getModel () wird aus der Filialkonfiguration übernommen. Dieser Code ist NICHT der Standardcode wie "shipping/carrier_table- rate", so dass das Überschreiben wie üblich nicht hilft.

Jetzt müssen Sie zuerst herausfinden, was dieser Code ist. Zum Beispiel wollte ich die matrixrate Träger außer Kraft zu setzen, so dass ich getestet es wie folgt aus:

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

Ja, können Sie diesen Code setzen überall auf der Seite vorübergehend, aber es ist sinnvoll, eine separate Datei für solche Dinge haben kann, ausgeführt wird von der Kommandozeile (beginnend mit Mage :: app() Magento zu initialisieren)

In meinem Fall war der Code matrixrate_shipping/carrier_matrixrate so musste ich meine config.xml wie das ändern:

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

statt

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

Viel Glück!

+0

Kumpel, ich danke Ihnen für dieses eine, es hat mir seit einiger Zeit Kopfschmerzen gegeben – Relja

0

es ist eine Weile her, aber ich hatte das gleiche Problem in den letzten Tagen. Ich wollte Freeshipping und Flatrate-Versandmethoden außer Kraft setzen und zusätzlich zu der Antwort von fab musste ich den folgenden Code in etc/config.xml hinzufügen. In meinem Fall befinden sich die ursprünglichen Werte in App/code/core/Mage/Versand/etc/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> 

Die Modellwerte sind Beispiele. Sie müssen sie durch Ihre korrekten Pfade ersetzen.

+0

Können Sie bitte teilen, was in shipping_carrier_flatrate Klasse ist –

0

Wenn jemand anderes mit diesem Problem konfrontiert ist und hier zur Lösung kam, sieht es so aus, als hätte OP codepool in Moduldatei verwendet, wo es codePool sein sollte (beachten Sie das Kapital P).