it-swarm.com.de

Mit welchem ​​Views-Hook kann ich die Ansichtsergebnisseite vor dem Laden ändern?

Ich habe die Ansicht, dass ich zwei Elemente unmittelbar vor dem Laden der Seite ändern möchte - den Titel und die Postleitzahl, die den Ort bestimmt, nach dem gefiltert werden soll.

Mein Modul erkennt den Standort einer Person und ersetzt den Standardwert im Filter "Ansichten", sodass die Ergebnisse ordnungsgemäß nach diesem Bereich sortiert werden.

Daher ändert sich der Titel in "Anzeigen von Elementen in Charlotte, NC", wobei Charlotte, NC das dynamische Element ist.

Ich habe ein Modul erstellt, bin mir jedoch nicht sicher, welche Ansichts-Hooks ich verwenden muss, um die Ergebnisse zu erzielen, insbesondere, damit die Ansicht mit dem neuen Speicherort ausgeführt wird.

Hier sind die Views-Hooks für D7 http://api.drupal.org/api/views/views.api.php/group/views_hooks/7

Muss ich es vorab sehen? pre_render? Ändern Sie die Abfrage mit den neuen Standortdetails, bevor sie ausgeführt wird?

Hier ist ein Beispiel meines Moduls, das versucht, hook_views_pre_view zu verwenden

function zipcode_filter_views_pre_view  ( &$view, &$display_id, &$args) {

    $view = views_get_view('baby_clothes_pages');
    $view->set_display('default'); 
    $view->set_exposed_input(array('postal_code' => $zipcode));
    $view->display['default']->handler->options['title'] = $title;

}

hinweis: Diese Referenz hat den von mir verwendeten Code beeinflusst. Die Dokumentation fehlt jedoch. Bin ich damit überhaupt auf dem richtigen Weg? http://groups.drupal.org/node/10129

4
blue928

Die Antwort war, die Funktion views_get_view sowie die Funktion set-> display zu entfernen. Es war auch nicht erforderlich, die exponierte Eingabe auszuführen. Alles, was benötigt wurde, ist, einfach die Standardwerte für die Variablen festzulegen, die ich im Views_pre_view-Hook haben wollte, und dann kümmert sich Views um den Rest, wenn es fertig ist. Hier ist der resultierende, korrekt funktionierende Code:

function zipcode_filter_views_pre_view  ( &$view, &$display_id, &$args) {

    $view->display['default']->handler->options['title'] = "this is the new title";
    $view->exposed_input['distance']['postal_code'] = $_SESSION['zipcode_filter']['Zip'];
    $view->exposed_input['distance']['search_distance'] = $_SESSION['zipcode_filter']['distance'];

}

Obwohl ich nicht verstehe, warum dies funktioniert - Warum muss ich keine Anzeige angeben? Warum haben die anderen Teile des früheren Codes dazu geführt, dass er nicht richtig funktioniert?

3
blue928