[gelöst] Individuelle Bildausgabe in der page.tpl.php
am 14.09.2016 - 09:35 Uhr in
Liebe Drupal Community,
zurzeit arbeite ich daran, ein bestimmtes Imagefield (field_bilder) ganz bestimmt in der page.tpl.php auszugeben. Ich möchte die Bilder, die ich dort hochlade in je ein Div Container packen um es in einen Imageslider zu stecken.
Dazu habe ich vorab folgendes in der page.tpl.php eingebaut.
...
<div id="header-image">
<?php $field = field_view_field('node', $node, 'field_bilder', array('label'=>'hidden'));
print '<div class="swiper-container">';
print '<div class="swiper-wrapper">';
print render($field);
print '</div>';
print '<div class="swiper-pagination swiper-pagination-white"></div>';
print '</div>';
?>
</div>
...
Die entsprechende HTML Ausgabe sieht nun wie folgt aus:
...
<div id="header-image">
<div class="swiper-container">
<div class="swiper-wrapper">
<img typeof="foaf:Image" src="http://meinedomain.de/sites/default/files/bild_01.jpg" width="1280" height="700" alt="" />
<img typeof="foaf:Image" src="http://meinedomain..de/sites/default/files/bild_02.jpg" width="1280" height="700" alt="" />
<img typeof="foaf:Image" src="http://meinedomain..de/sites/default/files/bild_03.jpg" width="1280" height="700" alt="" />
</div>
<div class="swiper-pagination swiper-pagination-white"></div>
</div>
</div>
...
Soweit so gut, nur ist es so leider noch nicht ganz korrekt. Die images sollten nicht im img tag sondern sich in je einem div als background-image befinden.... also so
...
<div class="swiper-slide" style="background-image:url(http://meinedomain.de/sites/default/files/bild_01.jpg)"></div>
<div class="swiper-slide" style="background-image:url(http://meinedomain.de/sites/default/files/bild_02.jpg)"></div>
<div class="swiper-slide" style="background-image:url(http://meinedomain.de/sites/default/files/bild_03.jpg)"></div>
...
Leider weiß ich nicht, wie man die Bildausgabe so steuert und dem ganzen dazu noch einen vordefinierten Bildstil vergibt. Kann mir hier vielleicht jemand weiterhelfen?
Vielen Dank im voraus.
Mit besten Grüßen
Dennis
- Anmelden oder Registrieren um Kommentare zu schreiben
....
am 14.09.2016 - 11:06 Uhr
...
C.A.W. Webdesign
Baue ein Slidermodul ein
am 14.09.2016 - 11:52 Uhr
und verwende es Drupalkonform.
Was du hier tust, geht komplett an Drupal vorbei, und wird unter Drupal8 nicht mehr funktionieren.
Grüße
Ronald
Es gibt kein passendes Modul,
am 14.09.2016 - 11:59 Uhr
Es gibt kein passendes Modul, was genau so funktioniert wie ich es mir vorstelle und es ist ja noch in Drupal 7.
Nimm einen normalen Slider
am 14.09.2016 - 12:17 Uhr
Nimm einen normalen Slider wie jCarousell für Views und erstelle eine Ausgabe von Bild und Text zusammen. Dabei kannst Du die Struktur der Viewsausgabe so neu definieren, daß Dein Bild als Hintergrundbild verwendet wird oder Du setzt einfach Text auf das Bild, was mit ein bißchen CSS auch kein Problem sein sollte. Daraus machst Du einen Block und den kannst Du positionieren, wo Du es möchtest. Alles andere wird nur Gemurkse und Du bekommst die Verbindung zwischen den hochgeladenen Bildern und dem Platz für den Hintergrund nicht sauber gebaut.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Das entspricht leider auch
am 14.09.2016 - 13:30 Uhr
Das entspricht leider auch nicht dem, was ich mir vorstelle. Ich hab vor, einen Inhaltstyp "Referenz" zu nutzen, den du mit den Feldern "Bilder" und "Projektbeschreibung" füllen kannst. Das Node dazu zeigt einen Full-Size Imageslider mit Fade-Effekt und dazu folgt im unteren Teil eine Projektbeschreibung. Daher möchte ich das direkt im page.tpl.php Dokument definieren, welche Inhalte wo platziert werden und wie diese dargestellt werden.
Jetzt wird klarer, was Du
am 14.09.2016 - 13:50 Uhr
Jetzt wird klarer, was Du willst. Nimm das Modul [do:viewfield] und integriere den View, der den Slider bildet, in der Ausgabe Deines Node-Types. Dafür mußt Du auch noch nicht in der page.tml.php ändern. Das ist in meinen Augen ohnehin die falsche Datei. Du möchtest doch nur die Ausgabe eines speziellen Inhaltstyps verändern. Also erstellst Du, wenn überhaupt, eine node--[typename].tpl.php. Wenn Du dazu spezeille Variablen benötigst, ist eine preprocess_node-Funktion in der template.php in Deinem Theme hilfreich. Vermutlich reicht Dir aber die Definition der Ausgabe Deines Inhalttyps.
Ich glaube auch immer noch nicht, daß man für Deine Aufgabenstellung programmieren müßte. In schwierigen Fällen kann man mit Panels die Ausgabe einer Seite aus mehreren Blöcken und Views aufbauen. Auch das ist reine Konfiguration.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Probier doch mal das: <div
am 14.09.2016 - 15:06 Uhr
Probier doch mal das:
<div id="header-image">
<?php
print '<div class="swiper-container">';
print '<div class="swiper-wrapper">';
foreach($node->field_bilder['und'] as $image)
{
print '<div class="swiper-slide" style="background-image:url('.image_style_url('dein_image_style', $image['uri']).')"></div>';
}
print '</div>';
print '<div class="swiper-pagination swiper-pagination-white"></div>';
print '</div>';
?>
</div>
'dein_image_style' musst Du durch den Machine name des gewünschten Bildstils ersetzen
Perfekt! Genau so sollte es
am 14.09.2016 - 16:18 Uhr
Perfekt! Genau so sollte es funktionieren.
Vielen Dank für eure Hilfe und euer Know-How!
Naja, eine Kleinigkeit gibt
am 15.09.2016 - 08:15 Uhr
Naja, eine Kleinigkeit gibt es doch noch :-/
Ich erhalte nun ab und zu folgende Fehlermeldung.
Notice: Undefined variable: node in include() (Zeile 77 von /mnt/webo/e0/55/54150555/htdocs/refresh/sites/all/themes/meintheme/templates/page.tpl.php).
Notice: Trying to get property of non-object in include() (Zeile 77 von /mnt/webo/e0/55/54150555/htdocs/refresh/sites/all/themes/meintheme/templates/page.tpl.php).
Warning: Invalid argument supplied for foreach() in include() (Zeile 77 von /mnt/webo/e0/55/54150555/htdocs/refresh/sites/all/themes/meintheme/templates/page.tpl.php).
und bezieht sich auf die Zeile
foreach($node->field_bilder['und'] as $image)
Wie ich schon schrieb, bist
am 15.09.2016 - 09:13 Uhr
Wie ich schon schrieb, bist Du im falschen template-File. Ein page.tpl.php weiß nicht von einem Node, denn er gilt für alle Seiten. Im node.tpl.php liegt die Node-Variable vor und auch in einem node--[nodetyp].tpl.php.
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Das kommt vermutlich auf
am 15.09.2016 - 09:21 Uhr
Das kommt vermutlich auf "Nicht"-Node-Seiten.
Dann solltest du noch mit so was wie
if(isset($node))
abfangen ob die node-Variable überhaupt gesetzt ist und nur in diesem Fall Deinen Slider-code einbinden.
Oder Du verwendest statt page.tpl.php, page--node.tpl.php
Du wirst aber auch noch in den Fällen Probleme haben wo der Content Type "field_bilder" nicht enthält. Das solltest Du dann auch noch abfangen, z. B. mit if(isset($node->field_bilder)) oder mit Prüfung ob der Node vom passenden Content Type ist oder mit einer passenden Template Suggestion für page.tpl.php oder durch Verlagern des Codes in node.tpl.php bzw. einen Override von node.tpl.php ... Drupal hat auf jeden Fall viele Möglichkeiten.
Zitat: Ein page.tpl.php weiß
am 15.09.2016 - 09:26 Uhr
Ein page.tpl.php weiß nicht von einem Node, denn er gilt für alle Seiten
stimmt so nicht, page.tpl.php enthält das node-Objekt wenn es vorhanden ist, siehe https://api.drupal.org/api/drupal/includes%21theme.inc/function/template_preprocess_page/7.x
if ($node = menu_get_object()) {
$variables['node'] = $node;
}
Prinzipiell geb ich Dir schon recht, dass der Code besser in node.tpl.php aufgehoben wäre, aber vielleicht will der TE es irgendwo platzieren wo er mit node.tpl.php nicht hinkommt.
Die Fehlermeldung ist
am 15.09.2016 - 17:08 Uhr
Die Fehlermeldung ist verschwunden.
Das hat nun geholfen Stefan, vielen Dank.
Ich werde später zudem eine page--referenz.tpl.php erzeugen, wo das Feld field_bilder ein Pflichtfeld wird. Dann sollte es keinerlei Probleme mehr geben.
Vorsicht: Im Drupal-Standard
am 15.09.2016 - 17:25 Uhr
Vorsicht: Im Drupal-Standard ist page--contenttype.tpl.php nicht definiert. Diese TEmplate Suggestion musst Du ggf. selbst erzeugen oder Dein Theme liefert es bereits.
Stimmt, das Problem hatte ich
am 16.09.2016 - 08:06 Uhr
Stimmt, das Problem hatte ich damals bereits. Hatte dazu aber einen guten Beitrag von hier gefunden http://www.drupalcenter.de/node/34210.
Das hat mir weitergeholfen.