Mein Modul bietet einen einfachen Block, der eine ungeordnete Liste mit einigen Bildern enthalten muss. Von einer Blockfunktion gebe ich ein renderbares Array zurück:
$block['content'] = array(
'list' => array(
'#theme' => 'item_list',
'#type' => 'ul',
'#attributes' => array('class' => 'foo1'),
'#items' => array(
/* ... what should go here? */
),
),
);
Ich möchte einige renderbare Arrays als Elemente in der Elementliste haben , aber ich kann anscheinend keine Arrays in das #items
Array einfügen .
In den API- Dokumenten zu Drupal 7 theme_item_list heißt es:
Elemente: Ein Array von Elementen, die in der Liste angezeigt werden sollen. Wenn ein Element eine Zeichenfolge ist, wird es unverändert verwendet. Wenn ein Element ein Array ist, wird das Element "data" des Arrays als Inhalt des Listenelements verwendet. Wenn ein Element ein Array mit einem "untergeordneten" Element ist, werden diese untergeordneten Elemente in einer verschachtelten Liste angezeigt. Alle anderen Elemente werden als Attribute des Listenelementelements behandelt.
Ich habe versucht, sowohl "Daten" - als auch "Kinder" -Elemente zu verwenden, aber ich erhalte entweder leere <li>
oder es ist ein Wort Array
in ihnen.
Was ist der richtige Weg, um dies zu tun? Ist theme_item_list die richtige / aktuelle Lösung?
'#items' => array('data' => 'my data')
scheint nicht wirklich mehr zu tun als'#items' => 'my data'
(siehe den Code für theme_item_list ).'children'
wird speziell zum Erstellen einer verschachtelten Liste verwendet. Ich bin mir nicht sicher, warum es so eingerichtet ist.Antworten:
Etwas wie das:
quelle
Ich bin auf genau das gleiche Problem gestoßen.
theme_item_list()
Nach allem, was ich beim Lesen des Quellcodes sagen kann, können keine renderbaren Arrays als Elemente für die Liste verwendet werden. Am Ende habe ich das renderbare Array mit allen Bildern an meine eigene Themenfunktion übergeben, um die Liste auszugeben. Sie können grundsätzlich Ihren aktuellen Code verwenden und die#theme
Eigenschaft in Ihre benutzerdefinierte Designfunktion ändern und Ihre renderbaren Arrays als untergeordnete Elemente Ihres Arrays hinzufügenlist
. Um Ihre Funktion zu erleichtern, können Sie die hinzufügen<li>
und</li>
Tags als#prefix
und#suffix
jeweils zu Ihrem Bild machen Arrays und Anrufdrupal_render_children()
auf dem Array, dann wickeln Sie es einfach in einem<ul>
und Ihre gut.quelle
Ich verwende folgenden Code und er rendert die Liste nach einem Ajax-Aufruf
Hauptunterschied ist das "#". Wenn Sie den Code der Funktion in der Drupal-API-Funktion theme_item_list lesen , werden Sie feststellen , dass für die Variablen keine Hashes vorhanden sind
quelle