Im View feste Stelle für andere Inhalte vorhalten
Eingetragen von kale (19)
am 18.05.2015 - 11:08 Uhr in
am 18.05.2015 - 11:08 Uhr in
Hallo
ich habe eine News-View gebaut und will nun immer an Position X Werbung eingeblendet haben, die im selben Layout wie die Nachrricht erscheinen soll. Wie kann ich die Position X dafür belegen ohne das bei einer neuen News die Werbung mit nach hinten verschoben wird, sondern immer an selber Position bleibt?
Jemand eine Idee?
- Anmelden oder Registrieren um Kommentare zu schreiben
Du überschreibst am besten
am 18.05.2015 - 14:43 Uhr
Du überschreibst am besten die entsprechende views Template Datei mit einer fixen Position für den Ad Code. In diesem Beispiel wird der Custom String 'Mein ADCODE' an Position 3 innerhalb der View ausgegeben:
<?php if (!empty($title)): ?>
<h3><?php print $title; ?></h3>
<?php endif; ?>
<?php foreach ($rows as $id => $row) : ?>
<div<?php if ($classes_array[$id]) { print ' class="' . $classes_array[$id] .'"'; } ?>>
<?php print $row; ?>
</div>
<?php if ($id == 1) :?>
<div class="adcode">Mein ADCODE</div>
<?php endif; ?>
<?php endforeach; ?>
Für Mein ADCODE kannst du einfach den Google Adsense Code Block oder was auch immer einsetzen. Willst du die Position ändern, passt du nur die Überprüfung des Wertes von $id an. Soll der Block an zweiter Stelle stehen, dann $id == 0, soll er an fünfter Stelle stehen, dann $id == 3 u.s.w.
Werbung
am 19.05.2015 - 09:39 Uhr
Ganz so einfach nur über ein Template ist das leider nicht zu lösen.
Wenn man die Werbung auf jeder Seite (vorausgesetzt, man hat einen Pager) haben möchte, muss man tiefer in den Rendering-Prozess von Views eingreifen. Wir hatten das mal für eine größere Seite umgesetzt und das dort dann über eine eigene SearchApiViewsQuery, ein Row-Plugin, ein Style-Plugin und diverse alter-Hooks (z.B.
hook_views_post_build()
undhook_views_pre_render()
) gelöst.Über die Views-Plugins kann man die Werbung dann an einer beliebigen Position innerhalb der Ergebnisse ausgeben lassen (feste Position bzw. alle x Einträge).
Notwendig wurde der ganze Spass aus folgendem Grund:
* man möchte 10 Einträge pro Seite anzeigen und z.B. an der 5. Position in der Liste die Werbung
* bei weniger als 10 Ergebnissen hat man kein Problem
* bei 10 oder mehr Ergebnissen werden plötzlich 11 Elemente auf der Seite angezeigt, man muss also den Pager anpassen ...
* bei 20 oder mehr Ergebnissen hat man dann schon 2 zusätzliche Elemente, die Berechnung des Pagers durch Views passt also noch weniger :), usw. ...
Wenn Du damit leben kannst, dass durch die Werbung immer ein Eintrag pro Seite "zu viel" angezeigt wird, genügt eventuell das Template. Ansonsten wird es komplizierter.
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
stBorchert schrieb * bei 10
am 19.05.2015 - 14:10 Uhr
* bei 10 oder mehr Ergebnissen werden plötzlich 11 Elemente auf der Seite angezeigt, man muss also den Pager anpassen ...
* bei 20 oder mehr Ergebnissen hat man dann schon 2 zusätzliche Elemente, die Berechnung des Pagers durch Views passt also noch weniger :), usw. ...
Moin Stefan,
Ich habe dazu einen entsprechenden Test gemacht und kann diese Verschiebung nicht nachvollziehen. Durch die kleine Modifikation der views-view-unformatted--NAMEMEINERVIEW.tpl.php füge ich ja keine zusätzliche Zeile ein, sondern hänge den div- container innerhalb der Schleife lediglich an die Row mit dem entsprechenden Wert von $id an. Das funktioniert auf einer aktuellen D7 Testinstallation einwandfrei, egal wieviele Elemente ich pro Seite ausgeben lasse. Lasse ich mir die Werte von $id ausgeben, erhalte ich z.Bsp. bei 10 Rows / Seite für jede Pager- Site korrekterweise die Werte 0 - 9. Bei 5 pro Seite 0 - 4. Der Div Container mit dem Custom Code seht auf jeder Seite exakt an der richtigen Stelle.
Vielleicht waren bei eurem Projekt andere Gründe ursächlich, bei mir klappt das wie in meinem ersten Post beschrieben einwandfrei. Die View gibt mir insgesamt 74 Elemente aus, die ich nach Belieben aufteilen kann und der Custom Code steht immer an der gewünschten Position.
Gruss Guido
glycid schrieb Ich habe dazu
am 20.05.2015 - 05:46 Uhr
Ich habe dazu einen entsprechenden Test gemacht und kann diese Verschiebung nicht nachvollziehen. ... Der Div Container mit dem Custom Code seht auf jeder Seite exakt an der richtigen Stelle.
Ja, das ist korrekt. Allerdings überschreibst Du damit ein existierendes Ergebnis Deines Views. Und zwar genau das mit
$id = 1
;)Tipp: Beachte die Verhaltensregeln des DrupalCenter.
stBorchert schriebAllerdings
am 20.05.2015 - 09:18 Uhr
Allerdings überschreibst Du damit ein existierendes Ergebnis Deines Views. Und zwar genau das mit
$id = 1
;)Das wäre natürlich kompletter Unsinn und würde dem so sein, hätte ich dies der Threaderstellerin sicherlich nicht vorgeschlagen. Ich überschreibe jedoch kein View- Item, sondern hänge den div- Container an ein bestimmtes Element an. Hier das Ergebnis für
<?php if ($id == 0) :?>
:Die erzeugte HTML Struktur:
Die ursprüngliche Struktur der View ändert sich durch die Änderung in der .tpl Datei nicht ;) Ohne die Modifikation habe ich exakt dieselbe Struktur vorliegen.
glycid schrieb ...Ich
am 20.05.2015 - 10:13 Uhr
...Ich überschreibe jedoch kein View- Item, sondern hänge den div- Container an ein bestimmtes Element an. ...
Ah stimmt, sorry. Da hatte ich mich verguckt und gedacht, Du gibst die Werbung anstelle des Ergebnisses mit der ID 1 aus. So bekommst Du jedoch einen View mit 11 Ergebnissen pro Seite (10 "normale Ergebnisse" + 1 Werbung).
In einer einfachen Liste funktioniert das noch, bei einem mehr oder weniger festem Grid führt das jedoch zu seltsamen Effekten.
Hier mal ein Beispiel, wie das auf der Seite dann aussieht: http://share.undpaul.de/bilder/sb/2015-05-20_11-11-38.png
Die Werbung wird auf jeder Seite des Views an der 5. Position ausgespielt.
Wenn einem egal ist, dass man pro Seite für jede Werbung ein zusätzliches Element hat, kann man das natürlich auch einfach über das Template lösen.
Tipp: Beachte die Verhaltensregeln des DrupalCenter.