У меня есть несколько типов узлов, каждый из которых относится к разным словарным терминам таксономии. Для показа категорий я использую модуль taxonomy_display.
Например, у нас есть две категории: киев и бильярдных шаров.
Cues имеет цену от, цена и фильтры типа древесины. Но у шаров нет деревянного фильтра.
Так что мне нужно удалить фильтр типа дерева, если tid taxonomy_term ссылается на словарь бильярдных шаров.
Таким образом, мне нужно удалить один из множества выставленных фильтров программно.
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]);
}
Поле фильтра удаляется успешно, но я получил уведомление php:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
Также я пытаюсь удалить поле в hook_pre_execute (), но с тем же результатом:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Также попробуйте использовать метод override_option (), как здесь - http://groups.drupal.org/node/82219 , но без результата.
Какие-либо предложения? Пожалуйста помогите =)
Спасибо всем за ответ, но у меня до сих пор нет ответа. Может, что-то не понятно? знак равно
?filter_id=val
, представления возвращают пустое отображение или ошибку неправильного выбора ...Ответы:
Я бы использовал hook_form_alter, используя unset в объекте формы, как в вашем примере для элемента, который вы хотите удалить.
источник
Вот протестированный фрагмент, который позволит вам удалить фильтры из открытой формы представлений, используя изменение формы, как упомянуто Скоттом Томасом,
Помимо удаления поля формы, вам также необходимо удалить информацию для конкретного фильтра, которая доступна в $ form ['# info'], чтобы она также удаляла метку. Если вы удалите только элемент формы, тогда метка фильтра будет отображаться даже при удалении поля, поэтому всегда проверяйте, удаляете ли вы также эту информацию.
Измените это в соответствии с вашими потребностями. Если вы хотите выполнить это для определенного вида, то добавьте условие для этого, например,
Здесь $ form_state ['view'] даст вам текущий объект представления, который обрабатывается.
Надеюсь это поможет.
источник
Следуйте инструкциям ниже
Затем попробуйте следующий кусок кода
снята с охраны ($ форма [ '# информация'] [ 'your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSE';
Надеюсь, это поможет.
источник
Вы также можете удалить открытый фильтр, используя файл шаблона.
Используйте эту команду:
В файле шаблона найдите этот код:
И удали это. Ваш выставленный фильтр будет удален с дисплея, но будет продолжать работать, передавая правильные аргументы в URL.
источник
Поправьте меня, если я ошибаюсь, потому что я не уверен, что полностью понимаю вашу проблему. Итак, вы хотели бы скрыть открытый фильтр в представлении в зависимости от значения другого открытого фильтра? Если это так, вы можете попробовать модуль Views Dependent Filters . Я использовал его несколько раз, и он делает свою работу.
Вы можете проверить обзор нашего модуля из Lullabot об этом модуле.
Если вам действительно нужно сделать это в коде, открытая опция должна работать: filter [$ filter_id] -> options ['cted '] = FALSE;
источник
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
меня есть фатальная ошибкаPHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Я думаю, что его правильное поведение, потому что, если фильтр не выставлен, он также требует значения по умолчанию. Любые идеи?Следующее сделало это для меня внутри hook_form_alter:
источник
Способ 1
Используя hook_views_query_alter (). Смотрите следующий пример:
Способ 2
Посмотрите пример, используя hook_views_pre_execute и пользовательскую функцию, которая пытается найти правильное условие поля и вернуть ссылку на него:
источник
Я удаляю это из файлов шаблона. Переопределите views-view.tpl.php и удалите из него следующий код:
источник
Я думаю, что операция была на правильном пути. У меня была похожая ситуация без открытых фильтров, поэтому я не мог использовать метод hook_form_alter. Вот пример кода для всех, кто сталкивался с этим:
Объект представления не имеет
remove_item
функции, он просто заявляет в коде, что вы можете установить его в null, чтобы удалить элемент, включая фильтры:views/includes/view.inc
on line2526
.Вот полный пример для любого, который предназначается для определенного представления и отображения:
источник