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


8

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

$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のドキュメントは言います:

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

「data」要素と「children」要素の両方を使用してみましたが、空<li>のが表示されるか、Arrayその中に単語が含まれています。

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


'#items' => array('data' => 'my data')'#items' => 'my data'theme_item_listのコードを見てください)実際には何も実行しないようです。'children'ネストされたリストを作成するために特に使用されます。なぜこのように設定されているのかわかりません。
サードパーティ、2014

回答:


5

このようなもの:

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);
}

1
これは機能し、私の答えよりも簡単です。私の答えの唯一の利点は、すべてがまだレンダー配列にあり、他のモジュール/テーマで操作できることです。それがあなたにとって重要ではない場合、これは間違いなく良い方法です。
SoftArtisans 2011

私はこの解決策を考えていました。上記のように、唯一の問題は、ページ構造をレンダリング可能な配列として保持しないことです。他のモジュールがアイテムを変更したい場合は、はるかに困難になります。しかし、私はそれで十分だと思います:)ありがとう!
ドミニクStożek11年

4

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


0

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

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

主な違いは「#」です。DrupalAPI関数theme_item_listで関数のコードを読むと、変数のハッシュがないことがわかります

    function theme_item_list($variables) {
        $items = $variables ['items'];
        $title = $variables ['title'];
        $type = $variables ['type'];
        $attributes = $variables ['attributes'];
    ... }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.