Meu módulo fornece um bloco simples que precisa conter uma lista não ordenada com algumas imagens. De uma função de bloco, estou retornando uma matriz renderizável:
$block['content'] = array(
'list' => array(
'#theme' => 'item_list',
'#type' => 'ul',
'#attributes' => array('class' => 'foo1'),
'#items' => array(
/* ... what should go here? */
),
),
);
Gostaria de ter algumas matrizes renderizáveis como itens na lista de itens, mas parece que não consigo inserir nenhuma matriz na #items
matriz.
Os documentos da API theme_item_list do Drupal 7 dizem:
itens: uma matriz de itens a serem exibidos na lista. Se um item for uma string, ele será usado como está. Se um item é uma matriz, o elemento "data" da matriz é usado como o conteúdo do item da lista. Se um item for uma matriz com um elemento "filhos", esses filhos serão exibidos em uma lista aninhada. Todos os outros elementos são tratados como atributos do elemento do item da lista.
Tentei usar os elementos "data" e "children", mas fico vazio <li>
ou há uma palavra Array
dentro deles.
Qual é a maneira correta de fazer isso? Theme_item_list é a solução correta / atualizada?
'#items' => array('data' => 'my data')
parece realmente não fazer nada além de'#items' => 'my data'
(veja o código para theme_item_list ).'children'
é usado especificamente para criar uma lista aninhada. Não sei por que está configurado dessa maneira.Respostas:
Algo assim:
fonte
Eu encontrei exatamente esse mesmo problema. Pelo que sei, a leitura do código-fonte
theme_item_list()
não pode usar matrizes renderizáveis como itens da lista. Acabei passando a matriz renderizável com todas as imagens para minha própria função de tema para exibir a lista. Basicamente, você pode pegar seu código atual e alterar a#theme
propriedade para sua função de tema personalizada e adicionar suas matrizes renderizáveis como filhos da sualist
matriz. Para facilitar sua função, você pode adicionar as tags<li>
e</li>
como#prefix
e#suffix
respectivamente às suas matrizes de renderização de imagem e chamardrupal_render_children()
sua matriz e, em seguida, envolvê-la em um<ul>
e seu bem.fonte
Eu estou usando o código a seguir e renderiza a lista após uma chamada ajax
A principal diferença é o "#", se você ler o código da função na função Drupal API theme_item_list , verá que não há hashes para as variáveis
fonte