Poniżej zamieszczam krótką instrukcję przygotowaną przez jednego z naszych programistów - Pawła odnośnie tego jak debugować kod Magento, w przypadku kiedy chcemy odczytać błędy pojawiające się w sklepie interenetowym lub wyciągnąć poszczególne zmienne czy też metody.

 

  1. Wyłączamy cache

  2. Reindexujemy wszystko

  3. Czyścimy cache przeglądarki

  4. Włączamy logi Magento:
    System > Konfiguracja > Programista(Developer)

W ustawieniach logów przełączamy na włączony. Domyślnie logi zapisywane są w ścieżce: var/log

  1. Wchodzimy w plik index.php i odkomentowujemy(lub dopisujemy) linie
    ini_set('display_errors', 1);

  2. Wchodzimy w plik .htaccess i przełączamy Magento w tryb developerski dopisując kod:
    SetEnv MAGE_IS_DEVELOPER_MODE "true"

  3. Zmieniamy nazwę pliku errors/local.xml.sample na errors/local.xml

  4. Dodatkowo instalujemy ‘Easy Template Path Hints’ – dodatek wyświetlający ścieżki bloków oraz widoków na frontendzie oraz backendzie.



Kiedy piszemy kod czasem zajdzie potrzeba wyświetlenia różnych zmiennych. Można to zrobić przez zwykłe wyświetlenie ich: echo($zmienna). Ta funkcja nie wyświetli nam jednak ani tablicy ani obiektu. Aby wyświetlić tablicę możemy użyć print_r($zmienna)lub var_dump($zmienna). Magento jest oparte na Zendzie, dlatego też możemy użyć fukcji zendowskiej Zend_Debug::dump($zmienna).

 

Żeby sprawdzić w jakiej klasie się znajdujemy przydatna wtedy jest funkcja get_class. Np. var_dump(get_class($this));

Podobnie możemy sprawdzić jakie mamy dostępne pola oraz metody klasy w której się znajdujemy: get_class_vars i get_class_methods.

 

Czasami może zajść potrzeba wyświetlenia sobie zmiennej na wersji produkcyjnej sklepu. Wtedy możemy opakować naszego dumpa w diva z display none:

<div style=”display: none;”><?php var_dump($zmienna) ?></div>

Inną metodą może być wyświetlenie zmiennej tylko dla naszego IP:

if ($_SERVER[‘REMOTE_ADDR’] == ‘11.11.11.11’) {

   Zend_Debug::dump($zmienna);

}

 

Kiedy nie możemy sobie wyrzucić dumpa na stronę (np. w niektórych kontrolerach lub przy np. mailach) możemy wrzucić go do naszego loga funkcją file_put_contents. Dodatkowo jeśli jest to array używamy funkcji var_export.

 

file_put_contents(Mage::getBaseDir().”/var/log/moj.log”, $zmienna);

file_put_contents(Mage::getBaseDir().”/var/log/moj.log”, var_export($array));