Wie leite ich eine exponierte Filterabfrage auf eine Ansichtsergebnisseite um, die sich auf einer anderen Bedienfeldseite befindet?


8

Mein Setup: Drupal 7.2, Panels 7.x-3.0-alpha3, Ansichten 7.x-3.0-beta3, Chaos Tool Suite 7.x-1.0-beta1

Angenommen, ich möchte eine Obstverzeichnis-Website erstellen. In Ansichten habe ich einen Inhaltsbereich "Früchte" mit exponierten Filtern basierend auf Taxonomien "Farbe". Die Website soll zwei Panelseiten haben. Auf der ersten Bedienfeldseite wird nur das sichtbare Filterfeld "Suche nach einer Frucht" mit einem Dropdown-Menü für "Farbe" und einer Suchschaltfläche angezeigt. Nach Auswahl aus der Dropdown-Liste und Klicken auf die Suchschaltfläche soll der Benutzer zur zweiten Bedienfeldseite weitergeleitet werden, die den Inhaltsbereich der Ansicht enthält, in dem eine Liste der Früchte angezeigt wird, die dem Filter (der Farbe) entsprechen.

Das Problem ist: Das exponierte Filterfeld auf der ersten Seite wird nach dem Klicken auf die Schaltfläche Anwenden nicht zur Ergebnisseite umgeleitet. Wie richte ich Ansichten und Bedienfelder ein, um dies zu erreichen?

Antworten:


7
function hook_form_alter(&$form, &$form_state, $form_id) {  
  if ($form_id=='views_exposed_form') {
    global $base_url;
    $form['#action'] = $base_url.'/path_that_you_want'; 
  }
}

Dies funktioniert gut, aber anstatt $ base_url zu verwenden, sollten Sie wahrscheinlich verwenden url('path_that_you_want').
John Fiala

1
Ich habe dies ohne Erfolg versucht. In meinem Attribut "Aktion" wird tatsächlich ein anderes Ziel angegeben. Wie kann ich das beheben?
Sokratis

Hey, wo füge ich diesen Code hinzu, bitte lassen Sie es mich wissen. Danke
React Developer

0

Ich bin nicht sicher, ob es einen "richtigen" Weg gibt, aber ich habe dies erreicht, indem ich einen hook_form_alter für das exponierte Filterformular geschrieben habe, um das Ziel zu ändern.

Nicht ideal, aber ich habe die Ergebnisse erzielt, die ich brauchte.


Wie hast du das gemacht? Könnten Sie bitte Ihren Code posten?
Michiel

0

Die einfachste Lösung ist zu

  • Erstellen Sie eine Ansichtsseite
  • Erstellen Sie eine belichtete Ansicht
  • Unter Erweitert> exponiertes Formular. Setzen Sie "exponierte Form im Block: Ja"
  • Fügen Sie der gewünschten Startseite den Block "Exposed form: ..." hinzu.

0

Die einfachste Lösung besteht darin, eine Ansichtsseite zu erstellen. Erstellen Sie eine exponierte Ansicht unter Erweitert> exponiertes Formular. Setzen Sie "Belichtetes Formular im Block: Ja". Fügen Sie den Block "Belichtetes Formular: ..." zur gewünschten Startseite hinzu.

Das obige Formular von Interlated hat mich auf halbem Weg mit dem freigelegten Filterblock dazu gebracht, die Ergebnisse auf einer neuen Seite zu öffnen und anzuzeigen.

Ich brauchte jedoch auch den Filterblock, um auf dieser Ergebnisseite zu sein. Also habe ich das Formular (exponierter Filterblock) über den Ansichtsbereich in der Kopfzeile angehängt. Dann stieß ich auf rekursives Verhalten, wenn beide Anzeigen in derselben Ansicht angezeigt wurden.

Um dies zu lösen, habe ich die beiden Anzeigen (Seite & Block) in ihre jeweiligen Ansichten unterteilt. Dabei wurde ein Block als exponierter Filter erstellt, der Felder für Ergebnisse enthielt, und dann eine völlig neue Ansicht für die Seite, auf der eine URL zu erreichen ist. Die Seitenansicht enthält ein Feld (Titel), das als Leerzeichen überschrieben wird (hauptsächlich, weil die Ergebnisse redundant, aber auch ungenau wären - ich fand, dass die Ergebnisse von Feldern im exponierten Filterblock genau angezeigt wurden). Ich habe die gleichen gefilterten Einstellungen zwischen beiden Displays beibehalten und besser belichtete Filter mit Ajax auf beiden Displays verwendet.

Ich habe das in D8 gemacht, aber wahrscheinlich würde es bei 7 gleich sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.