2010-12-17 11 views
5

Napisałem już wiele modułów wcześniej, ale z jakiegoś powodu mój moduł wysyłki nie zastąpi metody wysyłki magneto. Czy to dozwolone? Czego tu mi brakuje? Nazwa modułu pojawia się w zaawansowanej zakładce obszaru konfiguracji, więc jest ładowana, ale nic się nie dzieje. Jakieś wskazówki?Nadpisywanie metody wysyłki - czego mi brakuje

Kod

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/Spedycja/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/Spedycja/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; 

     } 


    } 

Odpowiedz

0

Po pracy przez ten jeden kawałek, okazało się, że jedynym sposobem, aby zastąpić kontroler wysyłki było zrobić duplikat pliku (a) struktury katalogów w folderze lokalnym kodu. Wtedy mógłbym zasadniczo poprawić kod.

Nie wiem, dlaczego Magento nie pozwala na standardowe nadpisanie tych funkcji wysyłkowych, ale najmniej jest do zrobienia.

+0

Zdecydowanie nie polecam tego. Jest czysty sposób na zastąpienie przewoźnika, zobacz moją odpowiedź. –

1

Che Najpierw ck, że model jest w ogóle nadpisywany. Spróbuj tego:

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

Gdzie mam to umieścić? Gdziekolwiek na stronie? – Chris

+0

Przechowuję plik, który inicjuje framework, ale daje mi "scratchboard" (prawie sklonowaną wersję pliku index.php). Aby być szybkim, powinieneś być w stanie umieścić go w szablonie i na przykład . Pamiętaj tylko, aby usunąć go później. –

12

Jest droga, ale to nie jest oczywiste i konieczne mnie do przeglądania źródła modułu Dostawa:

Jeśli spojrzeć na Mage_Shipping_Model_Config, można odkryć, że kod używany jako parametr dla Mage :: getModel () pochodzi z konfiguracji sklepu. Ten kod NIE jest standardowym kodem, takim jak "shipping/carrier_tablerate", więc nie pomaga, jak zwykle, przesłonić.

Teraz musisz najpierw dowiedzieć się, co to jest kod. Na przykład chciałem zastąpić nośnik matrixrate, więc ja testowałem to tak:

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

Tak, można umieścić ten kod w dowolnym miejscu na stronie tymczasowego ale warto mieć osobny plik dla takich rzeczy, które mogą być uruchamiane z linii poleceń (począwszy Mage :: app(), aby zainicjować Magento)

W moim przypadku kod był matrixrate_shipping/carrier_matrixrate więc musiałem zmienić config.xml tak:

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

zamiast

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

Powodzenia!

+0

kolego, dziękuję ci za to, przez jakiś czas dawało mi to ból głowy – Relja

0

Minęło trochę czasu, ale miałem ten sam problem w ostatnich dniach. Chciałem zastąpić freeshipping i flatrate metody wysyłki, a oprócz odpowiedzi na bajeczkę musiałem dodać następujący kod w etc/config.xml. W moim przypadku oryginalne wartości znajdują się w app/code/core/Mage/Shipping/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> 

Wartości modelowe są przykładami. Musisz zastąpić je poprawnymi ścieżkami.

+0

Czy możesz podzielić się tym, co jest w klasie shipping_carrier_flatrate –

0

Jeśli ktoś inny napotyka ten problem i przyszedł tutaj, by znaleźć rozwiązanie, wygląda na to, że OP użył codepool w pliku modułu, gdzie powinien być codePool (zwrócić uwagę na kapitał P).

Powiązane problemy