Drupal 7 Kontextfilter nach URL-Alias

7

Ich habe eine Ansicht, die eine Liste von Artikeln zeigt, die sich befindet unter:

mypage.com/articles

Jeder Artikel ist wie folgt mit seiner Haupt-Unterseitenansicht verknüpft:

mypage.com/articles/name-of-my-artile-yay

Der URL-Pfad wird mit Autopathen- und URL-Aliasnamen erstellt.

Wie erstelle ich in Ansichten einen Kontextfilter, um nur die ausgewählte Unterseitenansicht anzuzeigen?

Ich habe dies als meinen Weg in Ansichten:

Artikel/%

aber ich weiß nicht, wohin ich von hier aus gehen soll. Ich habe versucht, den Titel in Kleinbuchstaben zu schreiben und Leerzeichen durch einen Bindestrich zu ersetzen, aber das funktioniert nicht immer, und die URL-Aliase ändern die URL so, dass Wörter wie:

a, an, as, at, before, aber by

Und wenn ein Seitentitel lautet:

Dies ist mein Seitentitel - damit

Der URL-Alias ​​lautet:

my-page-title

Daher kann es in meinem Kontextfilter nicht mit dem Seitentitel übereinstimmen.

Was vermisse ich?

Cybercampbell
quelle
Was möchten Sie tun, wenn 2 Knoten den gleichen Titel hätten?
Charlie Schliesser
Der URL-Pfad-Alias ​​wäre unterschiedlich. Das ist einer der Gründe, die ich verwenden möchte URL path Aliasund nicht der Titel.
Cybercampbell
Ah, möchten Sie also Artikel / Titel meiner Seite abgleichen und in den entsprechenden Knoten laden? ODER suchen Sie nach Artikeln / Mein% 20Page% 20Title zum Arbeiten?
Charlie Schliesser
articles/my-page-titleDies ist der Alias ​​für den URL-Pfad.
Cybercampbell

Antworten:

8

Ich denke, der einfachste Weg ist, Panels zu verwenden und die Knotenseite zu überschreiben. Fügen Sie eine Variante hinzu, fügen Sie Ihre Ansicht hinzu und senden Sie das Argument nid des Knotens mit dem Kontextargument node: nid an diesen.

  1. (Seitenmanager installieren)
  2. Aktivieren Knotenansicht Seite (Knoten / Knoten%)
  3. Fügen Sie eine Variante hinzu, legen Sie ein Validierungskriterium fest und wählen Sie Ihren betroffenen Knotentyp aus
  4. Verwenden Sie eine einfache einspaltige Anzeige
  5. Fügen Sie Ihre Ansicht in Ihre Spalte ein
  6. Es fragt nach einem Argument, sendet den Knoten: nid (oder entity_id oder was auch immer)Senden Sie die NID Ihres Knotens an Ihre Ansicht
  7. Verwenden Sie aus Ihrer Sicht den Kontextfilter node: nidIhre Ansicht arg

Alles ist getan.

Gregory Kapustin
quelle
Hi @Gregory - Ich habe Panels installiert und mir ein paar Tutorials angesehen, kann aber nirgendwo finden, wie ich das tun kann, was ich brauche. Alle Tutorials scheinen Taxonomie zu verwenden. Ich möchte nur den URL-Pfad-Alias ​​verwenden. Irgendwelche Vorschläge, wie ich das mache?
Cybercampbell
Ich habe die Antwort bearbeitet.
Gregory Kapustin
Hi @Gregory - Ich habe Ihre Anweisungen befolgt und erhalte eine leere Seite in der Knotenansicht. Ich denke, das ist etwas, aber ich mache immer noch etwas falsch. Irgendwelche Ideen? Mit # 3 hatte Add a variant, set a validation criteria selecting your concerned node typeich nur eine Option, unter Variant type der Panel. Ist das korrekt?
Cybercampbell
Das ist richtig. Wenn es sich um eine leere Seite handelt, wird Ihre Variante ausgewählt. Das Problem besteht in der Anzeige der Ansicht oder des Arguments, das Sie an sie senden. Ich habe die Antwort aktualisiert.
Gregory Kapustin
Awesome @Gregory - Das funktioniert .. Ich habe nur ein Problem. Es betrifft ALLE meine Knoten und nicht nur meinen articleInhaltstyp. Ich gehe davon aus, dass es mit # 3 zu tun hat, aber ich hatte nur eine Option unter Variantentyp: PanelWas habe ich verpasst?
Cybercampbell
3

