Como usar um filtro contextual de visualizações OU?

18

Depois de navegar na net e no SE por um tempo, parece-me que não há uma boa solução para combinar 2 contextual filterscom OR (em vez do AND padrão).

Esta publicação menciona um hack do PHP e esta publicação possui alguns links para um problema informando uma alteração recente nas visualizações 7.x-3.1 . Também menciona o uso hook_views_query_alter(&$view, &$query)para modificar a exibição.

Alguém tem um exemplo de trabalho ou uma solução melhor?

uwe
fonte
Acho que não há uma solução melhor a partir de agora. Como dito nos tópicos que você apontou, aparentemente é um problema em andamento. Eu tropecei no mesmo problema esta semana e tive que encontrar uma solução alternativa com anexos. Mas não fornece uma lista mista, mas duas conectadas, que não atendem a todas as necessidades.
Countzero

Respostas:

7

O segmento de comentários iniciado aqui descreve uma solução alternativa eficaz. O MotoTribe estava vinculado ao mesmo segmento, mas no momento da sua pergunta, não havia exemplo de trabalho nessa página. Agora existe o seguinte:

No seu módulo, implemente hook_views_api():

function MODULENAME_views_api() {
  return array(
    'api' => 3,
  );
}

Em seguida, adicione um novo arquivo ao seu módulo chamado MODULENAME.views.inc e implemente hook_views_query_alter():

function MODULENAME_views_query_alter(&$view, &$query) {
  if ($view->name == 'whatever_your_view_is_called') {
    $query->where[0]['type'] = 'OR';
  }
}

Também esteja ciente desta advertência:

Aparentemente, o filtro "Conteúdo: publicado (Sim)" que acompanha todas as visualizações é considerado parte do mesmo grupo de filtros que os filtros contextuais (grupo 0). Portanto, para fazer minha exibição exibir apenas nós publicados que pertencem a qualquer um dos grupos especificados por filtros contextuais (publicado AND (arg1 OU arg2 OU ...)), tive que mover o "Conteúdo: Publicado (Sim)" para um novo grupo de filtros (usando a caixa de diálogo "E / ou reorganizar"). Observe que a interface do usuário não exibiu o filtro "Conteúdo: publicado (Sim)" de maneira diferente depois que eu o mudei para um novo grupo (não havia outros grupos), mas no objeto de consulta passado para hook_views_query_alter()ele foi movido do grupo 0 para o grupo 1, fazendo com que o código nas funções acima não o afete mais.

coredumperror
fonte
11
É melhor pelo menos parafrasear a relevância das referências à pergunta do OP. As respostas apenas ao link são desencorajadas porque os links podem não persistir.
Triskelion
@ Triskelion: Ah, você está absolutamente certo. Eu editei minha resposta para corrigir isso.
Coredumperror #
4

Existe um módulo que altera os manipuladores de Views para tornar os filtros contextuais a serem usados ​​com OR em vez de AND: Views Filters Contextual Filters OR

Sinan Erdem
fonte
Eu quero criar uma exibição com conteúdo de "usuário atual" + "Conteúdo de usuários sinalizados (o usuário atual sinalizou usando follow flag [user])" "
Umair
2

A situação com filtros contextuais e grupos de filtros é realmente sombria. Aqui está o tópico Do sobre este tópico, que tem a mesma solução conforme declarada por @CoreDumpError.

https://drupal.org/node/1451218

Além disso, aqui está um módulo que pode ajudar a resolver filtros contextuais e expostos em conflito ... Views Filter Harmonizer

doublejosh
fonte