Cómo encontrar elementos en una matriz de renderizado


8

Acabo de pasar mucho tiempo buscando un elemento en una matriz de renderizado. Normalmente uso dpm()para imprimir la matriz y luego expandir las opciones hasta que encuentre lo que estoy buscando.

En matrices más grandes eso es engorroso. Cuando lo uso print_r(), puedo hacer una búsqueda de texto, pero luego es difícil ver la estructura de la matriz y encontrar la ruta al elemento.

¿Qué otros métodos puedes sugerir?


¡Vale la pena agregar esta pregunta a mis representantes completos!
niksmac

Hay algunos módulos para embellecer toda esta caca . Soy demasiado vago para mirar, pero el módulo de desarrollo se integra con krumo y otros mejoradores de volcado, si no recuerdo mal. Luego siempre hay un buen depurador viejo, donde puedes inspeccionar y conducir incluso objetos.
stefgosselin

@stefgosselin OP ya está usando el módulo Devel con dpm(), creo que está buscando una función para encontrar un subelemento dentro de una matriz de renderizado por un nombre / clave dada
Clive

@MotoTribe Si acerté y está buscando una función, ¿qué tipo de entrada / salida esperaría dar / obtener de ella? ¿Sería algo así como $elements = find_elements_by_key($render_array, 'element_name');devolver una matriz de todos los elementos en la matriz de renderizado con una clave coincidente?
Clive

correcto. En desarrollo, "krumo display = disabled" muestra una matriz mejor formateada donde puedo usar una búsqueda de texto. Idealmente, debería haber una función de búsqueda en la salida de krumo y una función de "copia" donde pueda copiar la ruta completa de la matriz ['...'] ['...'] sin tener que escribirla. Sí, tu función también sería increíble. Esa no es una función Drupal o PHP, ¿verdad?
Uwe

Respuestas:


9

Hay un módulo de extensión para Devel: Search Krumo . Utiliza Javascript para buscar texto en mensajes Krumo / dpm y matriz abierta en esos lugares.
Se ve como esto:
ingrese la descripción de la imagen aquí

Actualizar

Después del 22 de abril de 2012 , debe usar la sdpm()función para ver el cuadro de búsqueda.


de ninguna manera, eso es exactamente lo que estaba buscando !!! ¡¡¡Gracias!!!
uwe

@MotoTribe, por lo que puede ser aceptado, creo :)
kalabro

lo siento, perdí esa. Esta es una herramienta increíble, úsala todo el tiempo.
Uwe

¿Dónde pongo este módulo de extensión? ya sea dentro del directorio de desarrollo [\ www \ drupal \ sites \ all \ modules \ devel] o dentro del directorio de módulos contribuidos [\ www \ drupal \ sites \ all \ modules]
GiLL

¿Podría mencionar que cómo usar la función sdpm ()? donde pegar Muchas gracias.
CodeNext

5

Uno de los grandes problemas con las matrices de renderizado es que a menudo hay un montón de copias de solo lectura de la información que está buscando. Si realmente desea cambiar la salida de renderizado, debe encontrar la correcta. Usualmente uso dpm (), y luego veo la fuente de la página y busco en la salida allí, volteando entre las dos pantallas hasta que encuentro lo que necesito.

Si desea volcar el contenido de una matriz de representación para una ruta determinada al terminal (por ejemplo, para pasarlo a través de grep), puede hacer algo como esto:

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);'

También podría simplemente 'ver la fuente de la página' en su navegador y usar el portapapeles, por supuesto, pero lo anterior podría ser el comienzo de un comando Drush para ver las matrices de renderizado.

Actualización: encontré un artículo realmente bueno sobre este tema: The Scary Render Array , probablemente el mejor tratamiento de las matrices de renderizado que he visto hasta ahora. También debería haber mencionado el módulo devel_themer por adelantado; hace un buen trabajo al "acercarse" en la sección de la matriz de renderizado que le interesa.


No puedo agradecerles lo suficiente por vincularse a The Scary Render Array: ¡excelente artículo!
Andy
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.