Eu tenho vários tipos de nós, cada um deles relacionado a diferentes vocabulários de termos taxonômicos. Para exibição de categoria, eu uso o módulo taxonomy_display.
Por exemplo, temos duas categorias: tacos e bolas de bilhar.
Cues tem preço de, preço e filtros do tipo madeira. Mas as bolas não têm filtro de madeira.
Então, eu preciso remover o filtro de tipo de madeira se taxonomy_term tid referenciado ao vocabulário de bolas de bilhar.
Portanto, preciso remover um dos muitos filtros expostos programaticamente.
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]);
}
O campo de filtro é removido com êxito, mas tenho o aviso php:
Notice: Undefined index: field_wood_reference_tid in function views_handler_filter_term_node_tid->exposed_validate()
Também tento remover o campo em hook_pre_execute (), mas com o mesmo resultado:
function modulename_views_pre_execute(&$view) {
$filter_field = 'filter_id';
unset($view->display_handler->handlers['filter'][$filter_field]);
unset($view->filter[$filter_field]);
}
Tente também com o método override_option () como aqui - http://groups.drupal.org/node/82219 , mas sem resultado.
Alguma sugestão? Pls help =)
Obrigado a todos pela resposta, mas ainda não tenho resposta. Talvez algo não esteja claro? = (
?filter_id=val
, vistas retornos de exibição vazio ou erro escolha ilegal ...Respostas:
Eu usaria hook_form_alter usando unset no objeto de formulário, como no exemplo para o elemento que você deseja remover.
fonte
Aqui está o snippet testado que permitirá remover os filtros das exibições expostas do formulário usando alterar o formulário, conforme mencionado por Scott Thomas,
Além de remover o campo do formulário, você também precisa remover as informações de um filtro específico, disponíveis em $ form ['# info'], para que também remova o rótulo. Se você remover o elemento do formulário sozinho, o rótulo do filtro será exibido mesmo que o campo tenha sido removido. Portanto, sempre verifique se você está removendo essas informações também.
Modifique isso de acordo com sua necessidade. Se você deseja executar este para uma exibição específica, adicione uma condição para isso também,
Aqui $ form_state ['view'] fornecerá o objeto de visualização atual que está sendo processado.
Espero que isto ajude.
fonte
Siga os passos abaixo
Em seguida, tente o seguinte trecho de código
unset ($ form ['# info'] ['your_field_name']); $ form ['your_field_name'] ['# access'] = 'FALSO';
Espero que ajude.
fonte
Você pode remover o filtro exposto usando o arquivo de modelo também.
Use este comando:
No arquivo de modelo, encontre este código:
E remova-o. Seu filtro exposto será removido da exibição, mas continuará funcionando com você passando argumentos adequados no URL.
fonte
Corrija-me se estiver errado, porque não tenho certeza de entender completamente o seu problema. Então, você gostaria de ocultar um filtro exposto em uma exibição, dependendo do valor de outro filtro exposto? Nesse caso, você pode tentar o módulo Views Dependent Filters . Eu usei várias vezes e faz o trabalho.
Você pode verificar o nosso Lullabot demônio revisão sobre este módulo.
Se você realmente precisar fazer isso no código, a opção exposta deve funcionar: filter [$ filter_id] -> options ['posed '] = FALSE;
fonte
$view->display_handler->handlers['filter'][$filter_field]->options['exposed'] = FALSE;
eu tenho um erro fatal -PHP Fatal error: Call to undefined method stdClass::access() in .../view.inc on line 766
. Eu acho que seu comportamento correto, porque se o filtro não for exposto, ele também precisará de valor padrão. Alguma ideia?O seguinte foi feito por mim dentro do hook_form_alter:
fonte
Método 1
Usando hook_views_query_alter (). Veja o seguinte exemplo:
Método 2
Veja o exemplo usando hook_views_pre_execute e a função customizada que tenta encontrar a condição de campo correta e retornar a referência a ela:
fonte
Estou removendo-o dos arquivos de modelo. Substitua o views-view.tpl.php e remova o seguinte código:
fonte
Eu acho que a operação estava no caminho certo. Eu tive uma situação semelhante sem filtros expostos, então não pude usar o método hook_form_alter. Aqui está um exemplo de código para qualquer pessoa que se depare com isso:
O objeto de exibição não tem uma
remove_item
função, mas simplesmente declara no código que você pode configurá-lo como nulo para remover um item incluindo filtros:views/includes/view.inc
on-line2526
.Aqui está um exemplo completo para qualquer pessoa que segmentar uma exibição e exibição específica:
fonte