Ausgabe eines Feldes modifizieren
Eingetragen von t2k (257)
am 20.09.2013 - 14:47 Uhr in
am 20.09.2013 - 14:47 Uhr in
Hallo zusammen,
ich habe ein kleines aber für mich gerade unlösbares Problem.
Ich habe in meinem Inhaltstypen ein Image-Feld mit dem Namen "field_bild" (das sich wiederholen lässt).
Diese Bilder sollen in einer kleinen Galerie angezeigt werden (jQuery-adgallery-Plugin).
Nun habe ich eine Datei "field--field_bild.tpl.php" angelegt, in der ich die Bildausgabe entsprechend aufbereiten möchte.
Dort drin steht nun:
<div class="ad-nav">
<div class="ad-thumbs">
<ul class="ad-thumb-list">
<?php foreach ($items as $item){ ?>
<li>
<?php print render($item); ?>
</li>
<?php } ?>
</ul>
</div>
</div>
Nun brauche ich aber die Felder nicht als schnödes img-Tag, sondern in dieser Form:
<a href="testbild.jpg" rel="gallery" data-fancybox-group="gallery" class="box">
<img src="testbild-thumbnail.jpg" alt="" longdesc="testbild.jpg" title="" />
</a>
Wie kann ich das erreichen?
In der field.tpl komm ich da ja nicht weiter oder?
Vielen Dank im voraus und Grüße!
t2k
- Anmelden oder Registrieren um Kommentare zu schreiben
So etwas löse ich meist über
am 20.09.2013 - 15:12 Uhr
So etwas löse ich meist über eine preprocess-Funktion in der template.php-Datei im eigenen Theme. Dort kannst Du dann für das Bild eine Funktion aus der Drupal-API nehmen theme('image', .... dadurch wird die Funktion theme_image aufgerufen, die man über einen Konfigurations-Array steuern kann. Oder Du nimmst theme_image_style mit noch weiteren Möglichkeiten. Das Theming in Drupal ist schon ein etwas umfangreicheres Kapitel und mit den Template-Files kratzt Du nur an der Oberfläche.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Das ist starker Tobak!!! Ich
am 21.09.2013 - 17:02 Uhr
Das ist starker Tobak!!!
Ich hab mir nun am das Modul "Custom Formatters" angesehen, da ich las, das dies der beste Weg sei, in die Darstellung einzugreifen.
Dort gibt es ja auch schon einen vorgefertigten Formatter der z.B. ein Thumbnail auswirft und mit einem größeren Bild verlinkt. Dieser sieht so aus:
// Formatter settings.
$settings = $variables['#display']['settings'];
$element = array();
foreach ($variables['#items'] as $delta => $item) {
$element[$delta] = array(
'#type' => 'link',
'#href' => file_create_url(image_style_path($settings['destination_image_style'], $item['uri'])),
'#title' => theme('image_style', array(
'style_name' => $settings['source_image_style'],
'path' => $item['uri'],
)),
'#options' => array(
'html' => TRUE,
),
);
}
return $element;
Ich kann nicht mal ansatzweise erkennen, wie und wo ich das was ändern muss um diese Ausgabe zu erzielen:
<a href="testbild.jpg" rel="gallery" data-fancybox-group="gallery" class="box">
<img src="testbild-thumbnail.jpg" alt="" longdesc="testbild.jpg" title="" />
</a>
Kann da jemand was zu sagen?
Oder ist dieser Weg zu umständlich?
Das scheint ja wirklich extrem kompliziert... :-(
Vielleicht hat jemand ja auf die schnelle eine Lösung.
Vielen Dank und Grüße!
Schau dir das mal an
am 21.09.2013 - 17:16 Uhr
Schau dir das mal an ... das kann man machen solange nicht zu viele Images im Multiplem Field vorhanden sind.
http://cvanderlinden.com/blog/drupal-7-node-tpl-php-templating-rendering...
Drupal rockt!!!
Immer schön nett bleiben
am 21.09.2013 - 23:18 Uhr
Das ist starker Tobak!!!
Mit solchen Aussagen hilfst du weder dir, noch anderen mit ähnlichen Problemen.
Wie Werner schon sagt ist Theming in Drupal sehr umfangreich. Je nachdem, wie es bei dir am Ende aussehen soll führen auch viele Wege nach Rom. Manche über .tpl-Datein, Views und CSS, andere über Module.
Vor allem für Views gibt es genug Möglichkeiten, Galerien zu erstellen. Das Öffnen in einer Lightbox o.ä. kannst du z.B. dort direkt einstellen, die Anordnung zur Galerie ist vor allem eine CSS-Sache (Stichwort float:left; margin, ...).
Web: Halle im Bild | n8aktiv
Social: Facebook | Xing
@zwerg: Das war von mir
am 22.09.2013 - 19:32 Uhr
@zwerg:
Das war von mir sicherlich nicht unfreundlich oder als Angriff gemeint.
Einen eigenen Fieldformatter zu schreiben ist aber - für mich als Anfänger - nun mal alles andere als intuitiv oder selbsterklärend.
Aber scheinbar ist dies die einzige Möglichkeit, in die Ausgabe grundlegend einzugreifen.
Und das sag ich obwohl ich mich jetzt schon eine Weile damit auseinandergesetzt habe ...
Was die Views-Variante angeht, so weiß ich nicht, wie ich ein View erstellen kann, den ich für unterschiedlichste Seiten einsetzen kann.
In meinem Fall müsste ich von einer Views-Übersichts-Seite (wo alle Artikel gelistet werden) auf ein View (der den Artikel ausgibt) verlinken.
Geht das überhaupt irgendwie?
@Ionit:
Vielen Dank für den Hinweis. Ich hab das in der field.tpl in folgender Form eingesetzt:
<?php
$images = array();
$i = 0;
foreach ($items as $image) {
$images[$i] = render($image);
$i++;
}
?>
<?php
foreach ($images as $printable) {
echo $printable;
}
?>
Leider ist mir nicht klar, wie ich hier auf die verschiedenen Bildstile zugreifen kann (also thumb und medium).
Oder geht das hier nicht?
Vielen Dank und Grüße!
t2k
Du versuchst als Anfänger in
am 22.09.2013 - 19:56 Uhr
Du versuchst als Anfänger in Drupal bereits recht früh in den Eingeweiden zu basteln. Mache Dich bitte erst mal mit den ganzen vorhandenen Möglichkeiten vertraut. Sieh Dir zum Beispiel das Modul [do:ds Display Suite] und seine Möglichkeiten an und spiele damit. Kenntnisse von anderen Systemen stehen einem bei Drupal oft im Wege. Laß Dich auf Drupal und das, was dort möglich ist, einfach mal ein. Direkt zu Anfang meiner Arbeit mit Drupal tief ins Theming einzusteigen, hätte mich voll überfordert und ich hatte mit vielen Jahren IT Background eigentlich gute Voraussetzungen. Erfahrung muß man selber machen und das setzt viel Probieren und Testen voraus.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Hier ein Beispiel: <?php$node
am 22.09.2013 - 19:59 Uhr
Hier ein Beispiel:
<?php
$node = node_load($nid);
$image = field_get_items('node', $node, 'field_NAME');
foreach ($image as $key=>$value) {
$output = field_view_value('node', $node, 'field_NAME', $image[$key], array(
'type' => 'image',
'settings' => array(
'image_style' => 'thumbnail', // <------------------------------------------ place your image style here
'image_link' => 'content',
),
));
print render($output);
}
?>
weitere Infos http://benbuckman.net/tech/11/04/how-render-image-fields-drupal-7
Über Google findest du noch weiter zahlreiche Informationen und Examples ....
Drupal rockt!!!
@Werner: Danke für den
am 23.09.2013 - 01:37 Uhr
@Werner:
Danke für den Hinweis!
Ich werde mir Display Suite noch einmal näher ansehen.
Mir schien der Weg über die Template-Dateien als der Richtige, um die Ausgabe wirklich gezielt und sauber anzupassen.
Ich lerne aber gern dazu!
@lonit:
Danke für den Code!
An welcher Stelle ist der einzufügen?
Direkt in die field.tpl? Oder in die template.php? Oder in einen Custom-Formatter anzulegen? Oder in ein Modul?
Beste Grüße,
t2k