dpm () nie wyświetla żadnych wyników na ekranie

23

Mam taki sam problem, jak wykonanie file_scan_directory () zajmuje około 10 sekund . Właśnie wypróbowałem dpm(func_get_args())sugestię i niestety nic mi nie pokazuje.

Wyczyściłem wszystkie pamięci podręczne i uruchomiłem zadania cron. czego mi brakuje?

Jimmy
źródło
2
upewnij się, że masz uprawnienia do dostępu do informacji dla programistów w ramach rozwijania w people / permissions
karthik

Odpowiedzi:

28

Upewnij się, że masz print $messages;w page.tpl.phppliku szablonu. Domyślnie program devel (dpm) jest skonfigurowany do drukowania jego zawartości w obszarze komunikatów witryny. Więc jeśli szablon z jakiegoś powodu nie wyświetla zawartości $messages, nic nie zobaczysz.

Svetlio
źródło
13
  1. Czasami krumo($variable)może działać, gdy dpm($variable)nie.

  2. Czasami print dpm($variable)może działać, gdy dpm($variable)nie.

    1. Może być również rozwiązanie, gdy nie ma to print $messagesw twojej page.tpl.phpwięcej. Może możesz to dodać z powrotem.
leymannx
źródło
9

Musisz być zalogowany na stronie Drupal, posiadając odpowiednie uprawnienia dostępu do Devel. Zaloguj się jako administrator.

Powdermonkey1850
źródło
7
Zalogowanie się nie jest konieczne, jeśli anonimowi użytkownicy mają odpowiednie uprawnienia.
kiamlaluno
3
Zezwolenie to można znaleźć na stronie „admin / people / permissions” w sekcji „Access information developer”.
Citricguy,
9

Gorąco polecam devel_debug_log . Wymaga modułu devel i daje funkcję ddl (). ddl dodaje stronę do raportów w konfiguracji, więc jest to podobne do drukowania w trybie watchdog, ale masz ładną czystą stronę, na której możesz wysyłać wiadomości debugowania, i nie martw się o warunki rasowe, w których twoje wiadomości mogą zostać usunięte, zanim szansę ich zobaczenia - lub, jak w twoim przypadku, problemów z motywem.

(Jest to również niezwykle przydatne narzędzie, jeśli próbujesz zbudować dowolny interfejs API, ponieważ wszystkie te żądania nigdy nie pokazywałyby żadnych komunikatów dpm ()).

UnsettlingTrend
źródło
1
To było dla mnie najlepsze ogólne rozwiązanie.
rrirower
1
Nieoceniony także podczas debugowania żądań ajax.
Felix Eve
8

Upewnij się, że masz włączony i zainstalowany moduł Devel , tak jak dpm()funkcja zadeklarowana w tym module.

dpm()opis wzięty stąd .

Drukuje zmienną w obszarze wiadomości na stronie za pomocą drupal_set_message (). Możesz użyć tej funkcji do śledzenia jednej lub więcej zmiennych podczas pracy nad kodem prowadzącym witrynę. Ponieważ moduł Devel jest teraz wyposażony w Krumo, dane wyjściowe są niewielkie i nie rzucają się w oczy.

dpm($input, $name = NULL)

Jeśli z jakiegoś powodu nie używasz Krumo, możesz użyć parametru $ name, aby rozróżnić różne wywołania dpm ().

Po pobraniu i włączeniu Devel wypróbuj odpowiedź z file_scan_directory () zajmuje około 10 sekund, aby wykonać ponownie i powinno działać.

Chapabu
źródło
Pozostaje to samo. Zainstalowałem i włączyłem moduł deweloperski, wyczyściłem wszystkie pamięci podręczne, uruchomiłem crona i nadal dpm (func_get_args ()) nic nie pokazuje.
Jimmy
Gdzie jesteś oddanie dpm(func_get_args());?
Chapabu
W pliku bootstrap.inc: dpm (func_get_args ()); $ mecze = lista_systemów_drupal ("/ ^". DRUPAL_PHP_FUNCTION_PATTERN. "\. $ extension $ /", $ katalog, 'nazwa', 0); ...
Jimmy
Spróbuj zmienić dpm(func_get_args());na die(print_r(func_get_args());ominięcie Devela.
Chapabu
3
Jeśli drugie polecenie zalecane przez Chapabu niczego nie zmienia, oznacza to po prostu, że kod nie jest wywoływany i ten sam problem nie dotyczy ciebie.
Berdir
5

Jeśli chcesz wydrukować go z wnętrza funkcji bez dotykania (lub posiadania) pliku szablonu, spróbuj tego:

$nid = 3;
$node = node_load($nid);
dpm($node);
print theme('status_messages'); 
Gavin Mcdonough
źródło
3

Czasami jest to wynikiem zasobu na stronie zwracającego 404.

Drupal renderuje stronę 404 iw ten sposób pobiera (i usuwa) wiadomości z sesji i umieszcza je na stronie 404, której nie widzisz. Gdy strona główna pobiera wiadomości, nie ma już żadnych.

Możesz otworzyć kartę sieci i sprawdzić, czy jakieś zasoby mają status 404.

Łatwym rozwiązaniem jest tutaj włączenie szybkiego 404 poprzez odkomentowanie tej linii w settings.php:

# drupal_fast_404();

Innym dobrym rozwiązaniem tutaj jest użycie devel_debug_log, jak sugeruje SlakeFistcrunch.

Felix Eve
źródło
2

Czasami wiadomość może zostać wycięta lub nie działa w przypadku AJAX.

Bardziej niezawodną metodą jest wykonanie (następnie usunięcie po zakończeniu):

var_dump($data); die();

Lub możesz użyć dd()(również część Devel), np

dd(func_get_args());

następnie sprawdź plik dziennika (w folderze temp), np

$ tail -f /tmp/drupal_debug.txt

Zastosowanie powyższej metody jest wygodniejsze, szybsze i może obsługiwać AJAX lub inne żądania bez przerywania renderowania bieżącej witryny.


Jeśli nadal chcesz dpm(), spróbuj również użyć kint()(włącz dołączony podmoduł Kint dla tych ładnych wydruków zmiennych).

kenorb
źródło
1

Jeśli tylko niektóre dpm()połączenia nie działają, może to być spowodowane dpm()awarią. Widziałem, jak to się dzieje w następującym scenariuszu w niestandardowym module obsługi przesyłania formularza:

function mymodule_formid_submit($form, &$form_state) {
  dpm($form_state);
}

Uważam, że warunek błędu został przechwycony przez procedurę obsługi wyjątku dpm(), ponieważ strona wyświetlała się dobrze, brak WSOD lub coś, po prostu brak dpm()wiadomości. Błąd jest prawdopodobnie niewykrytą rekurencją, ponieważ używaddl($form_state) zamiast tego spowodowało, że przeglądarka wyczerpała pamięć podczas oglądania odpowiedniego obiektu w raporcie wygenerowanym przez moduł Devel Debug Log.

Aby obejść ten problem, spróbuj wydrukować tylko (odpowiednią) część obiektu, na przykład dpm($form_state['values'])lub dpm(array_keys($form_state)).

Tanius
źródło