web-dev-qa-db-fra.com

Rendu des éléments theme_item_list

Mon module fournit un bloc simple qui doit contenir une liste non ordonnée avec quelques images. À partir d'une fonction de bloc, je renvoie un tableau pouvant être rendu:

$block['content'] = array(
    'list' => array(
        '#theme' => 'item_list',
        '#type' => 'ul',
        '#attributes' => array('class' => 'foo1'),
        '#items' => array(
          /* ...  what should go here? */
        ),
    ),
);

Je voudrais avoir quelques tableaux rendables en tant qu'éléments dans la liste des éléments, mais il semble que je ne puisse pas insérer de tableaux dans le tableau #items.

API Drupal 7 theme_item_list docs dit:

éléments: un tableau d'éléments à afficher dans la liste. Si un élément est une chaîne, il est utilisé tel quel. Si un élément est un tableau, l'élément "data" du tableau est utilisé comme contenu de l'élément de liste. Si un élément est un tableau avec un élément "enfants", ces enfants sont affichés dans une liste imbriquée. Tous les autres éléments sont traités comme des attributs de l'élément d'élément de liste.

J'ai essayé d'utiliser à la fois des éléments "data" et "children", mais j'obtiens des <li> Vides ou il y a un mot Array à l'intérieur.

Quelle est la bonne façon de procéder? theme_item_list est-il la bonne solution/à jour?

8
Dominik Stożek

Quelque chose comme ça:

foreach ($images as $image) {

  // New array for readability
  $options = array(
    'path' => $image->url,
    'alt' => $image->alt,
  );

  // Push the image tag onto the items array
  $block['content']['list']['#items'][] = theme('image', $options);
}
5
Bart

J'ai rencontré ce même problème. D'après ce que je peux dire en lisant le code source de theme_item_list() , il ne peut pas utiliser de tableaux rendables comme éléments de la liste. J'ai fini par passer le tableau rendable avec toutes les images à ma propre fonction de thème pour sortir la liste. Vous pouvez essentiellement prendre votre code actuel et modifier la propriété #theme En fonction de votre thème personnalisé et ajouter vos tableaux pouvant être rendus en tant qu'enfants de votre tableau list. Pour simplifier votre fonction, vous pouvez ajouter les balises <li> Et </li> Respectivement #prefix Et #suffix À vos tableaux de rendu d'image et appeler la fonction drupal_render_children() sur votre tableau, puis il vous suffit de l'envelopper dans un <ul> et votre bien.

4
SoftArtisans

J'utilise le code suivant et il rend la liste après un appel ajax

$test = array("type"=>"ol","items"=>array('data'=>'1'),'attributes'=>array());
$commands[] = ajax_command_replace('#item-'.$ot->nid,theme_item_list($test));

la principale différence est le "#", si vous lisez le code de la fonction à fonction API Drupal theme_item_list , vous verrez qu'il n'y a pas de hachage pour les variables

    function theme_item_list($variables) {
        $items = $variables ['items'];
        $title = $variables ['title'];
        $type = $variables ['type'];
        $attributes = $variables ['attributes'];
    ... }
0
user49593