it-swarm-vi.com

Kết xuất các mục theme_item_list

Mô-đun của tôi cung cấp một khối đơn giản cần chứa một danh sách không có thứ tự với một số hình ảnh. Từ một hàm chặn, tôi trả về một mảng có thể kết xuất:

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

Tôi muốn có một số mảng có thể kết xuất dưới dạng các mục trong danh sách mục, nhưng tôi dường như không thể chèn bất kỳ mảng nào vào #items mảng.

API Drupal 7 theme_item_list docs nói:

mục: Một mảng các mục sẽ được hiển thị trong danh sách. Nếu một mục là một chuỗi, thì nó được sử dụng như là. Nếu một mục là một mảng, thì phần tử "dữ liệu" của mảng được sử dụng làm nội dung của mục danh sách. Nếu một mục là một mảng có phần tử "con", những phần tử đó được hiển thị trong một danh sách lồng nhau. Tất cả các yếu tố khác được coi là thuộc tính của thành phần mục danh sách.

Tôi đã thử sử dụng cả hai yếu tố "dữ liệu" và "trẻ em", nhưng tôi bị trống <li> 's hoặc có một từ Array bên trong chúng.

Cách thích hợp để làm điều này là gì? Theme_item_list là giải pháp đúng/cập nhật?

8
Dominik Stożek

Một cái gì đó như thế này:

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

Tôi gặp vấn đề chính xác như vậy. Từ những gì tôi có thể nói là đọc mã nguồn cho theme_item_list() nó không thể sử dụng các mảng có thể kết xuất làm các mục cho danh sách. Cuối cùng tôi đã chuyển mảng kết xuất với tất cả các hình ảnh sang chức năng chủ đề của riêng tôi để xuất danh sách. Về cơ bản, bạn có thể lấy mã hiện tại của mình và thay đổi thuộc tính #theme Thành chức năng chủ đề tùy chỉnh và thêm các mảng có thể hiển thị của bạn dưới dạng con của mảng list của bạn. Để làm cho chức năng của bạn dễ dàng hơn, bạn có thể thêm các thẻ <li></li> Dưới dạng #prefix#suffix Vào mảng kết xuất hình ảnh của bạn và gọi hàm drupal_render_children() trên mảng của bạn, sau đó bạn chỉ cần bọc nó trong <ul> và lợi ích của bạn.

4
SoftArtisans

Tôi đang sử dụng mã sau đây và nó hiển thị danh sách sau cuộc gọi ajax

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

sự khác biệt chính là "#", nếu bạn đọc mã của hàm tại Hàm Drupal API theme_item_list , bạn sẽ thấy không có băm cho các biến

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