[gelöst] Feldinhalt im page-template ausgeben
Eingetragen von jens78 (40)
am 18.06.2016 - 16:06 Uhr in
am 18.06.2016 - 16:06 Uhr in
Hallo,
ich möchte den Inhalt eines image Feldes (head_img) im page Template ausgeben.
Ich habe es so
{{ content.field_head_img }}
versucht, hat aber leider nicht funktioniert. Könnt ihr mir sagen ob und wie es möglich ist Feldinhalte ausserhalb des node Templates auszugeben?
Vielen Dank im voraus
Jens
- Anmelden oder Registrieren um Kommentare zu schreiben
wenn das Image in diesem content enthalten ist
am 19.06.2016 - 07:23 Uhr
kannst du es so ausgeben.
Was hast du aber genau vor?
Vielleicht versuchst du etwas zu programmieren, was Drupal von selbst schon tut?
Bedenke auch, dass du die Caches leeren musst, wenn du am Template Änderungen vorgenommen hast.
Grüße
Ronald
Ich möchte unterhalb des
am 19.06.2016 - 17:20 Uhr
Ich möchte unterhalb des Headers ein Bild ausgeben, welches über die gesamte Seitenbreite geht. Der nodeinhalt selbst ist nur 1180px breit.
Der code im Template sieht so aus:
<div> <h1>Test</h1> {{ content.field_head_img }} </div>
im Quelltext der Seite erscheint aber nur:
<div> <h1>Test</h1> </div>
Innerhalb des node-content wird das Bild so ausgegeben:
<div data-quickedit-field-id="node/1/field_head_img/de/full" class="float-none field field-node--field-head-img field-name-field-head-img field-type-image field-label-above has-single">
<h3 class="field__label align-center">head_img</h3>
<figure class="field-type-image__figure image-count-1 align-center">
<div class="field-type-image__item">
<img src="/sites/default/files/2016-06/image_0.jpg" width="3275" height="1458" alt="image" typeof="foaf:Image" />
</div>
</figure>
</div>
Den cache habe ich mit drush cr gelöscht.
jens78 schriebIch habe es so
am 21.06.2016 - 08:30 Uhr
Ich habe es so
{{ content.field_head_img }}
versucht, hat aber leider nicht funktioniert.
Das kann auch nicht funktionieren, denn das
$content
array steht im Page Template gar nicht zur Verfügung. Guck mal in deinem Theme nach der DEINTEHME.theme Datei. Hier müsstest du in einem preprocess_page() hook das Image dem vars array hinzufügen:DEINTEHME_preprocess_page(&$variables) {
$variables['field_head_img'] = 'code zum bild holen'; // In D7 wurde das mit field_get_items() gemacht, in D8 hat sich das geändert. Hier einfach im preprocess_node() gucken, wie der Code ist
}
Im Page Template dann:
{{ field_head_img }}
Alternativ kannste das markup im Template auch direkt ausgeben:
{{'<img src="/pfad/zu/deinem/image.png">'}}
Vielen Dank für deine
am 21.06.2016 - 10:29 Uhr
Vielen Dank für deine Antwort.
Hier einfach im preprocess_node() gucken, wie der Code ist
Ich habe mir den entsprechenden Code angesehen, komme da aber nicht weiter. Weil ich eigentlich gar nicht verstehe, was dort passiert :-(
/**
* Preprocess variables for node templates.
* @param $variables
*/
function at_core_preprocess_node(&$variables) {
$theme = \Drupal::theme()->getActiveTheme()->getName();
$config = \Drupal::config($theme . '.settings')->get('settings');
$node = $variables['node'];
// Extension settings
if (isset($config['enable_extensions']) && $config['enable_extensions'] === 1) {
if (isset($config['enable_shortcodes']) && $config['enable_shortcodes'] === 1) {
if (!empty($config['nodetype_classes_' . $node->getType()])) {
$shortcodes = Tags::explode($config['nodetype_classes_' . $node->getType()]);
foreach ($shortcodes as $class) {
$variables['attributes']['class'][] = Html::cleanCssIdentifier($class);
}
}
}
}
// Header and Footer attributes.
$variables['header_attributes'] = new Attribute(array('class' => array()));
$variables['footer_attributes'] = new Attribute(array('class' => array()));
// SEE https://drupal.org/node/2004252 or a follow up issue.
if ($variables['display_submitted']) {
// Add a class to the header if submitted is active, so we can theme dynamically.
$variables['header_attributes']['class'][] = 'node__header--has-meta';
// Initialize new attributes arrays.
$variables['meta_attributes'] = new Attribute(array('class' => array()));
$variables['meta_attributes']['class'][] = 'node__meta';
$variables['submitted_attributes'] = new Attribute(array('class' => array()));
$variables['submitted_attributes']['class'][] = 'node__submitted';
// Add a class if author picture is printing.
// TODO - does this break the entity render cache?
if ($author_picture = \Drupal::service('renderer')->render($variables['author_picture'])) {
// TODO - does this fail if twig debugging is on?
if (!empty($author_picture)) {
$variables['meta_attributes']['class'][] = 'node__meta--has-author-picture';
}
}
}
}
Lösung
am 24.06.2016 - 15:26 Uhr
Ich hab die Lösung gefunden. Die Felder sind doch im page-Template verfügbar.
Mit diesem Code wird das Bild ausgegeben:
<img src="{{ file_url(node.field_head_img.entity.fileuri) }}"/>