Mi módulo proporciona un bloque simple que debe contener una lista desordenada con algunas imágenes. Desde una función de bloque, estoy devolviendo una matriz renderizable:
$block['content'] = array(
'list' => array(
'#theme' => 'item_list',
'#type' => 'ul',
'#attributes' => array('class' => 'foo1'),
'#items' => array(
/* ... what should go here? */
),
),
);
Me gustaría tener algunas matrices renderizables como elementos en la lista de elementos, pero parece que no puedo insertar ninguna matriz en la #items
matriz.
La documentación de la API theme_item_list de Drupal 7 dice:
elementos: una matriz de elementos que se mostrarán en la lista. Si un elemento es una cadena, se usa tal cual. Si un elemento es una matriz, entonces el elemento "datos" de la matriz se usa como el contenido del elemento de la lista. Si un elemento es una matriz con un elemento "hijos", esos hijos se muestran en una lista anidada. Todos los demás elementos se tratan como atributos del elemento del elemento de la lista.
Intenté usar los elementos "datos" y "hijos", pero obtengo vacíos <li>
o hay una palabra Array
dentro de ellos.
¿Cuál es la forma apropiada de hacer esto? ¿Theme_item_list es la solución correcta / actualizada?
'#items' => array('data' => 'my data')
no parece hacer nada más que'#items' => 'my data'
(mira el código para theme_item_list ).'children'
se usa específicamente para crear una lista anidada. No estoy seguro de por qué está configurado de esta manera.Respuestas:
Algo como esto:
fuente
Me encontré con este mismo problema. Por lo que puedo decir al leer el código fuente,
theme_item_list()
no puede usar matrices renderizables como elementos para la lista. Terminé pasando la matriz renderizable con todas las imágenes a mi propia función de tema para generar la lista. Básicamente, puede tomar su código actual y cambiar la#theme
propiedad a su función de tema personalizado y agregar sus matrices renderizables como elementos secundarios de sulist
matriz. Para facilitar su función, puede agregar las etiquetas<li>
y</li>
como#prefix
y#suffix
respectivamente a sus matrices de representación de imágenes y llamardrupal_render_children()
a su matriz, luego simplemente envolverlo en un<ul>
su bien.fuente
Estoy usando el siguiente código y representa la lista después de una llamada ajax
La principal diferencia es el "#", si lee el código de la función en la función API de Drupal theme_item_list , verá que no hay valores hash para las variables
fuente