Как найти элементы в массиве рендеринга

8

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

На больших массивах это громоздко. Когда я использую print_r(), я могу сделать текстовый поиск, но тогда трудно увидеть структуру массива и найти путь к элементу.

Какие еще методы вы можете предложить?

Уве
источник
Этот вопрос стоит добавить мои полные повторы!
Никсмак
Есть несколько модулей, чтобы раскрасить всю эту кака . Мне лень смотреть, но модуль dev интегрируется с krumo и другими дамп-энхансерами, если я правильно помню. Кроме того, всегда есть старый добрый отладчик, в котором вы можете даже проверять объекты.
stefgosselin
@stefgosselin OP уже использует модуль Devel с dpm(), я думаю, он ищет функцию для поиска подэлемента в массиве рендеринга по заданному имени / ключу
Clive
@MotoTribe Если я правильно понял, и вы ищете функцию, какой тип ввода / вывода вы бы хотели получить / получить от нее? Было бы что-то вроде $elements = find_elements_by_key($render_array, 'element_name');возврата массива всех элементов массива рендеринга с соответствующим ключом?
Клайв
правильный. В devel «krumo display = disabled» показывает лучше отформатированный массив, где я могу использовать текстовый поиск. В идеале должна быть функция поиска в выводе krumo и функция «копировать», где я могу скопировать полный путь массива ['...'] ['...'] без необходимости его набирать. Да, твоя функция тоже была бы потрясающей. Это не функция Drupal или PHP, не так ли?
Uwe

Ответы:

9

Есть модуль расширения для Devel : Search Krumo . Он использует Javascript для поиска текста в сообщениях Krumo / dpm и открытия массива в этих местах.
Выглядит так:
введите описание изображения здесь

Обновить

После 22 апреля 2012 вы должны использовать sdpm()функцию, чтобы увидеть окно поиска.

kalabro
источник
нет, это именно то, что я искал !!! Спасибо!!!
Uwe
@MotoTribe, так что это может быть принято, я думаю :)
kalabro
извини, пропустил это. Это потрясающий инструмент, используйте его все время !!!
Uwe
где я положил этот модуль расширения? либо внутри каталога devel [\ www \ drupal \ sites \ all \ modules \ devel], либо внутри каталога предоставляемых модулей [\ www \ drupal \ sites \ all \ modules]
GiLL
Не могли бы вы упомянуть, как использовать функцию sdpm ()? куда вставить? Большое спасибо.
CodeNext
5

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

Если вы хотите вывести содержимое массива рендеринга для заданного пути к терминалу (например, чтобы передать его через grep), вы можете сделать что-то вроде этого:

drush ev '$router_item=menu_get_item("node/7"); require_once(DRUPAL_ROOT .
"/" . $router_item["include_file"]);
$render_array=call_user_func_array($router_item["page_callback"],
$router_item["page_arguments"]); print_r($render_array);'

Вы также можете просто «просмотреть исходный код страницы» в своем браузере и использовать буфер обмена, конечно, но приведенное выше может быть началом команды Drush для просмотра массивов рендеринга.

Обновление: я нашел действительно хорошую статью на эту тему: Scary Render Array - вероятно, лучшая обработка массивов рендеринга, которую я когда-либо видел. Я должен был также упомянуть модуль devel_themer заранее; он хорошо справляется с «увеличением» интересующего вас раздела рендеринга.

greg_1_anderson
источник
Не могу отблагодарить вас за ссылку на массив Scary Render Array - отличная статья!
Энди