(gelöst) Inhaltstyp mit unterschiedlichem Inhalt & CSS je nach View
![](http://www.drupalcenter.de/files/noavatar_mini.gif)
am 11.12.2015 - 10:36 Uhr in
Hallo,
ich habe heute ein recht spezielles Problem.
Ich habe einen bestimmten Inhaltstyp den ich aus zwei unterschiedlichen Views ansteuern möchte.
Allerdings sollte der Inhalt (Felder) des Inhaltstyps und die CSS anders sein, wenn er von View A angesprochen wird, anstatt von View B.
Ist sowas möglich?
Falls ja, was muss ich dafür wie konfigurieren? Oder gibt es ein Modul das sowas steuern könnte?
Grund für dieses außergewöhnliche Vorgehen: Zugriff auf (fast) gleichen Inhalt ohne "Double Content" zu erzeugen von unterschiedlichen Quellen.
Vielen Dank schon mal im Voraus für eure Hilfe und Vorschläge.
Gruß,
pyretta
PS: Ich nutze Drupal 7.41.
PPS: Im Moment löse ich das mit einem jQuery Workaround relativ unelegant mit der Abfrage des Referrers. Weil das unelegant ist, wollte ich einfach wissen ob es eine bessere Lösung innerhalb Drupal gibt.
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo Pyretta,Du kannst die
am 11.12.2015 - 11:04 Uhr
Hallo Pyretta,
Du kannst die entsprechenden View Templates in Deinen Theme Ordner kopieren
und Sie mit den entprechenden Namen versehen.
ggf(Node Template):
node--view--[VIEW-NAME].tpl.php
Sie hier: https://api.drupal.org/api/views/theme!theme.inc/group/views_templates/7
MfG
Robert
Hallo Hyp1,vielen Dank für
am 11.12.2015 - 13:33 Uhr
Hallo Hyp1,
vielen Dank für deine Antwort.
Ich bin ja leider noch kein Drupal-Profi, deshalb verstehe ich evtl. deine Antwort falsch, und man kann das was ich wollte damit erreichen.
Ich könnte mir aber vorstellen, dass mein Post zu Missverständnissen geführt hat, weil ich mich etwas kurz gehalten habe.
Nur zur Sicherheit nochmal etwas ausführlicher:
Ich möchte nicht die Anzeige des Inhaltstyps innerhalb der jeweiligen View ändern - sondern folgendes:
2 Views: View A & View B. Beide zeigen eine Liste aller Beiträge eines Inhaltstyps an und zwar jeweils des gleichen Inhaltstyps.
Wenn ich nun auf den Titel eines bestimmten Beitrags klicke, gelange ich in die "vollständige Ansicht" dieses Beitrags.
Dort sind im Inhaltstyp spezielle Felder für die Anzeige definiert.
Und diese Einstellung möchte ich abhängig von der jeweiligen View ändern.
Klicke ich also auf den Titel des Inhaltstyps aus View A heraus - soll beispielsweise der Hintergrund des angezeigten Beitrags grün sein und die Felder "Feld XY" und "Feld AB" angezeigt werden.
Mache ich das selbe aus View B heraus - soll der Hintergrund des angezeigten Beitrags blau sein und die Felder "Feld Z" und "Feld C" angezeigt werden.
Geht sowas?
Hallo, ja das geht mit diesen
am 11.12.2015 - 14:55 Uhr
Hallo,
ja das geht mit diesen Templates.
Du hast dann 2 Templates, eins für View A und eins für View B.
f you want to theme for "Content" (what is really a node), copy the node.tpl.php to a file name that fits the mask "node--view--[VIEW-NAME].tpl.php. Refresh your cache. You're done!
Wird View A aufgerufen, dann wird das entprechende Template node--view--[VIEWNAME].tpl.php,
bei View B das das Template mit dem Namen von View B benutzt.
In diesen Templates kannst Du die Ausgabe der jeweiligen Nodes im View beeinflussen
und somit für jede View eine andere Ausgabe erzwingen.
Gruss
Robert
Oh ok, ich dachte immer dass
am 11.12.2015 - 16:26 Uhr
Oh ok, ich dachte immer dass ich die View verlasse sobald ich auf den Titel eines Inhaltstyps klicke und dann den Inhaltstyp selbst anzeige, da die URL wechselt.
Also beispiel URL View: www.beispiel.de/view
Beispiel URL Inhaltstyp Vollansicht: www.beispiel.de/inhaltstyp_beitragsname
Naja, schon wieder was gelernt :-D. Danke.
Werde deinen Lösungsvorschlag gleich ausprobieren und dann das Ergebnis veröffentlichen.
Entschuldige, dass ich so
am 14.12.2015 - 11:37 Uhr
Entschuldige, dass ich so spät antworte.
Ich habe jetzt deinen Lösungsvorschlag wie beschrieben ausprobiert, allerdings hat es leider nicht funktioniert.
Als Name der View habe ich den Wert von "/admin/structure/views/view/viewname/export" > "$view->name" genommen.
Als Test habe ich einfach eine weitere Klasse dem HTML-Element "article" hinzugefügt.
Nach Erstellung der "node--view--[VIEW-NAME].tpl.php" habe ich den vollständigen Cache geleert.
Dann bin ich in die betreffende View (Browser aktualisiert) und habe einen Beitrag aufgerufen (Klick auf Titel).
Leider habe ich nicht die hinzugefügte Klasse gefunden.
Habe ich etwas vergessen oder falsch gemacht?
Hallo, Du kannst im Template
am 14.12.2015 - 12:26 Uhr
Hallo,
Du kannst im Template entweder ein eigenes div mit Deinen Klassen einfügen.
Oder schau mal im node.tpl.php
<div id="<?php print $node_id; ?>" class="<?php print $classes; ?> <deine Klasse>">
....
</div>
MfG
Robert
Vielen Dank, aber das weiß
am 14.12.2015 - 12:32 Uhr
Vielen Dank, aber das weiß ich sogar schon :-D
Wie gesagt habe ich bereits eine eigene Klasse hinzugefügt - nur wird diese nicht angezeigt, was mir sagt, dass dein Lösungsvorschlag entweder bei mir nicht funktioniert oder ich bei der Umsetzung einen Fehler gemacht habe.
Hallo, bist Du sicher, dass
am 14.12.2015 - 14:13 Uhr
Hallo,
bist Du sicher, dass die Templates aufgerufen werden?
Füge mal:
<h1><?php print __FILE__; ?></h1>
einfach im Template ein und leere den Cache.
In den View Einstellungen hat es eine einstellung Templates,
dort kannst Du nachsehen, wie Du die Templates benennen musst.
Grüsse
Robert
Hallo, Also so wie ich das
am 16.12.2015 - 09:02 Uhr
Hallo,
Also so wie ich das verstehe, hat das Anzeigeproblem eigentlich nicht direkt mit Views zu tun.
Es geht drum, die Standardansicht des einzelnen Nodes mal so, mal anders zu haben, richtig?
D.h. wenn Du in der Lage bist, den Node auf zwei unterschiedliche Weisen anzuzeigen, kannst Du das letztlich auch von irgendeiner View her tun.
Schau Dir mal dieses Modul an. Damit kannst Du einzelne Viewmodes der Node mit separatem Pfad versehen.
Damit kannst du in den Views den Link zum Node überschreiben und mal den einen oder den anderen Pfad nutzen (node/%/teaser). Beim % setzt du in der View einfach das Token für
die Node-Id, das Du bekommst, wenn Du die Nid am Anfang der Feldliste unsichtbar einfügst.
Ich habs nicht ausprobiert, sieht aber machbar aus, und Du ersparst Dir die Arbeit mit Templates. Hope it helps.
@Hyp1: Also die Templates
am 16.12.2015 - 10:28 Uhr
@Hyp1: Also die Templates werden im allgemeinen geladen. Nutze das bereits in anderen Bereichen. Nur hier wird dieses Template nicht aufgerufen, vermutlich verlasse ich eben doch die View beim Aufruf des Inhaltstyps/Nodes und dadurch kann es das View-Template auch nicht verwenden. Bin da auf diesem Gebiet wirklich Neuling.
@leda.ch: Na das klingt doch mal ziemlich perfekt nach dem was ich gesucht habe. Vielen Dank, werde ich gleich mal ausprobieren.
Hi, klar, wenn Du auf einen
am 16.12.2015 - 11:05 Uhr
Hi,
klar, wenn Du auf einen Node klickst verlässt Du natürlich das View Template.
Wenn du einen bestimmten Node Themen möchtest schau mal in node.tpl.php
<div id="node-<?php print $node->nid; ?>
Gruss
Robert
Hallo leda.ch, ich habe jetzt
am 18.12.2015 - 12:05 Uhr
Hallo leda.ch,
ich habe jetzt das Modul "View Mode Page" ausprobiert.
Aber leider erhalte ich immer nur eine 404 Error Seite.
Habe die URL so aufgebaut: [node path/node alias]/[view mode url]
bzw.: http://www.beispieldomain.de/de/node_alias_name/view_mode_url_name
Ist das soweit korrekt?
Melde mich natürlich als Admin auf der Seite an, habe aber trotzdem die Berechtigungen gecheckt und alles zum "View Mode Page Modul" für Administratoren aktiviert. Habe auch den Durpal Cache gelöscht. Brachte aber beides keinen Erfolg.
Ich habe zusätzlich auch das Modul "Display Suite" installiert und davon folgendes "Untermodul" aktiviert: Display Suite UI.
Könnte es daran liegen?
Was könnte es noch sein?
Vielen Dank im Voraus für die Hilfe.
Hallo, Wie gesagt, das Modul
am 18.12.2015 - 13:21 Uhr
Hallo,
Wie gesagt, das Modul habe ich nicht ausprobiert.
Hast Du auf der Modulseite, wo Du das Modul runtergeladen hast, die Dokumentation dazu studiert?
Mir scheint, da gibts einige Beispiele.
Hyp1 schriebggf(Node
am 19.12.2015 - 14:01 Uhr
ggf(Node Template):
node--view--[VIEW-NAME].tpl.php
Sie hier: https://api.drupal.org/api/views/theme!theme.inc/group/views_templates/7
das wäre neu für mich, daß man das node template mit einem view steuern kann. steht dort auch so nicht in der api!
du kannst aber im node template die aufrufende url abfragen und dann entsprechend dort zwei verschiedene ausgaben machen
Also mit View Mode Page
am 19.12.2015 - 15:45 Uhr
Also mit View Mode Page kannst Du unterschiedliche View Modes für einen Inhaltstyp über jeweils eine eigene URL ansteuern, also z.B. node/x/anzeigeA für Ansicht A und node/x/anzeigeB für Ansicht B (x steht für die Node-ID). In den Einstellungen des Inhaltstyps musst Du bei View Mode Pages den URL Pattern entsprechend setzen, hier z. B. node/%/anzeigeA in Ansicht A und node/%/anzeigeB in Ansicht B. Dann kannst Du in deinem View den entsprechenden Link zum Inhaltstyp verwenden und so die von Dir gewünschte unterschiedliche Augabe erhalten.
Display Suite verträgt sich mit View Mode Page.
Und bezüglich des von Hyp1 genannten Templates gebe ich CAW recht, dieses Template gibt es nicht. Vielleicht ließe sich ein entsprechendes Template mit Template Suggestions generieren, aber dann auch nur über den Weg der URL-Erkennung des Referers, denn der aufgerufene Node hat ja sonst keine Beziehung zum dem View aus dem er aufgerufen wird.
Ein bisschen verwirrend in der Begrifflichkeit in dem Zusammenhang finde ich Views und die View Modes. Obwohl die Begrifflichkeit einen Zusammenhang suggeriert sind das unabhängige Bereiche.
Uups,sorryZitat:node--vie
am 19.12.2015 - 16:17 Uhr
Uups,
sorry
node--view--[VIEW-NAME].tpl.php
war in Drupal 6.
In 7 gibt es dieses Template nicht mehr.
Grüsse
Robert
Es gibt aber noch einen viel
am 19.12.2015 - 16:58 Uhr
Es gibt aber noch einen viel einfacheren Ansatz. Statt den Node als Node-Ansicht auszugeben, gibst Du die Felder des Nodes aus. Die kannst Du dann ein einer eigenen HTML-Struktur direkt im View ausgeben. Dazu alle Felder außer dem letzten von der Anzeige ausschließen und beim letzten Feld die Ausgabe neu definieren. Darin dann die Felder in einer eigenen Strukrur (incl. eigener Klassen) entsprechend Deinen Wünschen ausgeben. Jedem so aufgebauten View kannst Du damit einfach ein anderes Aussehen verpassen.
Mir fällt gerade auf, dass
am 19.12.2015 - 17:16 Uhr
Mir fällt gerade auf, dass View Mode Pages ggf. auch Double Content im Sinne von SEO liefert, weil ggf. gleicher Inhalt unter zwei URLs verfügbar ist. Also wenn das nicht akzeptabel ist, dann muss man wohl den Referer auslesen und dann z. B. aus dem Referer den View-Teil extrahieren und darauf basierend z. B. dem Body eine zusätzliche Klasse verpassen.
@wla: Der TO will ja den den jeweiligen Node aus dem View in der Einzelausgabe ansteueren und dann in der Node-Ausgabe eine unterschiedliche Ausgabe in Abhängigkeit vom aufrufenden View erreichen. Da hilft jetzt ein Rewrite im View nicht weiter bzw. könnte man vielleicht über Kontextfilter den View so gestalten, dass der View jeweils nur einen einzigen Node ausgibt. Aber das wäre doch Views arg verborgen.
Hallo zusammen,nach
am 20.12.2015 - 11:52 Uhr
Hallo zusammen,
nach nochmaligem Überlegen bin ich zum Schluss gekommen,
dass diese Anforderung schlecht umsetzbar ist.
Man kann einfach nicht garantieren, dass der Node nur durch eine View aufgerufen wird.
Er könnte zwar im jeweiligen View/Viewtemplate Parameter mitgeben und diese im node.tpl.php
auslesen, aber eine Node kann auch direkt aufgerufen werden: http://site.com/node/x
Soll heissen, der Referrer auf einen Node muss nicht zwingend eine View sein, er
kann eben auch von google kommen.
Der Node sollte dann mindestes 3 verschiedene Ausgaben haben:
View A
View B
keine View
Grüsse
Robert
Hallo alle zusammen und
am 11.01.2016 - 17:11 Uhr
Hallo alle zusammen und nachträglich noch ein frohes neues Jahr. Ich hoffe ihr seid alle gut rein gekommen.
@Stefan.Korn: Vielen Dank für deine sehr guten Hinweise. Ich habe es nun weiter versucht den View Mode per URL anzusprechen, aber leider immernoch ohne Erfolg. Ich erhalte weiterhin nur eine 404 Seite. Habe mir auch die Doku Seite des Moduls mehrfach durchgelesen und einige Patternzusammenstellungen ausprobiert - sowohl in der Ansicht des Inhaltstyps als auch in den Einstellungen von pathauto.
Vielleicht kannst du mir da ja weiterhelfen?
Die Nodes dieses speziellen Inhaltstyps werden aktuell wie folgt angesprochen (ohne speziellen View Mode):
www.beispieldomain.de/[node:title]
also habe ich folgendes als Pattern in der Ansicht "my-view-mode" des Inhaltstyps ausprobiert:
/%/my-view-mode
Demnach müsste der View Mode wie folgt erreichbar sein:
www.beispieldomain.de/[node:title]/my-view-mode
Ist er aber nicht...
Habe es auch mit dem Token "[node:title]" anstatt der Wildcard versucht.
Zuvor (Kommentar vom 18.12.2015) habe ich einfach versucht vorne leer zu lassen - also den Pattern direkt mit "/my-view-mode" anzufangen - was ja auch nicht funktioniert hatte.
möp... sorry, habe gerade
am 11.01.2016 - 17:26 Uhr
möp...
sorry, habe gerade selbst die Lösung gefunden.
Man darf scheinbar nicht wie gewohnt die Seite mit dem Token [node:title] ansprechen, sondern so als hätte man keine Suchmaschinenfreundliche URL, also mit "node/NID".
Also lautet meine URL:
www.beispieldomain.de/node/1234/my-view-mode
Und der URL-Pattern:
node/%/my-view-mode
die Wildcard steht also immer für die NID, nicht wie in der Doku für [node:title] oder so.