Mam kilka typów węzłów, z których każdy odnosi się do innego słownictwa terminów taksonomicznych. Do wyświetlania kategorii używam modułu taksonomii.
Na przykład mamy dwie kategorie: wskazówki i kule bilardowe.
Cue ma cenę od, cena do i filtry typu drewna. Ale kule nie mają filtra typu drewna.
Więc muszę usunąć filtr typu drewna, jeśli taksonomia_term tid odnosi się do słownictwa kule bilardowe.
Dlatego muszę programowo usunąć jeden z wielu odsłoniętych filtrów.
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]);
}
Pole filtru zostało pomyślnie usunięte, ale dostałem powiadomienie php:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
Próbuję również usunąć pole w hook_pre_execute (), ale z tym samym rezultatem:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Spróbuj także za pomocą metody override_option (), jak tutaj - http://groups.drupal.org/node/82219 , ale nie ma żadnego wyniku.
Jakieś sugestie? Pls help =)
Dziękuję wszystkim za odpowiedź, ale wciąż nie mam odpowiedzi. Może coś nie jest jasne? = (
?filter_id=val
, widoki zwrócą pusty ekran lub błąd nielegalnego wyboru ...Odpowiedzi:
Użyłbym hook_form_alter użyciu rozbrojony na obiekcie formularz jak jesteś w swoim przykład dla elementu, który chcesz usunąć.
źródło
Oto przetestowany fragment, który pozwoli Ci usunąć filtry z odsłoniętej formy przy użyciu formularza alter, jak wspomniał Scott Thomas,
Oprócz usunięcia pola formularza musisz również usunąć informacje dla konkretnego filtra, który jest dostępny w $ form ['# info'], aby usunąć również etykietę. Jeśli usuniesz sam element formularza, etykieta filtra zostanie wyświetlona, nawet jeśli pole zostanie usunięte, więc zawsze upewnij się, że usuwasz również te informacje.
Zmodyfikuj to zgodnie ze swoimi potrzebami. Jeśli chcesz wykonać to dla konkretnego widoku, dodaj też warunek, np.
Tutaj $ form_state ['view'] da ci bieżący obiekt widoku, który jest przetwarzany.
Mam nadzieję że to pomoże.
źródło
Wykonaj poniższe kroki
Następnie wypróbuj następujący fragment kodu
unset ($ form ['# info'] ['your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSE';
Mam nadzieję, że to pomaga.
źródło
Możesz usunąć odsłonięty filtr również przy użyciu pliku szablonu.
Użyj tego polecenia:
W pliku szablonu znajdź ten kod:
I usuń to. Twój odsłonięty filtr zostanie usunięty z ekranu, ale nadal będzie działał, przekazując odpowiednie argumenty w adresie URL.
źródło
Popraw mnie, jeśli się mylę, ponieważ nie jestem w stanie w pełni zrozumieć Twojego problemu. Czy chcesz ukryć odsłonięty filtr w widoku w zależności od wartości innego odsłoniętego filtra? Jeśli tak, możesz wypróbować moduł Widoki zależne od filtrów . Użyłem go kilka razy i to działa.
Możesz sprawdzić nasze Fiend Lullabot za opinię na temat tego modułu.
Jeśli naprawdę musisz to zrobić w kodzie, opcja narażona powinna działać: filter [$ filter_id] -> options ['posed '] = FALSE;
źródło
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
mam błąd krytyczny -PHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Myślę, że jego poprawne zachowanie, ponieważ jeśli filtr nie jest narażony, wymaga również wartości domyślnej. Jakieś pomysły?To zrobiłem dla mnie wewnątrz hook_form_alter:
źródło
Metoda 1
Za pomocą hook_views_query_alter (). Zobacz następujący przykład:
Metoda 2
Zobacz przykład, używając hook_views_pre_execute i funkcji niestandardowej, która próbuje znaleźć odpowiedni warunek pola i zwrócić do niego odwołanie:
źródło
Usuwam go z plików szablonów. Zastąp view-view.tpl.php i usuń z niego następujący kod:
źródło
Myślę, że operacja była na dobrej drodze. Miałem podobną sytuację bez odsłoniętych filtrów, więc nie mogłem użyć metody hook_form_alter. Oto przykładowy kod dla każdego, kto natknie się na to:
Obiekt widoku nie ma
remove_item
funkcji, ale po prostu stwierdza w kodzie, że można ustawić go na zero, aby usunąć element zawierający filtry:views/includes/view.inc
on-line2526
.Oto pełny przykład dla każdego, kto kieruje na określony widok i wyświetlanie:
źródło