Wie verwende ich den Knotentitel oder den Pfadalias anstelle der Knoten-ID im Kontextfilter der Knotenreferenz in Ansichten?

8

Ich habe Knoten A mit einem Knotenverweis auf Knoten B.

In einer Ansicht zeige ich alle Knoten A, auf die auf einen bestimmten Knoten B verwiesen wird (nid: 123, title: node-B-title).

Anstatt die nid im Kontextfilter zu verwenden, möchte ich den Knotentitel verwenden. Zum Beispiel anstelle von:

view-name/123

Ich würde gerne verwenden

view-name/node-B-title

Wie könnte ich das machen?

uwe
quelle

Antworten:

11

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 angeben, was mit den Filterwerten zu tun ist , 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.

Dieser Link hat sich für mich als große Hilfe erwiesen. Hier ist ein Auszug daraus:

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}
Sumeet Pareek
quelle
Dies hat bei mir nicht funktioniert, sondern beim Speichern einen Ajax-Fehler in der Ansicht verursacht.
DrCord
1

Dies funktioniert nicht unter allen Umständen, aber ein Ansatz für das Problem in der Frage besteht darin, die tatsächliche Knotenanzeige von Knoten B (oder Knotentyp B) zu verwenden und den gewünschten Pfad mit dem Pfad- oder Pathauto-Modul festzulegen. Verwenden Sie dann den Ansichtsblock, um die Inhaltsbeziehung und die gewünschte Ansicht hinzuzufügen.

Verwenden Sie einen Kontextfilter für NID und stellen Sie ihn dann ein Provide default value > Content ID from URL. Fügen Sie dann den Ansichtsblock zu Ihrer Seite oder einem Satz von Seiten hinzu.

Wenn Sie in Ihrem Kontext einen Ansichtsblock auf dem Knoten selbst und keine Ansichtsseite verwenden können, ist es viel einfacher, den gewünschten Pfad und die gewünschten Ansichten anzuzeigen.

squarecandy
quelle
1

Ich habe die akzeptierte Antwort bearbeitet, wollte aber hier den eigentlichen Code hinzufügen:

Verwenden Sie die PHP-validierte Option unter den Validierungsoptionen im Kontextfilter.

$np = explode('/', drupal_get_normal_path($argument));
if (!empty($np[1])) {
  $handler->argument = $np[1];
  return TRUE;
} else {
  return FALSE;
}
Eric Steinborn
quelle
1

Das Ansichtsargument muss die Feldreferenz des Inhaltstyps sein, dann die Option "Standardargument bereitstellen" auswählen und die Option ID-Knoten (so ähnlich) aktivieren.

1) Argument "X-Feldreferenz" hinzufügen 2) ID-Knoten anhand der URL überprüfen (Standardargument hinzufügen) 3) Überprüfen Sie im Validierungsabschnitt den Inhaltstyp des Knotens und wählen Sie unter "Knotentyp" die Option "Knoten-ID" aus

Und ist fertig. :) :)

Eleo
quelle
"Inhalts-ID von URL" gibt nur die NID an. Wenn ich eine Termreferenz verwenden würde, könnte ich "Validierungskriterien" mit "Termname in Term-ID konvertiert" verwenden. Für die Knotenreferenz gibt es keine ähnliche Option, um den Titel in nid zu übersetzen. Wahrscheinlich, weil Titel nicht unbedingt eindeutig sind.
Uwe
Ja ist richtig, aber es ist notwendig, dass das Argument die Feldreferenz (nid) ist. Versuchen Sie das.
Eleo
1) Argument "X-Feldreferenz" hinzufügen 2) ID-Knoten anhand der URL überprüfen (Standardargument hinzufügen) 3) Überprüfen Sie im Validierungsabschnitt den Inhaltstyp des Knotens und wählen Sie unter "Knotentyp" "Knoten-ID"
Eleo
Die tatsächliche URL kann die NID haben, und der Pfadalias kann der Knotentitel sein. Das funktioniert doch, oder?
SGhosh
0

Alte Frage, aber ich habe sie über Google gefunden und dachte, ich würde meine Lösung für alle anderen teilen, die sie in Zukunft finden:

Es gibt jetzt ein Modul namens safeword, das genau das tut, was Sumeet Pareek vorgeschlagen hat: (Automatisch) erstellt ein URL-freundliches Feld.

Gerto
quelle
0

Ich würde das Modul Extended Path Aliases (path_alias_xt) empfehlen . Es behebt dieses Problem nur, indem es ohne Konfiguration installiert wird. Es ist anscheinend im Grunde genommen magisch. : D Nicht wirklich, aber der Auszug aus der Modulseite lobt, wie Sie es einfach installieren und es behebt dieses und andere Probleme, geht aber nicht darauf ein, wie das Modul dies hinter den Kulissen tut ... O, nun, wir könnten es immer Lesen Sie den Code: D Das Fixieren von Ansichtspfaden wird nicht ausdrücklich erwähnt, aber ich habe es verwendet, um dies zu tun, und es funktioniert perfekt.

Liste der Probleme, die es löst, auf der Modulseite:

  • Haben Sie sich jemals gefragt, warum Ihre Seiten nach der Definition eines Alias ​​wie about-us für beispielsweise node / 123 immer noch mit diesen hässlichen maschinengenerierten Registerkarten und Links wie / node / 123 / edit, node / 123 / revisions usw. Durchsetzt sind? .?
  • Ebenso für / taxonomy / term /% und / user /% links: Hatten Sie erwartet, / dries / track zu sehen, haben aber / user / 5 / track?
  • Finden Sie, dass Ihre Browser-Adressleiste anstelle Ihrer Aliase auch diese hässlichen Zahlen anzeigt?
DrCord
quelle