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?


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.


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.


Não posso agradecer o suficiente por criar um link para The Scary Render Array - ótimo artigo!
21712 Andy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.