2012-01-06 4 views
2

Я использую drupal 7, я хотел бы знать, могу ли я использовать функцию theme_item_list() для реализации многоуровневых элементов списка. Как показано ниже:Как реализовать многоуровневый список в drupal7 с помощью theme_item_list()?

  • Пункт 1
      тест
    • Пункт 1.1
    • Пункт 1.2
    • Пункт 1.3
  • Пункт 2
    • Пункт 2.1
    • Пункт 2.2
    • Пункт 2.3
      • Пункт 2.3.1
      • товара 2.3.2
      • Пункт 2.3.3
  • Позиция 3
  • Если возможно, кто-нибудь может помочь мне с примером.

    ответ

    4

    Да, это возможно, если вы передаете в массив с ключами data и children для каждого элемента, который имеет вложенный список, например:

    $items = array(
        array(
        'data' => 'Item 1', 
        'children' => array(
         array(
         'data' => 'Item 1.1', 
         'children' => array(
          'Item 1.1.1', 
          'Item 1.1.2' 
         ) 
        ), 
         array(
         'data' => 'Item 1.2', 
         'children' => array(
          'Item 1.2.1', 
          'Item 1.2.2' 
         ) 
        ) 
        ) 
    ), 
        array(
        'data' => 'Item 2', 
        'children' => array(
         // etc... 
        ) 
    ) 
    ); 
    
    $output = theme('item_list', array('items' => $items)); 
    

    data ключ представляет содержимое элемента списка , children - это массив элементов списка для рендеринга как отдельный список в этом элементе списка. Функция рекурсивна и может обрабатывать любое количество уровней.

    +2

    Спасибо. Обратите внимание, что вместо прямого вызова 'theme()' часто лучше создавать массив визуализации следующим образом: '$ output = array ('#theme' => 'item_list', '#items' => $ items, '#type '=>' ul ',); ' – marcvangend

    +0

    Абсолютно верно @marcvangend, я думаю, что этот ответ предварял весь сдвиг для рендеринга массивов :) – Clive