Setzen Sie den Pfadalias für den Inhaltstyp auf so etwas wie articles/[node:title]

Option 1: Verwenden von Ansichten zum Ausführen von Detailseiten

In Ansichten:

  1. Erstellen Sie eine PageAnsicht mit dem Pfad auf/articles/%
  2. Hinzufügen von Kontextfiltern Inhalt: Nid und setzen Sie es auf Folgendes:

    • Wenn sich der Filterwert NICHT in der URL befindet => Standardwert angeben
    • Typ => Rohwert von URL
    • Pfad => Komponente 1 (Aktivieren Sie "Pfadalias verwenden")

Dies führt eine Pfadsuche für das letzte URL-Segment durch (so etwas wie "Mein-Artikel-Titel-Pfad-Alias") und gibt die richtige Knoten-ID zurück.

Option 2: Ansichten umgehen, um Detailseiten auszuführen

Anstatt den Pfad so /articles/%einfach wie /articlesfestzulegen /articles/%, lassen Sie alle Alias- Knoten mit Pfad normal auflösen.

Kara
quelle
Wie verwirrend - Wenn der Filterwert NICHT in der URL enthalten ist, verwenden Sie einen Filterwert aus der URL!?!?! Vielen Dank für die Aufklärung ...
Felix Eve
Ich denke, das hat damit zu tun, dass Ansichten die System-URL (z. B. node / 2) und nicht den Pfad-Alias ​​verwenden. In diesem Fall ist der Filterwert (Pfadalias) tatsächlich nicht in der URL enthalten, weshalb wir ihn explizit übergeben
Kara
1

Fügen Sie einen Kontextfilter für die Knoten-ID hinzu und geben Sie die Standardeinstellung mit PHP an:

if (isset($this->view['args'][0])) {
  $path = db_query("SELECT source FROM {url_alias} WHERE alias = :alias LIMIT 1", array(':alias' => 'article/' . $this->view['args'][0]))->fetchColumn();
  if ($path) {
    $parts = explode("/", $path);
    if (isset($parts[1]) && is_numeric($parts[1])) {
      return $parts[1];
    }
  }
}

return FALSE;

Dies wird beispielsweise zurückgegeben, node/123wenn der Titel des Knotens 123 Meine Seite und Titel war und Sie auf die Ansicht unter zugegriffen haben example.com/the_view/my-page-title.

Charlie Schliesser
quelle
Danke @Charlie - Ich habe anscheinend nicht die Möglichkeit, einen Kontextfilter für 'Pfad' hinzuzufügen. Muss ich etwas extra installieren, um das zu bekommen?
Cybercampbell
Ich hätte nicht davon ausgehen sollen, dass es Ihnen zur Verfügung steht. Würden Sie sich damit zufrieden geben, nur die Knoten-ID zu verwenden und den resultierenden Maschinenpfad aus der Abfrage zu explodieren, wie $ parts = explode ($ path); return $ parts [1]; ?
Charlie Schliesser
Ich habe meine Antwort aktualisiert, um für die Knoten-ID zu arbeiten.
Charlie Schliesser
Danke @Charlie - Am Ende habe ich mich für die Panel-Lösung von Gregory Kapustin entschieden, aber dies war eine knappe Sekunde für mich, also wollte ich mich bedanken ... habe 1 gewählt !!
Cybercampbell
1
Dies ist eigentlich die erste Antwort, die ich Ihnen gegeben und gelöscht habe. Danke @charlieS!
Gregory Kapustin
0
**Contextual filters**

1) Global: Null 2) (Artikel) Inhalt / Knoten: nid Wenn der Filterwert NICHT verfügbar ist Standardwert angeben: Rohwert aus URL

