Ich verwende das Drupal-Absatzmodul , mit dem Sie "Bündel" von Feldern in anderen Feldern erstellen können. (Dies geschieht mit Entitäten). Jedes Bundle hat eine eigene tpl.php-Datei.
Darüber hinaus können Sie "Unterbündel" in den "Hauptbündeln" für komplexe Layouts verschachteln.
Ich habe ein "Haupt-Bundle" namens erstellt field_panels_content
.
Darin befindet sich ein weiteres "Subbundle", das a enthält field_body_text
. Das "Hauptbündel" kann eine unbegrenzte Anzahl von "Unterbündeln" enthalten.
In meinem Thema muss ich auf alle field_body_text
Felder aus dem mehrfachen "Unterbündel" aus der Datei tpl.php zugreifen, die für das "Hauptbündel" vorgesehen ist.
Ich habe devel_themer verwendet und festgestellt, dass ich field_body_text
wie folgt zu den Feldern gelangen kann :
<?php print render($content['field_panels_content'][0]['entity']['paragraphs_item'][9]['field_body_text']); ?>
<?php print render($content['field_panels_content'][2]['entity']['paragraphs_item'][10]['field_body_text']); ?>
<?php print render($content['field_panels_content'][2]['entity']['paragraphs_item'][12]['field_body_text']); ?>
Wie Sie sehen, ist dies kein effizientes Theming, da ich den zweiten Array-Wert kennen müsste, um ihn auszudrucken (z. B. [9] [10] [12]).
Kann ich eine Schleife oder eine andere PHP-Funktion verwenden, um automatisch zum zweiten Array-Wert zu gelangen, ohne es zu wissen?
Dieser zweite Array-Wert ändert sich mit jedem neuen Inhalt (z. B. wenn ich ein neues Subbundle hinzufüge, hat es den Wert [13]. Der Grund, warum die Zahlen von [10] nach [12] springen, ist, dass ich das Subbundle gelöscht habe, das war [11].
Aktualisieren
Hier sind einige weitere Schritte, die ich versucht habe (von dieser Seite ):
Hier ist eine Beispielschleife:
<?php
foreach ( $content['field_panels_content'] as $wrapper) {
foreach ( $wrapper['entity']['paragraphs_item'] as $item ) {
if ( !empty($item['field_body_text']) ) {
print render($item['field_body_text']);
}
}
}
?>
Es werden die folgenden Ergebnisse angezeigt: Objekt vom Typ ParagraphsItemEntity kann nicht als Array in foreach verwendet werden ($ wrapper ['entity'] ['agraphs_item '] als $ item) {
Hier ist eine überarbeitete Version:
<?php
foreach ( $content['field_panels_content'] as $wrapper) {
foreach ( $wrapper['entity'].paragraphs_item as $item ) {
if ( !empty($item.field_body_text) ) {
print render($item.field_body_text);
}
}
}
?>
Fehlermeldung: Fatal error: Cannot use object of type ParagraphsItemEntity as array in line "foreach ( $wrapper['entity'].paragraphs_item as $item ) {"
Wenn Sie den Code so bearbeiten, dass nur field_body_text in eckigen Klammern steht (z. B. $item['field_body_text']
), wird folgende Fehlermeldung ausgegeben :
Fatal error: Cannot use object of type ParagraphsItemEntity as array
Wenn Sie den Code so bearbeiten, dass nuragraphs_item in eckigen Klammern steht (z. B. $wrapper['entity']['paragraphs_item']
), wird folgende Fehlermeldung ausgegeben:
Fatal error: Only variables can be passed by reference in line print render($item.field_body_text);
Wenn ich print anstelle von render verwende, wird folgende Fehlermeldung angezeigt:
Fatal error: Cannot use object of type ParagraphsItemEntity as array
Weitere Hinweise
Der folgende Code funktioniert perfekt:
<?php print render($content['field_panels_content'][0]['entity']['paragraphs_item'][9]['field_body_text']); ?>
<?php print render($content['field_panels_content'][1]['entity']['paragraphs_item'][10]['field_body_text']); ?>
Es sollte also sicher ein einfacher Fall sein, den Code in eine Schleife umzugestalten, um das gewünschte Ergebnis zu erzielen.
bitte beachten Sie
Ich möchte keine anderen Module verwenden.
Ich werde den gesamten field_body_text separat oben in der tpl-Datei ausdrucken. Ich werde dann den gesamten Absatz (mit dem field_body_text
Standbild darin) auf normale Weise anzeigen .
Anstatt Vorlagen zu überschreiben und zu erstellen, verwalten Sie die gesamte Anzeige der Entität über die Benutzeroberfläche und erstellen Sie Feldformatierer für Feldtypen, wenn der Kern Ihre Anzeigeanforderungen nicht abdeckt.
Dies ist eine viel übersichtlichere Methode zum Definieren von Anzeigen. Vorlagen werden schnell unübersichtlich, insbesondere beim Eintauchen in Referenzen.
quelle