Devel to jeden z podstawowych modułów ułatwiających nie tylko tworzenie nowych skórek, ale także bardzo upraszczających wiele aspektów tworzenia witryn w Drupalu.
Sam pakiet składa się z kilku modułów, w tym Devel Generate - generującym automatycznie treść do testów w instancji Drupala. Potrafi uzupełniać bardzo dużo pól, nawet dodaje linki filmów, w przypadku pól typu video.
Wiele możliwości jednak da się zbadać z samego poziomu menu, to, na czym chciałabym się skupić to pomocnicze funkcje dostępne w samym module, bardzo ułatwiające tworzenie własnych modułów.

Wartość zmiennych?

Drupal bardzo wiele elementów przetrzymuje w tablicach lub w obiektach. Są one niejednokrotnie na tyle duże, że wypisanie ich na ekranie w celu szybkiego przejrzenia zawartości jest co najmniej niewygodne. Na szczęście mamy do dyspozycji jednak kilka funkcji pomocniczych.

Są to:

    dpm();
    Wyświetlenie wartości zmiennej w regionie powiadomień (za pomocą drupal_set_message) podobne do print_r()
    dvm();
    Wyświetlenie wartości zmiennej w regionie powiadomień (za pomocą drupal_set_message) podobne do var_dump()
    dpm() oraz dvm() są również interaktywne.
    Najechanie na ciemniejsze elementy powoduje rozsunięcie kolejnego poziomu tablicy - przykładem w obiekcie $user mogą być $user->roles będące tablicą.

    W module jest jeszcze cała masa dodatkowych funkcji pokazujących to samo, tylko w innym formacie/innej skórce/innym regionie. Osobiście uważam, że te dwie funkcje, a na dobrą sprawę w szczególności głównie dpm() jest często podstawą w pisaniu własnych modułów. Mnie przydaje się zwłaszcza w formularzach, a już zdecydowanie gdy muszę coś przekształcić.
    Do tej pory nie zdołałam się nauczyć na pamięć struktury $form oraz $form_state ;)

    Natomiast dzięki umieszczeniu informacji w miejscu z naturalnymi powiadomieniami Drupala nie mają znaczenia przeładowania strony - wszystko i tak trzymane jest do momentu wyświetlenia na ekranie w sesji. Wprost więc idealne do formularzy.

    Pokrótce - dvr i dpr to odpowiedniki umieszczające wartości zmiennych w kodzie strony. W przypadku, gdy z jakichkolwiek powodów:

    • Zmienna $messages jest usunięta z page.tpl lub pochodnych w Drupalu 6
    • Blok z powiadomieniami (System help) nie jest przypisany do żadnego regionu w Drupalu 7-8

    Argumenty?

    Argumenty przekazane do funkcji jak najbardziej można wypisać ręcznie za pomocą wyżej wymienionych funkcji. Przeważnie nie jest przekazywane ich wiele, nie powinno być więc problemu.
    Dostaliśmy jednak funkcję, która zrobi to wszystko za nas.
    dargs() nie robi nic więcej jak tylko wypisuje jakie wartości zostały przekazane do aktywnej funkcji.

    Gdzie w tym Drupalu jest błąd?

    Osobiście od czasu do czasu natykam się na błędy typu Fatal error: Unsupported operand types in form.inc on line 524, mimo że faktycznie pomyłka jest popełniona w zupełnie innym pliku, module i lokalizacji. Niekiedy jak w akurat tym przypadku określenie błędu jest dość proste, bywają jednakże sytuacje, gdzie trzeba się nieco nagłowić.
    Dzięki ddebug_backtrace() można prześledzić przez jakie funkcje przechodził po kolei skrypt - nie jest to co prawda rozwiązanie idealne, jednakże pozwala na przybliżone zloklizowanie błędu przynajmniej do pliku.

    O ile pracuje się z jednym modułem oczywiście i bez tego można zlokalizować plik z błędem. Gorzej, jeśli modułów i patchy jest kilka, pojawia się jakiś update, po czym nagle Drupal zaczyna sypać nic nie mówiącym błędem.
    Jeśli Devel z jakichś przyczyn nie jest zainstalowany mamy oczywiście możliwość wywołania natywnego debug_backtrace().

    Czy Devel zastąpi standardowe debugowanie?

    Śmiem wątpić. Przy większych projektach jednak może nie być najlepszym rozwiązaniem, nie zmienia to jednak faktu, że czasem wywołanie jednej prostej funkcji potrafi bardzo uprościć życie programisty.

Dodaj komentarz