Debugowanie Magento
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 internetowym lub wyciągnąć poszczególne zmienne czy też metody.
-
Wyłączamy cache
-
Reindexujemy wszystko
-
Czyścimy cache przeglądarki
-
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
-
Wchodzimy w plik index.php i odkomentowujemy(lub dopisujemy) linie
ini_set(‘display_errors’, 1); -
Wchodzimy w plik .htaccess i przełączamy Magento w tryb developerski dopisując kod:
SetEnv MAGE_IS_DEVELOPER_MODE “true” -
Zmieniamy nazwę pliku errors/local.xml.sample na errors/local.xml
-
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));