Come trovare elementi in un array di rendering


8

Ho appena trascorso molto tempo a trovare un elemento in un array di rendering. Di solito uso dpm()per stampare l'array e quindi espandere le opzioni fino a quando non trovo quello che sto cercando.

Su array più grandi è ingombrante. Quando uso print_r(), posso fare una ricerca testuale, ma poi è difficile vedere la struttura dell'array e trovare il percorso dell'elemento.

Quali altri metodi puoi suggerire?


Questa domanda vale la pena aggiungere le mie ripetizioni complete !!
niksmac,

Ci sono alcuni moduli per abbellire tutto questo caca . Sono troppo pigro per andare a cercare, ma il modulo dev si integra con krumo e altri dump-enhancer, se ricordo bene. Quindi c'è sempre un buon vecchio debugger, in cui puoi effettivamente ispezionare e guidare anche negli oggetti.
stefgosselin,

@stefgosselin OP sta già utilizzando il modulo Devel con dpm(), penso che stia cercando una funzione per trovare un sottoelemento all'interno di un array di rendering con un determinato nome / chiave
Clive

@MotoTribe Se ho capito bene e stai cercando una funzione, che tipo di input / output speri di dare / ottenere da esso? Sarebbe come $elements = find_elements_by_key($render_array, 'element_name');restituire un array di tutti gli elementi nell'array di rendering con una chiave corrispondente?
Clive

corretta. In devel, "krumo display = disabled" mostra un array meglio formattato in cui posso usare una ricerca testuale. Idealmente dovrebbe esserci una funzione di ricerca nell'output di krumo e una funzione "copia" in cui posso copiare l'intero percorso dell'array ['...'] ['...'] senza doverlo digitare. Sì, anche la tua funzione sarebbe fantastica. Non è una funzione Drupal o PHP, vero?
Uwe

Risposte:


9

Esiste un modulo di estensione per Devel: Cerca Krumo . Usa Javascript per trovare testo nei messaggi Krumo / dpm e aprire array in quei luoghi.
Somiglia a questo:
inserisci qui la descrizione dell'immagine

Aggiornare

Dopo il 22 aprile 2012 dovresti usare la sdpm()funzione per vedere la casella di ricerca.


in nessun modo, è esattamente quello che stavo cercando !!! Grazie!!!
Uwe

@MotoTribe, quindi può essere accettato, penso :)
Kalabro,

scusa, mi mancava quello. Questo è uno strumento fantastico, usalo sempre ora !!!
Uwe

dove ho messo questo modulo di estensione? all'interno della directory devel [\ www \ drupal \ siti \ all \ modules \ devel] o nella directory dei moduli forniti [\ www \ drupal \ sites \ all \ modules]
GiLL

Potresti per favore dire che come usare la funzione sdpm ()? dove incollare? Grazie mille.
CodeNext

5

Uno dei maggiori problemi con le matrici di rendering è che spesso ci sono un sacco di copie di sola lettura delle informazioni che stai cercando. Se vuoi effettivamente cambiare l'output di rendering, devi trovare quello giusto. Di solito uso dpm (), quindi visualizzo l'origine della pagina e cerco l'output lì, scorrendo avanti e indietro tra i due display fino a trovare quello che mi serve.

Se vuoi scaricare il contenuto di un array di rendering per un dato percorso al terminale (ad es. Per passarlo attraverso grep), potresti fare qualcosa del genere:

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

Puoi anche semplicemente "visualizzare l'origine della pagina" nel tuo browser e utilizzare gli Appunti, ovviamente, ma quanto sopra potrebbe essere l'inizio di un comando Drush per visualizzare gli array di rendering.

Aggiornamento: ho trovato un ottimo articolo su questo argomento: The Scary Render Array - probabilmente il miglior trattamento di array di rendering che ho visto finora. Avrei anche dovuto menzionare in anticipo il modulo devel_themer ; fa un buon lavoro a "zoomare" sulla sezione dell'array di rendering che ti interessa.


Non posso ringraziarvi abbastanza per il collegamento a The Scary Render Array - ottimo articolo!
Andy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.