Bild Url in Views Template auslesen, Custom View
am 17.01.2013 - 10:43 Uhr in
Hallo zusammen,
ich versuche schon ne Weile folgendes Problem zu lösen, aber es geht irgendwie nicht richtig.
Ich habe einen Block View erstellt. Hier lese ich alle Inhalte von einem erstellten Inhaltstyp aus. Folgende Fields habe ich definiert:
Teaser-Headline
Teaser-Bild
Teaser-Kurztext
Aus diesen 3 Feldern soll später ein Slider entstehen. Probleme hab ich mit dem auslesen, abfrage der "raw"-Bild URI.
Der View soll folgende Ausgabe machen (wie gesagt, Problem ist "background:url..."
$title= $fields['field_teaser_headline']->content;
$img= $fields['field_teaser_bild']->content;
$kurztext= $fields['field_teaser_kurztext']->content;
<div id="teaserlist_wrapper">
<ul id="teaserlist">
<li class="teaser">
<a href="DIE_URL_ZUM_NODE">
<div style="background: url(<?php print $img; ?>) no-repeat;">
<h2><?php print $title ?></h2>
</div>
</a>
<p><?php print $kurztext ?> <a href="DIE_URL_ZUM_NODE">mehr...</a>
</p>
</li>
</ul>
</div>
Den obenstehenden Code habe ich in ein Views - Template eingebaut: views-view-fields--view-teaser--block.tpl
$img= $fields['field_teaser_bild']->raw; gibt mir nur die fid aus. Brauche aber für das bg-image die Url zum Bild ohne irgendwelche Styles...
Ich hoffe, es kann jemand helfen.
Gruß und danke schonmal.
- Anmelden oder Registrieren um Kommentare zu schreiben
Wenn Du im View Felder
am 17.01.2013 - 10:52 Uhr
Wenn Du im View Felder ausgibst, kannst Du die ersten beiden Felder von der Ausgabe ausschließen und beim dritten Feld mittels "Ergebnisse überschreiben" deinen oben gezeigten HTML-Code einbauen. Du brauchst dann auch kein Print, da Views Dir Token zur Verfügung stellt, die bereits fertig aufbereitet sind und nur noch in das HTML-Gerüst eingesetzt werden müssen. Das ist wesentlich einfacher, als über einen eigenen Template-File zu gehen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Trotzdem keine URL
am 17.01.2013 - 11:11 Uhr
Hi,
erstmal danke für Deinen Tipp.
Wenn ich im "Bild" Field eine Rewrite Rule angebe, z.B.
<div style="background: url([field_teaser_bild]) no-repeat;">
<h2>[field_teaser_headline]</h2>
</div>
Dann kommt gar kein Bild mehr.
Ich habe folgende Replacement-Patterns zur Verfügung (da ist keine URL dabei):
[field_teaser_headline] == Inhalt: Teaser-Headline
[field_teaser_bild] == Inhalt: Teaser-Bild
[field_teaser_bild-fid] == Raw fid
[field_teaser_bild-alt] == Raw alt
[field_teaser_bild-title] == Raw title
[field_teaser_bild-width] == Raw width
[field_teaser_bild-height] == Raw height
Wenn ich die Bild URI als inline style möchte, geht das dann überhaupt ohne spezielles Template oder preprocess Funktion?
Danke
Ich kann leider grad nicht im
am 17.01.2013 - 11:31 Uhr
Ich kann leider grad nicht im Detail schauen, da unser Server gerade in der Wartung ist, aber wenn du doch ein Bild(Feld) in einem View hinzufügst, dann kannst du doch in den Einstellungen für das Feld den Formatierer im Kopfbereich wählen, und dort gibt es doch auch die Option "Bild-URL". Resultat sollte sein, dass statt des Bildes die entsprechende URL ausgegeben wird. Ich nutze auf einer unserer Seiten den Camera-Slider, und dort werden die Bilder via "data-src" übergeben, und dazu brauchte ich eben auch die reine URL. Das ging eigentlich problemlos.
Oder verstehe ich irgend etwas falsch? :|
Im View unter erweitert eine
am 17.01.2013 - 11:38 Uhr
Im View unter erweitert eine Beziehung hinzufügen Dateiverwendung:Datei. Dann ein Feld hinzufügen, dabei Filter auf Datei setzen, Datei: Pfad auswählen und von der Anzeige ausschließen. Dann die Ausgabe der Felder umsortieren (auf den kleinen Pfeil neben hinzufügen klicken und dann mit Drag und Drop sortieren), damit der Pfad beim Überschreiben der Ausgabe zur Verfügung steht. Dann kannst Du diesen Pfad als Token bei der URL benutzen.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
In Drupal6 war das
am 17.01.2013 - 11:46 Uhr
In Drupal6 war das einfacher.
Nachdem Du aber ausdrücklich angibst, dass Du keine Image-Styles benötigst, könntest Du aber auch mit einem einfachen File-Field arbeiten. Dann müsste es auch passen...
Don't code today what you can't debug tomorrow
Ariya Hidayat
nah dran
am 17.01.2013 - 12:42 Uhr
Hi Werner,
danke für die ausführliche Anleitung.
Habe jetzt alles so gemacht. Die Reihenfolge der Views ist jetzt:
Inhalt:Teaser-Headline (von der Anzeige ausgeschlossen, da ich dies über den Token im Replacement Pattern beim Bild einbinde)
(Datei) Datei: Pfad (von der Anzeige ausgeschlossen)
Inhalt: Teaser-Bild
Inhalt: Teaser-Kurztext
Wenn ich jetzt folgendes im Replacement Pattern beim Teaser-Bild eintrage, bekomme ich kein Bild. Die Teaser Headline wird dargestellt.
<a href="">
<div style="background: url([uri]) no-repeat;">
<h2>[field_teaser_headline]</h2>
</div>
</a>
Wenn ich nur die [uri] ausgebe, dann kommt public://mein_bild_xyz.jpg UPDATE: Das mit dem Public hab ich jetzt durch den kompletten File Download Path ersetzt. Passt aber immnoch kein background:url.....Pfad...
UPDATE: Habe gerade gelesen, dass in den Rewrite Results z.B. "styles" aus Sicherheitsgründen entfernt wird. Wie kann man das auf sichere Weise umgehen?
wenn das alles funktioniert, benötige ich noch einen Tipp für das a href... link zum node. Mach ich dass auch über die Beziehungen?
Vielen Dank
flo
Jetzt funktioniert es, fast
am 17.01.2013 - 16:22 Uhr
mit einem Template:
<?php
$title= $fields['field_teaser_headline']->content;
$img= $fields['uri']->content;
$kurztext= $fields['field_teaser_kurztext']->content;
?>
<div id="teaserlist_wrapper">
<ul id="teaserlist">
<li class="teaser">
<a href="">
<div style="background: url(<?php print $img; ?>) no-repeat;">
<h2><?php print $title; ?></h2>
</div>
</a>
<p><?php print $kurztext; ?> <a href="">mehr...</a>
</p>
</li>
</ul>
</div>
Musste dafür aber wieder das Dateifeld in die Anzeige "einschließen".
Jetzt fehlt mir noch der Link vom View Eintrag zum ensprechenden Node.
Benötige ich da auch wieder ein Feld oder kann ich da anders drauf zugreifen, also auf die url zum Node
$link_zum_node= $fields['???']->content;
danke an alle!
Dann solltest Du das Feld
am 17.01.2013 - 16:46 Uhr
Dann solltest Du das Feld Node-ID noch mit ausgeben. Dann ist der Link zum Node immer node/xxx (xxx=Node-ID).
Bitte beachte, daß es einen Unterschied macht, ob Du die Felder direkt über den View oder über ein spezielles Template ausgibst.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
'Inhalt:Pfad' ([path]) gibt
am 17.01.2013 - 16:46 Uhr
'Inhalt:Pfad' ([path]) gibt es doch...
Don't code today what you can't debug tomorrow
Ariya Hidayat
jetzt gehts
am 22.01.2013 - 14:01 Uhr
Hallo zusammen,
danke für eure Hilfe. Hab es jetzt über
$pfad = $fields['path']->content;
gemacht und das Feld dazu angelegt.
Vielen vielen Dank!
flo
[Gelöst] Felder werden mehrfach im View ausgegeben
am 22.01.2013 - 15:34 Uhr
Hallo nochmal,
wenn ich jetzt in einem Content mehrere Bilder anlege, wir pro Bild ein Teaser erstellt. Aber es soll ja nur ein spezielle Bild für den Teaser verwendet werden und dieser auch nur einmalig dargestellt werden.
Das liegt vermutlich an "Beziehungen" File Usage "Datei", da er in einem Inhalt z.B. 3 Dateien findet.
Kann ich irgendwie in Views einstellen, dass in File Usage "Datei" nur z.B. das eine Bild vom Typ "field_teaser_image" berücksichtigt wird?
Danke schonmal
Flo
UPDATE:
Musste unter den Beziehungen noch folgendes einstellen:
(Datei) Datei: Inhalt using Teaser-Bild