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?


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.


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


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.