[gelöst] View nach Level des Vokabulars sortieren

am 23.01.2012 - 14:15 Uhr in
Hallo liebes Forum und vielen Dank für das ganze Engagement!
Ich habe auch gleich eine Frage, normalerweise ist es nicht so meine Art diese Form der Hilfe in Anspruch nehmen zu müssen und so habe ich schon recht gründlich gesaucht und keine Lösung für mein Problem gefunden.
Dabei handelt es sich um folgendes:
Ich möchte eine Gallerie erstellen die aus Views bestehen soll und gegliedert ist. Dabei möchte ich für jede Stufe der biologischen Taxa
Tiere
-Säugetiere
--Nager
---...
--Beuteltiere
---...
--...
-Gliederfüßer
--Insekten
--Spinnentiere
eine eigene Seite anlegen, in der der View für diese Stufe angezeigt wird. Ich verwende Bilder (Content-Type = 'Bilder') mit mehreren taxonomischen Werten eines Vokabulars ('Bilder_vokab')
Diese Views Zeigen auf der linken Seite ein Bild und auf der rechten Seite Text, der die Stufe beschreibt. Der Text enthält zwei Links. Der erste Link führt zur Gallerie der darunterliegeneden zweiten Stufe (Säugetiere), der zweite Link führt zur Gallerie der wiederum darunterliegenden dritten Stufe (Nager oder Beuteltiere).
Da es nun mehr als eine Gruppe der Stufe n+1.Ordnung gibt, möchte ich alle Elemente dieser Gruppe mit einer Slideshow im View der Tiere durchsliden lassen.
Soweit kein Problem, ich erstelle eine Node (Conten-Type = 'Beschreibung' != 'Bild'), die das Bild und den Text enthält, definiere ein zweites Vokabular ('Beschreibung_vokab' = 'Bilder_vokab') mit und selektiere zwei Häckchen in dieser (Tiere(1) und Säugetiere(2) oder Gliederfüßer(2)) und selektiere is all of: Stufe 1 (Tiere) und is one of: Stufe 2 (Säugetiere and Beuteltiere) im View.
In den Nodes (CT: 'Beschreibung') habe ich die URL zu einem Bild eingetragen, damit ist dieses Bild immer das selbe. Ich möchte allerdings, dass das Bild der Gallerie immer das neueste Bild der taxonomischen Stufe ist. Wenn ich also ein neues Bild zu den Tieren -> Säugetieren hinzufüge, möchte ich, dass dieses Bild sowohl auf der Stufe der Tiere als neuestes Bild ausgewählt wird, als auch auf der Stufe der Säugetiere, allerdings nicht auf der Stufe der Gliederfüßer.
Vielen Dank fürs Lesen und vielleicht kann mir ja jemand weiterhelfen.
- Anmelden oder Registrieren um Kommentare zu schreiben
Was ich bisher ausprobiert
am 23.01.2012 - 14:15 Uhr
Was ich bisher ausprobiert habe:
1) View erstellen und neuestes Bild und Text zu diesem Bild zusammenfügen, diesen View mit dem anderen View als Feld in ein anderen View einfügen und eine Slideshow anwenden -> Slideshow auf Views in Feldern tun nicht.
2) Die Texte einer Stufe in einem View als Slideshow zusammenfügen, die Bilder in einem View als Slideshow zusammenfügen und beides wieder als View in ein anderen View einfügen -> Hier stellt sich das Problem, dass ich im View der Bilder nicht richtig sortieren kann, da jedes Bild mehrere Taxonomie-Einträge hat und damit jedes Bild so oft dargestellt wird, wie es die Anzahl Taxonomie-Einträge hat und damit ein sortieren nach einem bestimmten Level des Vokabulars nicht möglich ist.
Eine Idee die ich hatte, allerdings nicht umsetzen kann (da ich blutiger Anfänger in PHP bin) ist die, dass man mit einem PHP-Schnipsel und der $_GET['q']-Variable rausfindet, welche Node für einen Vokabular-Eintrag die neueste ist und so direkt in die Node (CT: 'Beschreibung') einfügt.
Ein Beispiel kann man hier
am 23.01.2012 - 14:17 Uhr
Ein Beispiel kann man hier sehen: http://www.ehrmann-photography.de/?q=de/gallerie
Ok, also ich habe die Aufgabe
am 24.01.2012 - 00:46 Uhr
Ok, also ich habe die Aufgabe gelöst. Der View für das neueste Bild aller Taxonomie-Einträge eines bestimmten Vokabulars wird folgendermaßen durchgeführt:
1) View mit Slideshow als Format Fields als Show.
2) Relationship mit 'Taxonomy term: Representative node' mit Optionen 'Representative sort criteria' auf 'Content: Post date' und 'Representative sort order' auf descending. Hier wird bei den im folgenden definierten Feldern nur die neueste Node dargestellt
3) Als Feld wird ein 'Content: Bild' mit 'Relationship' auf 'Representative node' ausgewählt. Wird das Feld nach Erstellung der Relationship erstellt, kann man das Feld lediglich mit dieser Relationship auswählen, ansonsten muss man dies nachträglich umstellen
4) Der Filter wird ein bisschen komplizierter:
4.1) Es wird eine zweite Filter-Gruppe erstellt, der Operator in der ersten Gruppe ist 'And', der Operator in der zweiten Gruppe ist 'Or' und der Operator zwischen den Gruppen wird auf 'And' gesetzt.
4.2) Als Filter wähle ich 'Taxonomy vocabulary: Machine name = Bilder' And '(Representative node) Content: Published or admin' in der ersten Gruppe und 'Taxonomy term: Name (translated) contains Gliederfüßer' Or 'Taxonomy term: Name (translated) contains Säugetiere' in der zweiten Gruppe. Es werden alle Taxonomie-Einträge des Vokabulars 'Bilder' angezeigt und jeweils die neueste Node angezeigt, die mit dem jeweiligen Taxonomie-Eintrag versehen ist angezeigt. in der zweiten Gruppe wird nach den Einträgen mit den gewünschten Taxonomie-Einträgen gefilter
5) Pager auf 'Display all items' falls er da nicht schon stand.
Der SQL-Querry sieht folgendermaßen aus:
SELECT node_taxonomy_term_data.nid AS node_taxonomy_term_data_nid, 'node' AS field_data_field_bild_node_entity_type
FROM
{taxonomy_term_data} taxonomy_term_data
LEFT JOIN {node} node_taxonomy_term_data ON (SELECT nodeINNER.nid AS nidINNER
FROM
{node} nodeINNER
LEFT JOIN {taxonomy_index} taxonomy_indexINNER ON nodeINNER.nid = taxonomy_indexINNER.nid
LEFT JOIN {taxonomy_term_data} taxonomy_term_data_nodeINNER ON taxonomy_indexINNER.tid = taxonomy_term_data_nodeINNER.tid
WHERE (( (taxonomy_term_data_nodeINNER.tid = taxonomy_term_data.tid ) ))
ORDER BY nodeINNER.created DESC
LIMIT 1 OFFSET 0) = node_taxonomy_term_data.nid
LEFT JOIN {taxonomy_vocabulary} taxonomy_vocabulary ON taxonomy_term_data.vid = taxonomy_vocabulary.vid
WHERE (( (taxonomy_vocabulary.machine_name IN ('bilder')) AND (node_taxonomy_term_data.status = 1 OR (node_taxonomy_term_data.uid = 25 AND 25 <> 0 AND 1 = 1) OR 1 = 1) )AND( (taxonomy_term_data.name ILIKE '%Gliederfüßer%') OR (taxonomy_term_data.name ILIKE '%Säugetiere%') ))
Ich hoffe ich kann damit jemandem helfen. Mir hat es auf jeden Fall geholfen mich mit den Relationships auseinander zu setzen, das wird meine Views-Anwendungen sicher sehr bereichern. Meiner Meinung nach wird das Thema allerdings noch nicht genug in der Community thematisiert!