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

23

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

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

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

Ответы:

28

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

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

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

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

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

Powdermonkey1850
источник
7
Вход в систему необязателен, если у анонимных пользователей есть необходимые разрешения.
kiamlaluno
3
Это разрешение можно найти в разделе «admin / people / permissions» в разделе «Доступ к информации для разработчиков».
Citricguy
9

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

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

UnsettlingTrend
источник
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 секунд, и он должен работать.

Chapabu
источник
Осталось прежним. Я установил и включил модуль 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 для этих симпатичных переменных печати).

kenorb
источник
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)).

tanius
источник