Como encontrar elementos em uma matriz de renderização

8

Passei muito tempo encontrando um elemento em uma matriz de renderização. Normalmente, uso dpm()para imprimir a matriz e, em seguida, expanda as opções até encontrar o que estou procurando.

Em matrizes maiores, isso é complicado. Quando uso print_r(), posso fazer uma pesquisa de texto, mas é difícil ver a estrutura da matriz e encontrar o caminho para o elemento.

Que outros métodos você pode sugerir?

uwe
fonte
Vale a pena adicionar esta pergunta aos meus representantes completos !!
Niksmac 12/04/12
Existem alguns módulos para embelezar toda essa caca . Estou com preguiça de procurar, mas o módulo dev se integra ao krumo e a outros aprimoradores de dump, se bem me lembro. Sempre há um bom e velho depurador, no qual você pode realmente inspecionar e reduzir até objetos.
stefgosselin
@stefgosselin OP já está usando o módulo Devel com dpm(), eu acho que ele está à procura de uma função para encontrar um sub-elemento dentro de uma matriz tornar por um nome dado / key
Clive
@MotoTribe Se eu entendi direito e você está procurando uma função, que tipo de entrada / saída você espera dar / receber? Seria algo como $elements = find_elements_by_key($render_array, 'element_name');retornar uma matriz de todos os elementos na matriz de renderização com uma chave correspondente?
Clive
corrigir. No desenvolvimento, o "krumo display = disabled" mostra uma matriz melhor formatada onde eu posso usar uma pesquisa de texto. Idealmente, deve haver uma função de pesquisa na saída do krumo e um recurso de "cópia" onde eu possa copiar o caminho completo da matriz ['...'] ['...'] sem precisar digitá-lo. Sim, sua função também seria incrível. Isso não é uma função Drupal ou PHP, é?
Uwe

Respostas:

9

Existe um módulo de extensão para Devel: Search Krumo . Ele usa Javascript para encontrar texto nas mensagens Krumo / dpm e abrir a matriz nesses locais.
Se parece com isso:
insira a descrição da imagem aqui

Atualizar

Após 22 de abril de 2012, você deve usar a sdpm()função para ver a caixa de pesquisa.

kalabro
fonte
de jeito nenhum, é exatamente isso que eu estava procurando !!! Obrigado!!!
Uwe
@MotoTribe, para que possa ser aceito, eu acho :)
kalabro
desculpe, perdi essa. Esta é uma ferramenta incrível, use-a o tempo todo agora !!!
Uwe
onde eu coloquei esse módulo de extensão? quer diretório devel dentro [\ www \ Drupal \ Sites \ all \ módulos \ devel] ou dentro contribuiu diretório de módulos [\ www \ Drupal \ Sites \ all \ módulos]
Gill
Você poderia mencionar que como usar a função sdpm ()? onde colar? Muito obrigado.
CodeNext
5

Um dos grandes problemas com matrizes de renderização é que geralmente há várias cópias somente leitura das informações que você está procurando. Se você realmente deseja alterar a saída de renderização, precisa encontrar a correta. Normalmente, uso dpm () e, em seguida, visualizo a fonte da página e procuro a saída lá, alternando entre os dois monitores até encontrar o que preciso.

Se você deseja despejar o conteúdo de uma matriz de renderização para um determinado caminho para o terminal (por exemplo, passá-lo através do grep), você pode fazer algo assim:

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

Você também pode apenas 'visualizar a fonte da página' no seu navegador e usar a área de transferência, é claro, mas o acima pode ser o início de um comando Drush para visualizar matrizes de renderização.

Atualização: Encontrei um artigo realmente bom sobre esse assunto: The Scary Render Array - provavelmente o melhor tratamento para as matrizes de renderização que eu já vi até agora. Eu também deveria ter mencionado o módulo devel_themer antecipadamente; ele faz um bom trabalho em "aumentar o zoom" na seção da matriz de renderização em que você está interessado.

greg_1_anderson
fonte
Não posso agradecer o suficiente por criar um link para The Scary Render Array - ótimo artigo!
21712 Andy