Ich habe mehrere Knotentypen, von denen jeder auf unterschiedliche Taxonomie-Vokabeln verweist. Für die Kategorieanzeige verwende ich das Modul taxonomy_display.
Zum Beispiel haben wir zwei Kategorien: Queues und Billardkugeln.
Cues hat Preis von, Preis bis und Holzfilter. Aber Bälle haben keinen Holzfilter.
Also muss ich den Holzfilter entfernen, wenn taxonomy_term auf das Vokabular der Billardkugeln verweist.
Daher muss ich einen von vielen exponierten Filtern programmgesteuert entfernen.
function modulename_views_pre_view(&$view, &$display_id, &$args) {
// Some custom logic wich field_info_instances checking ...
$filter_field = 'filter_id';
// Removes from everywhere where i can find filter or filters properties
unset($view->display[$view->current_display]->display_options['filters'][$filter_field]);
unset($view->display[$view->current_display]->handler->options['filters'][$filter_field]);
unset($view->display_handler->display->display_options['filters'][$filter_field]);
unset($view->display_handler->options['filters'][$filter_field]);
}
Filterfeld erfolgreich entfernt, aber ich habe PHP-Hinweis:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
Ich versuche auch, das Feld in hook_pre_execute () zu entfernen, aber mit dem gleichen Ergebnis:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Versuchen Sie es auch mit der Methode override_option () wie hier - http://groups.drupal.org/node/82219 , aber ohne Ergebnis.
Irgendwelche Vorschläge? Bitte helfen Sie =)
Vielen Dank an alle für die Antwort, aber ich habe noch keine Antwort. Vielleicht ist etwas nicht klar? = ((
?filter_id=val
, gibt Ansichten eine leere Anzeige oder einen Fehler bei der illegalen Auswahl zurück ...Antworten:
Ich würde hook_form_alter verwenden, indem wir unset für das Formularobjekt verwenden, wie Sie es in Ihrem Beispiel für das Element sind, das Sie entfernen möchten.
quelle
Hier ist das getestete Snippet, mit dem Sie die Filter aus den Ansichten entfernen können, die in Formblättern angezeigt werden, indem Sie form alter verwenden, wie von Scott Thomas erwähnt.
Neben dem Entfernen des Formularfelds müssen Sie auch die Informationen für einen bestimmten Filter entfernen, die in $ form ['# info'] verfügbar sind, damit auch die Beschriftung entfernt wird. Wenn Sie nur das Formularelement entfernen, wird die Filterbezeichnung angezeigt, obwohl das Feld entfernt wurde. Stellen Sie daher immer sicher, dass Sie auch diese Informationen entfernen.
Ändern Sie dies entsprechend Ihren Anforderungen. Wenn Sie diese für eine bestimmte Ansicht ausführen möchten, fügen Sie auch dafür eine Bedingung hinzu:
Hier gibt $ form_state ['view'] das aktuelle Ansichtsobjekt an, das gerade verarbeitet wird.
Hoffe das hilft.
quelle
Folgen Sie den unteren Schritten
Versuchen Sie als nächstes den folgenden Code
nicht gesetzt ($ form ['# info'] ['your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSE';
Ich hoffe, das hilft.
quelle
Sie können exponierte Filter auch mithilfe der Vorlagendatei entfernen.
Verwenden Sie diesen Befehl:
Suchen Sie in der Vorlagendatei diesen Code:
Und entferne es. Ihr exponierter Filter wird aus der Anzeige entfernt, funktioniert aber weiterhin, wenn Sie die richtigen Argumente in der URL übergeben.
quelle
Korrigieren Sie mich, wenn ich falsch liege, weil ich nicht sicher bin, ob ich Ihr Problem vollständig verstehe. Sie möchten also einen belichteten Filter in Abhängigkeit vom Wert eines anderen belichteten Filters in einer Ansicht ausblenden? In diesem Fall können Sie das Modul Ansichtenabhängige Filter ausprobieren . Ich habe es mehrmals benutzt und es macht den Job.
Sie können die Bewertung unseres Freundes Lullabot zu diesem Modul überprüfen .
Wenn Sie dies wirklich im Code tun müssen, sollte die exponierte Option funktionieren: filter [$ filter_id] -> options ['exponiert'] = FALSE;
quelle
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
ich einen schwerwiegenden Fehler -PHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Ich denke, es ist korrekt, denn wenn der Filter nicht verfügbar ist, ist auch ein Standardwert erforderlich. Irgendwelche Ideen?Folgendes hat es für mich in hook_form_alter getan:
quelle
Methode 1
Mit hook_views_query_alter (). Siehe folgendes Beispiel:
Methode 2
Sehen Sie sich das Beispiel an, indem Sie hook_views_pre_execute und eine benutzerdefinierte Funktion verwenden, die versucht, die richtige Feldbedingung zu finden und den Verweis darauf zurückzugeben:
quelle
Ich entferne es aus Vorlagendateien. Überschreiben Sie die Datei views-view.tpl.php und entfernen Sie den folgenden Code:
quelle
Ich denke, die Operation war auf dem richtigen Weg. Ich hatte eine ähnliche Situation ohne exponierte Filter, sodass ich die Methode hook_form_alter nicht verwenden konnte. Hier ist ein Beispielcode für alle anderen, die darauf stoßen:
Das Ansichtsobjekt hat keine
remove_item
Funktion, sondern gibt im Code einfach an, dass Sie es auf null setzen können, um ein Element mit Filtern zu entfernen:views/includes/view.inc
online2526
.Hier ist ein vollständiges Beispiel für alle, die auf eine bestimmte Ansicht und Anzeige abzielen:
quelle