web-dev-qa-db-ja.com

theme_item_listアイテムのレンダリング

私のモジュールは、いくつかの画像を含む順不同リストを含める必要がある単純なブロックを提供します。ブロック関数から、レンダリング可能な配列を返します:

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

レンダリング可能な配列を項目リストの項目として使用したいのですが、#items配列に配列を挿入できません。

Drupal 7 theme_item_list API docsによると:

items:リストに表示されるアイテムの配列。アイテムが文字列の場合は、そのまま使用されます。項目が配列の場合、配列の「データ」要素がリスト項目のコンテンツとして使用されます。アイテムが「子」要素を持つ配列の場合、それらの子はネストされたリストに表示されます。他のすべての要素は、リスト項目要素の属性として扱われます。

"data"要素と "children"要素の両方を使用してみましたが、空の<li>を取得するか、その中にWord Arrayが含まれています。

これを行うための適切な方法は何ですか?theme_item_listは正しい/最新のソリューションですか?

8
Dominik Stożek

このようなもの:

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

私はこれとまったく同じ問題に遭遇しました。 theme_item_list() のソースコードを読むと、リストの項目としてレンダリング可能な配列を使用できません。最終的に、すべての画像を含むレンダリング可能な配列を自分のテーマ関数に渡してリストを出力しました。基本的には、現在のコードを取得し、_#theme_プロパティをカスタムテーマ関数に変更して、レンダリング可能な配列をlist配列の子として追加できます。関数を簡単にするために、_<li>_および_</li>_タグをそれぞれ_#prefix_および_#suffix_としてイメージレンダー配列に追加し、drupal_render_children() onを呼び出すことができます。あなたの配列、そしてあなたは単にそれを_<ul>_とあなたの良いものでラップします。

4
SoftArtisans

私は次のコードを使用しており、それはajax呼び出しの後にリストをレンダリングします

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

主な違いは "#"です。関数のコードを Drupal API関数theme_item_list で読み取ると、変数のハッシュがないことがわかります

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