Wie funktionieren Kontextfilter von Ansichten?

9

Ich versuche wieder, mich mit Kontextfiltern zu beschäftigen! Ich habe es vor einiger Zeit benutzt, aber ich war gerade wieder total ratlos. Folgendes versuche ich zu tun:

  1. Generieren Sie eine geklonte Inhaltsknotenseite mit Taxonomiebegriffen, die in diese geklonte Seite eingefügt werden.

Beispiel: BEISPIEL.com/white-shoes/blue

Wenn ein Benutzer die Seite / white-shoes erreicht, wird die ursprüngliche Knotenseite angezeigt, die auf die weiße Farbe ausgerichtet ist. Wenn der Benutzer nun auf / white-shoes / blue landet, wird dieselbe Knotenseite angezeigt, aber diesmal wird der gesamte Körperinhalt neu geschrieben, wobei die weiße Farbe durch die blaue Farbe ersetzt wird.

In Ansichten müsste ich eine Seitenanzeige mit dem Pfad% /% erstellen

Jetzt würde ich einen Kontextfilter erstellen, um die NID abzurufen. Ich füge Content: nid als Kontextfilter hinzu. Ich wähle PROVIDE A DEFAULT VALUE und gebe diesen PHP-Code ein:

$ x = drupal_lookup_path ('source', arg (0));

$ y = explodieren ('/', $ x);

return $ y 1 ;

Dieser PHP-Code konvertiert im Grunde den / white-shoes-Teil der URL in eine NID. Aber es funktioniert nicht. Ich habe den Code über drush ev über das Terminal getestet und erhalte tatsächlich ein zurückgegebenes Ergebnis, also weiß ich, dass es funktioniert.

Ich mache dasselbe für den Taxonomiebegriffsnamen und füge auch dafür einen Kontextfilter hinzu. Dieses Mal wähle ich PROVIDE A DEFAULT VALUE und wähle RAW VALUE FROM URL und wähle das 2. Argument.

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, wenn ich einen VORSCHAUWERT für den Kontextfilter eingebe: AAA / BBB / CCC. Mein Standardwert wird ignoriert. Es soll das zweite Argument aufgreifen, aber es wird nur das erste. Schauen Sie sich die SQL-Anweisung WHERE an und Sie werden sehen, dass sie AAA erhält, wenn es BBB sein sollte.

Geben Sie hier die Bildbeschreibung ein

Die Frage ist also, was mache ich falsch oder gibt es eine bessere Lösung für das, was ich erreichen möchte?

Patoshi パ ト シ
quelle
Das klingt dumm, aber könnten Sie etwas mehr Details liefern? Ich habe ein bisschen Zeit zu verstehen, was Sie versuchen, mehr darüber, wie Sie es versuchen. Verwenden Sie anstelle des Raw-Werts oder der Option "Bereitstellen" die Inhalts-ID der URL. Das wird die NID liefern.
kyletaylored
hi kyle, es gibt keine Inhalts-ID seit deiner Landung auf der URL: / white-shoes / blue .... die / blue-URL existiert nicht, da sie von Ansichten gerendert wird. Es gibt also keine Inhalts-ID, die abgerufen werden muss. Sie muss das erste Argument der URL analysieren und diese URL dann in einen NID-Pfad konvertieren.
Patoshi

Antworten:

5

Der Kontextfilter wird verwendet, um die Ausgabe der Ansicht nach URL-Argumenten zu filtern. Außerdem können Sie die Argumente manuell in diesem Format übergeben:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

Dabei ist "$ name" der Name Ihrer Ansicht (z. B. 'example_view') und '$ display_id' der Anzeigetyp Ihrer Ansicht (z. B. 'default') und "$ arg1, $ arg2, $ arg3" Argumente genau wie in URL.

URL-Argumente haben die folgende Struktur:

http://example.com/arg_1/arg_2/arg_3 (arg_2 hat die Pfadkomponente 2 (in der Ansichtseinstellungsseite)).

Wenn der Filterwert nicht verfügbar ist:

es bedeutet, dass drupal keinen Filter finden kann.

Standardwert angeben:

Wenn der Filterwert nicht verfügbar ist, können Sie mit dieser Option einen Filter für die Ausgabe von Ansichten erstellen. Dieser Filter kann PHP-Code sein (wenn das PHP-Filtermodul aktiviert ist) oder seinen Wert aus den URL-Argumenten abrufen -> (Rohwert) von url). Im Textfeld Ausnahme können Sie den Wert betrügen und alle Ergebnisse anzeigen.

Wenn der Filterwert verfügbar ist

In diesem Fall führen Sie eine Validierung nach Ihren Wünschen und einigen anderen Optionen durch, wenn Drupal den Filterwert finden kann.

Reza Shadman
quelle
mit der Funktion views_embed_view (). Wie würde ich das in meinen Unterpfad von / white-shoes / blue laden? Beachten Sie, dass / blue nicht existiert, da es von den Ansichten generiert wird. Wenn ein Benutzer den Pfad / blue erreicht, sollte er das erste Argument analysieren, die NID dieses Alias ​​abrufen und dann seinen Inhalt laden. Das Problem bei Kontextfiltern besteht darin, dass es keine Möglichkeit gibt, einen PHP-Wert für WENN DER FILTERWERT VERFÜGBAR IST, anzugeben.
Patoshi
@duckx, Es gibt eine hervorragende Option, um einen PHP-Wert bereitzustellen, wenn der Filter verfügbar ist - VALIDATION (type: PHP Code). Mit dieser Option können Sie das Ansichtsobjekt verwenden und alles tun, was Sie benötigen. In Ihrem Fall /bluewird der von Ansichten generierte Pfad auch zum Abrufen der Knoten-ID dieses Alias ​​verwendet.
Jack-PL