Views Pfad Alias

am 06.11.2012 - 21:39 Uhr in
Ich habe einen View den ich mit Contextual Filter über Argumente anzeigen bzw filtern lasse. Der View hat entsprechend einen Pfad wie z.B. /obst
wenn ich ihm /obst/banane gebe, zeigt er mir alle Bananen mit /obst/orangen alle Orangen usw.
Nun will ich aber gern die Pfadangabe ohne das "obst" dazwischen haben. Ein weg dafür ist, mit Pathauto manuel einen Alias einzutragen, das funktioniert auch.
Aber gibt es dafür irgendeinen automatischen weg? Denn es werden sehr viele mögliche Argumente sein, die ich nicht per Hand alle als Alias anlegen kann und möchte.
Gibts dafür einen Workaround in Drupal den ich noch nicht kenne (aber gern kennenlernen würde ;-) )?
- Anmelden oder Registrieren um Kommentare zu schreiben
Das ist nicht möglich. Das
am 06.11.2012 - 22:54 Uhr
Das ist nicht möglich. Das erste Argument kann bei Drupal keine Wildcard sein. Es muß immer ein festgelegter Teil davor sein.
Beste Grüße
Werner
Was ich mich gefragt habe,
am 07.11.2012 - 00:28 Uhr
Was ich mich gefragt habe, als ich die Frage gelesen habe:
Wenn Obst offenbar keine Bedeutung hat, warum soll es dann so eine Kategorie geben.
Und wenn du unbedingt auch nach Obst filtern willst, dann gib doch den Einträgen zwei Kategorien mit, also
Banane/Obst
Orange/Obst
Grünkohl/Gemüse
Gruß
Berthold Lausch
Korrekt erstmal, das "obst"
am 07.11.2012 - 09:39 Uhr
Korrekt erstmal, das "obst" als Pfad brauche ich um überhaupt den View anzusprechen, soweit klar. Aber wenn ich händisch für den pfad obst/banane ein Alias "banane" eintrage, erreiche ich mein Ziel und finde den View mit der gewünschten Filterung unter www.domain.de/banane und genau das ist mein Ziel. Aber ich will das nicht für jedes Argument händisch machen und ich habe aus Kundensicht die Vorgabe es so zu machen, Sinn und Zweck sei dahingestellt, aber es ist wichtig.
Irgendwelche Ideen? Ich denke es wird darauf hinauslaufen irgendwie automatisiert Aliase zu erstellen, oder? Also z.B. ein kleines Script dass die möglichen Argumente aus der Datenbank ermittelt und dann entsprechende Aliase in der Alias-Tabelle speichert? Hat jemand eine bessere Idee?
Ich kann nicht erkennen, dass
am 07.11.2012 - 12:50 Uhr
Ich kann nicht erkennen, dass du überhaupt auf meinen Vorschlag eingegangen bist.
Mir ist z.B. überhaupt nicht klar, warum du die Kategrie Obst in deinem Falle überhaupt als "Oberkategorie" brauchst, wenn du sie bei der Filterung dann hinterher sowieso weglassen willst.
Das mit den Aliasen finde ich keine gute Lösung, ich denke mal, das bist du auf dem ganz falschen Weg.
Es ist nie gut, etwas an der Datenbank hardcore mäßig zu ändern. Die Datenbank wird dadurch eventuell instabil.Ich würde das auf jeden Fall nicht risikieren.
Dass deine Filterung mit den eingegebenen Aliasen dann funktioniert, heißt ja nicht, dass das die beste und einzige Lösung ist, um einen bestimmten Teil der Nodes anzeigen zu lassen.
Hm, also eventuell verstehen
am 07.11.2012 - 13:16 Uhr
Hm, also eventuell verstehen wir uns da falsch, vielleicht stehe ich auch auf dem Schlauch oder habe mich falsch ausgedrückt:
'obst' ist ja nur der Pfad von dem View. Der kann z.B. auch 'suche', 'filter' usw heissen. Dannach kommt das Argument, dass ich übergeben will mit dem ich dann irgendwie den View filtere (z.B. nach Taxonomie-Begriff, Benutzername sonstiges). Das mit dem Obst/Banane ist ja nur ein Beispiel.
Ähnlich wäre z.B.
Ich erstelle einen View der alle Inhalte nach Jahreszahl filtert. Der Pfad vom View ist 'archiv', die Jahreszahl ist mein erstes Argument, der View gibt dann alle Inhalte aus dem Jahr frei.
Also: www.meinedomain.de/archiv/2011
Wunsch ist aber das ganze so aufzurufen: www.meinedomain.de/2011
Wegen der Datenbank: Es gibt ja sicher eine Funktion die einen Alias generiert, darauf basierend könnte man ja einen Cronjob schreiben der Aliase generiert. Da hätte ich glaube ich keine Bedenken, oder?
Dass deine Filterung mit den eingegebenen Aliasen dann funktioniert, heißt ja nicht, dass das die beste und einzige Lösung ist, um einen bestimmten Teil der Nodes anzeigen zu lassen.
Deshalb frage ich ja. :-)
Achso, jetzt verstehe ich,
am 07.11.2012 - 14:22 Uhr
Achso, jetzt verstehe ich, obst ist überhaupt kein Filter für deine Kategorien.
(Manchmal bin ich etwas begriffsstutzig).
Für Drupal 6 gibt es da, wenn ich das richtig gesehen habe, wohl eine Lösung.
Das Projekt: Views Term Path Override macht das wohl so.
Vielleicht kannst du, wenn du dir dieses Modul genauern anschaust, auch eine Lösung für Drupal 7 ersinnen.
Hm... nach einigem Rumtüfteln
am 15.11.2012 - 19:21 Uhr
Danke für den Tipp noch!
Hm... nach einigem Rumtüfteln würde ich gern nochmal das Pferd andersherum satteln:
nämlich indem ich bei dem jeweiligen Node mit passendem Alias also z.B. "Banane" einen View einblende als Block und ihm entsprechend den Alias als Argument übergebe.
Das funktioniert auch schonmal recht gut. Jetzt würde ich gern dieser Seite (also dem normalen node) noch ein weiteres Argument übergeben dass ich im View nutzen will, und dass auch in der URL erscheint, also z.B. /banane/gelb
Wenn ich das so mache, gibt es natürlich erstmal einen 404 weil es diesen Alias nicht gibt.
Da fehlt mir jetzt das entscheidende Knowhow: An welcher Stelle kann ich Drupal klarmachen, dass der erste Teil im Pfad aufgerufen wird, der zweite nur ein Argument ist. Ein Hook? Preproccess?
Konkret geht es hier auch um Taxonomien. Also www.baseurl.com/nodealias/term
Unter dem Node kommt dann ein Block der Inhalte passend zum Term anzeigt. Jemand der mir einen Schubser vom Schlauch herunter geben kann?
Und als wäre das nicht genug, kommt auch schon die nächste Idee: Auf eben dieser Seite will ich auch nochmal einen Filterblock von einem anderen View einblenden (exposed Filter als Block). Diesem View würde ich dann neben der Eingabe in dem Exposed Filter Feld gern noch die "Banane" mitgeben, als Contextual Filter oder eine Art versteckter Exposed Filter. Eine Idee das "dirty" zu machen wäre: Exposed Filter Feld dafür anlegen, per CSS ausblenden und mit Javascript befüllen... das ist aber natürlich kein sehr gelungener Ansatz.. :-/ Kann man bespielsweise die Seite von der aus der Block den View aufruft irgendwie bei den Contextual Filtern verarbeiten? Referer oder so? Hoffe ich konnte das verständlich ausdrücken...