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


8

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 dường như tôi không thể chèn bất kỳ mảng nào vào #itemsmảng.

Các tài liệu API theme_item_list của Drupal 7 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 nhận được hoặc là trống <li>hoặc có một từ Arraybên trong chúng.

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


'#items' => array('data' => 'my data')dường như không thực sự làm gì hơn '#items' => 'my data'(nhìn vào mã cho theme_item_list ). 'children'được sử dụng đặc biệt để tạo một danh sách lồng nhau. Tôi không chắc tại sao nó lại được thiết lập theo cách này.
thứ ba

Câu trả lời:


5

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

1
Điều này hoạt động và dễ dàng hơn câu trả lời của tôi. Ưu điểm duy nhất của câu trả lời của tôi là mọi thứ vẫn nằm trong mảng kết xuất và có thể được điều khiển bởi các mô-đun / chủ đề khác. Nếu điều đó không quan trọng với bạn, thì đây chắc chắn là một cách tốt để đi.
SoftArtisans

Tôi đã suy nghĩ về giải pháp này. Như đã đề cập ở trên, vấn đề duy nhất là không giữ cấu trúc trang dưới dạng một mảng có thể kết xuất - nếu các mô-đun khác muốn thay đổi các mục, nó sẽ khó hơn nhiều. Nhưng tôi đoán nó đủ tốt rồi :) Cảm ơn!
Dominik Stożek

4

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ó, 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 #themetính 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 listmảng. Để thực hiện chức năng của bạn dễ dàng hơn, bạn có thể thêm <li></li>thẻ như #prefix#suffixtương ứng để hình ảnh của bạn làm cho các mảng và cuộc gọi drupal_render_children()trên mảng của bạn, sau đó bạn chỉ cần quấn nó trong một <ul>và tốt của bạn.


0

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'];
    ... }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.