Ich muss einen Feldwert als CSS-Klasse in einer Seitenvorlage festlegen. Wie kann ich es auf die Twig-Art machen?
{{attributes.addClass('class-name')}}
ist die Möglichkeit, die Klasse manuell festzulegen.
Ich habe ein Listenfeld, in dem der Benutzer eine Hintergrundfarbe für einen Teil der Site festlegen kann. In Drupal 7 habe ich diesen Code verwendet.
<div class="<?php print render($content['field_background']); ?>">
In Drupal 8 kann ich das Feld mit drucken {{ content.field_background }}
, <div class="{{ content.field_background }}">
funktioniert aber nicht.
{% set classes = [ ...
die Klassen dann drucken<article{{ attributes.addClass(classes) }}>
oder Sie können auch so etwas tun<div{{ content_attributes.addClass('foobar' | clean_class) }}>
. Wie der obige Hinweis sagt, denke ich, dass wir mehr Informationen brauchen. Wenn Sie einen Feldwert als Klasse möchten, ist es hilfreich, auch das Kint- und Twig-Debug zu verwenden, und Sie müssen möglicherweise eine Variable mit einer Vorverarbeitungsfunktion festlegen, die jedoch möglicherweise nicht erforderlich ist.Antworten:
Dies kann auf verschiedene Arten geschehen, Sie können alles in der Knotenvorlage mit Twig tun oder Sie können eine Vorverarbeitungsfunktion erstellen und eine Variable zur Verwendung in der Knotenvorlage erstellen. Der Schlüssel zum Erlernen des Arrays ist die Verwendung von Devel Kint. Ohne das wissen Sie nicht, was sich im Array befindet.
Installieren Sie zuerst Kint, das mit dem Devel-Modul für Drupal 8 geliefert wird. Wählen Sie anschließend Ihre Knotenvorlage aus (dies kann jedoch in jeder Art von Vorlage erfolgen) und untersuchen Sie die Inhaltsvariable wie folgt (idealerweise am unteren Rand der Vorlage).
Daraus werden Debugging-Informationen auf der Seite gedruckt, und wenn Sie das Array erweitern, werden Sie eine ganze Reihe von Informationen sehen. Ich sehe sofort meinen Hintergrundwert und kann einen Pfad erstellen, um diesen auszudrucken
Jetzt können Sie dies als Hintergrundstil oder Klasse in einem div drucken
Ich habe dies getestet und es funktioniert großartig. Das Div hat die Hintergrundfarbe gerendert, die ich in meiner Feldliste bei der Knotenbearbeitung ausgewählt hatte.
Dies ist nicht ideal, daher möchten wir wahrscheinlich eine Variable dafür in einem preprocess_node in der .theme-Datei unseres Themas erstellen.
Nachdem ich eine Var erstellt habe, ist es viel sauberer, diese auszudrucken:
Ein Hinweis für oben, Sie sollten dies wahrscheinlich mit einer if-Anweisung umschließen, um zu überprüfen, ob sie leer ist oder nicht.
Dies würde funktionieren oder die if-Anweisung strukturieren, wo es Ihnen gefällt
quelle
In einer Knotenvorlage befinden sich die Felder in
{{ content }}
. In einer Seitenvorlage gibt es keine Inhaltsvariable, sondern eine Seitenvariable, die Regionen enthält{{ page.region }}
.Da Sie nach der Seitenvorlage gefragt haben, können wir sie nicht verwenden
content
.Sie können jedoch {{node}} in beiden Vorlagen verwenden. Das Knotenobjekt befindet sich immer in einer Knotenvorlage und in der Seitenvorlage, wenn auf der Seite ein Knoten angezeigt wird.
Das sollte also in beiden Vorlagen funktionieren:
quelle
fielditemlist
.value
bekommt mit etwas Magie des Zweigs und des Feldobjekts den Wert des ersten Gegenstands. In einem mehrwertigen Feld können Sie auf jedes Element zugreifen, indem Sie eine Zahlnode.field_myfield.0.value