dpm () не отображает никаких результатов на экране


23

У меня та же проблема, что для выполнения file_scan_directory () требуется около 10 секунд . Я только что попробовал dpm(func_get_args())предложение, и, к сожалению, оно мне ничего не показывает.

Я очистил все кэши и запустил задачи cron. Что мне не хватает?


2
убедитесь, что у вас есть разрешения на доступ к информации для разработчиков в devel в люди / разрешения
karthik

Ответы:


28

Убедитесь, что у вас есть print $messages;в вашем page.tpl.phpфайле шаблона. По умолчанию devel (dpm) настроен для печати своего содержимого в области сообщений сайта. Поэтому, если ваш шаблон по какой-то причине не отображает содержимое $messages, вы ничего не увидите.


13
  1. Иногда krumo($variable)может работать, когда dpm($variable)нет.

  2. Иногда print dpm($variable)может работать, когда dpm($variable)нет.

    1. также может быть решением, когда нет больше print $messagesв вашем page.tpl.php. Может быть, вы можете добавить его обратно.

9

Вы должны войти на сайт Drupal с правильными разрешениями для доступа к Devel. Войдите в систему как администратор должен сделать это.


7
Вход в систему необязателен, если у анонимных пользователей есть необходимые разрешения.
kiamlaluno

3
Это разрешение можно найти в разделе «admin / people / permissions» в разделе «Доступ к информации для разработчиков».
Citricguy

9

Я очень рекомендую devel_debug_log . Для этого требуется модуль devel, а также функция ddl (). ddl добавляет страницу к вашим отчетам в конфигурации, так что это похоже на печать для сторожевого таймера, но у вас есть хорошая чистая страница, на которую вы можете отправлять отладочные сообщения, и не беспокойтесь о состояниях расы, когда ваши сообщения могут быть очищены до того, как вы шанс увидеть их - или, как в вашем случае, тематические проблемы.

(Это также ОЧЕНЬ полезный инструмент, если вы пытаетесь создать какой-либо API, так как все эти запросы никогда не будут показывать вам какие-либо сообщения dpm ().)


1
Это было лучшее общее решение для меня.
Rrirower

1
Также неоценимо при отладке запросов ajax.
Феликс Ева

8

Убедитесь, что вы включили и установили модуль Devel как dpm()функцию, объявленную в этом модуле.

dpm()описание взято отсюда .

Печатает переменную в области «сообщения» на странице, используя drupal_set_message (). Вы можете использовать эту функцию для отслеживания одной или нескольких переменных, когда вы работаете над кодом, выполняющим ваш сайт. Поскольку модуль Devel теперь поставляется с Krumo, вывод компактен и ненавязчив.

dpm($input, $name = NULL)

Если по какой-то причине вы не используете Krumo, вы можете использовать параметр $ name, чтобы различать различные вызовы dpm ().

После того, как вы загрузили и включили Devel, попробуйте ответ из file_scan_directory (), чтобы выполнить его снова, потребуется около 10 секунд, и он должен работать.


Осталось прежним. Я установил и включил модуль devel, очистил все кэши, запустил cron и все равно dpm (func_get_args ()) ничего не показывает.
Джимми

Куда ты кладешь dpm(func_get_args());?
Чапабу

В файле bootstrap.inc: dpm (func_get_args ()); $ match = drupal_system_listing ("/ ^". DRUPAL_PHP_FUNCTION_PATTERN. "\. $ extension $ /", $ dir, 'name', 0); ...
Джимми

Попробуйте перейти dpm(func_get_args());на die(print_r(func_get_args());- обойти Devel на данный момент.
Чапабу

3
Если вторая команда, рекомендованная Chapabu, ничего не меняет, то это просто означает, что код не вызывается и на вас не влияет та же проблема.
Бердир

5

Если вы хотите напечатать его из функции, не касаясь (или не имея) файла шаблона, попробуйте это:

$nid = 3;
$node = node_load($nid);
dpm($node);
print theme('status_messages'); 

3

Иногда это является результатом ресурса на странице, возвращающего 404.

Drupal отображает страницу 404 и при этом извлекает (и очищает) сообщения из сеанса и помещает их на страницу 404, которую вы не видите. Затем, когда главная страница выбирает сообщения, ничего не осталось.

Вы можете открыть вкладку сети и проверить, имеют ли какие-либо ресурсы статус 404.

Простое решение здесь - включить быстрый 404, раскомментировав эту строку в файле settings.php:

# drupal_fast_404();

Другим хорошим решением здесь является использование devel_debug_log, как предложено SlakeFistcrunch.


2

Иногда сообщение может быть обрезано или не работает в случае AJAX.

Более надежный способ сделать это просто (затем удалить после завершения):

var_dump($data); die();

Или вы можете использовать dd()(часть Devel также), например,

dd(func_get_args());

затем проверьте свой лог-файл (во временной папке), например,

$ tail -f /tmp/drupal_debug.txt

Использование вышеуказанного метода более удобно, быстрее и может поддерживать AJAX или другой запрос, не нарушая текущий рендеринг сайта.


Если вам все еще нравится dpm(), попробуйте также использовать kint()(включите включенный подмодуль Kint для этих симпатичных переменных печати).


1

Если только некоторые dpm()вызовы не работают, это может произойти из-за dpm()сбоя. Я видел, как это происходит в следующем сценарии в обработчике отправки пользовательских форм:

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

Я полагаю, что ошибка была обнаружена обработчиком исключений в dpm() , потому что страница отображалась нормально, без WSOD или чего-то другого, просто без dpm()сообщений. Ошибка, вероятно, является необнаруженной рекурсией, потому что использование ddl($form_state)вместо этого привело к тому, что браузер использовал максимум памяти при просмотре соответствующего объекта в отчете, сгенерированном модулем Devel Debug Log.

В качестве обходного пути попробуйте распечатать только (соответствующую) часть объекта, например dpm($form_state['values'])или dpm(array_keys($form_state)).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.