Somik
quelle
Hi @Somik Danke, dass du eingegriffen hast, um dabei zu helfen. Könnten Sie bitte Ihre Antwort ein wenig erweitern? Ich habe versucht, es selbst herauszufinden, aber es hat nicht funktioniert, also gehe ich davon aus, dass ich es inkorrekt gemacht habe
Cybercampbell
0

Versuchen Sie diesen Ansatz ...

Sie greifen zuerst auf den normalen Drupal-Pfad "node / nid" zu, nehmen dann die nid, um die volle Last zu laden, und verwenden dann den Knotentitel als Kontextfilter.

1) Holen Sie sich den normalen Pfad des aktuellen Knotens, der angezeigt wird ...

<?php
$ogpath = drupal_lookup_path("source",$_GET['q']);

2) Dies kann teuer sein, aber versuchen Sie es ... erhalten Sie die aktuelle NID

$ogarray = explode('/', $ogpath);
$node = node_load($ogarry[1]);
return $node->title;

Sag mir, ob es funktioniert.

Ihr Pathauto entfernt Wörter auf eine Weise, die mir noch nicht begegnet ist. Sind Sie sicher, dass sie richtig konfiguriert sind?

Chiko
quelle
Hallo @Chiko - Pathauto ist wie es Standard ist. Ich werde es jetzt versuchen. danke
Cybercampbell
oh .. aber ich möchte keine Knotentitel in meiner URL verwenden .. es hat Leerzeichen usw. Entschuldigung, wenn ich falsch verstanden habe. Können Sie bitte Ihre Methode erweitern? Danke noch einmal. C
Cybercampbell
0

Ich hatte ein sehr ähnliches Problem und fand nicht nur die Lösung, sondern lernte auch neue Dinge über die Funktionsweise der Ansicht. Lassen Sie mich mitteilen, was ich gelernt habe und auch die Lösung für Ihr Problem.

Wenn Sie eine Ansicht mit einem oder mehreren Kontextfiltern erstellen, muss die Ansicht von irgendwoher Werte dieser Filter erhalten. Dies kann erfolgen durch -

  1. Auswählen der Kontextfilterwerte aus der URL
    • Normalerweise haben Sie für solche Zwecke eine Seitenansicht mit einer URL des Formulars foo/%/baroder foo/bar/%für einen einzelnen Kontextfilter ODER des Formulars foo/%/bar/%oder foo/bar/%/%für mehrere Filter
    • Wenn Sie mehrere Filter haben, wird der zuerst angezeigte URL-Wert dem ersten Filter, dem zweiten Filter usw. zugeordnet.
  2. In Ansichten können Sie festlegen , was zu tun ist, wenn die Filterwerte in der URL nicht verfügbar sind . Dies wird normalerweise für Blockansichten verwendet .
    • Sie können aus verschiedenen Aktionen auswählen und dann auch die Auswahl konfigurieren. Sie können aus verschiedenen Aktionen auswählen und dann auch die Auswahl konfigurieren. asdfj kajsdf
  3. In einer anderen Ansicht können Sie festlegen , was mit den Filterwerten geschehen soll, wenn sie in der URL enthalten sind, wie in Nr. 1 oben beschrieben. Typische Anwendungsfälle sind: - Erstellen dynamischer Titel basierend auf Filterwerten, Validieren von Filterwerten usw.
    • Bei der Validierung von Filterwerten können Sie auch die Werte ändern! (Hier liegt übrigens unsere Lösung). Dies ist sehr ähnlich zu der Art und Weise, wie wir $ form-Werte in den Rückrufen zur Drupal-Formularvalidierung ändern können. Geben Sie hier die Bildbeschreibung ein

Die Lösung für Ihr spezifisches Problem besteht darin, in den Abschnitten, auf die die Pfeile im obigen Bild zeigen, einen sehr ähnlichen Code zu verwenden.

Hier ist der Link, der sich als große Hilfe für mich erwiesen hat - http://www.drupalfoo.com/drupal-7-views-contextual-filter-argument-node-reference-using-url-alias

Sumeet Pareek
quelle