Pesquisa com views

Events happening in the community are now at Drupal community events on www.drupal.org.
sliderf's picture

Olá pessoal,

Estou com mais um problema e não sei como resolver.
Quero fazer uma pesquisa e estou a usar as views para isso. A ideia é criar duas text fields com apenas um botão e temos de preencher no mínimo uma text field. Até aqui tudo bem. O meu problema é se preencho mais que um text field. Eu quero que seja uma pesquisa "independente". Cada text field pesquise num conteúdo diferente .
Na view coloquei os filtros que quero com expose mas a query resultante no WHERE fica com AND, bastava que tivesse OR que funcionava como quero. Como posso alterar o AND para OR?

Exemplo da query resultante

SELECT node.nid AS nid,
node.title AS node_title
FROM {node} node
LEFT JOIN {content_type_locais} node_data_field_nomelocal ON node.vid = node_data_field_nomelocal.vid
LEFT JOIN {content_type_empresa} node_data_field_nomeempresa ON node.vid = node_data_field_nomeempresa.vid
WHERE (node.type in ('%s', '%s')) AND (UPPER(node_data_field_nomelocal.field_nomelocal_value) = UPPER('%s')) AND (node_data_field_nomeempresa.field_nomeempresa_value = %s)

Sem mais...
Filipe Pinto

Comments

Podes alterar o conteudo da

ziomizar's picture

Podes alterar o conteudo da query com o hook _views_pre_execute :

function custommodule_views_pre_execute(&$view){
if($views->name == 'myviews'){
$view->build_info['query'] = str_replace('AND', 'OR', $view->build_info['query']);
}
}
Na views 3 dev acho que è $view->query->final_query.

Ma acho que è mais simples usar o ordinamento dos filtros, e mudar para OR

Coloco esse código no

sliderf's picture

Coloco esse código no template.php ?

Quando dizes "Ma acho que è mais simples usar o ordinamento dos filtros, e mudar para OR" como faço isso? não vi nenhuma opção para alterar para OR.
Desculpem as perguntas básicas mas comecei à muito pouco tempo com o Drupal

Sem mais...
sliderf

Desculpem as perguntas

ziomizar's picture

Desculpem as perguntas básicas mas comecei à muito pouco tempo com o Drupal... hem.. nao percebei isso :P.

Na views perto do "+" para addicionar um filtro fica um otra opção com duas seta, seria a opção para ordenar os filtros.
Mais dos ordenamento podes mudar o AND para OR com o menu dropdown.


Para o codigo que colei, precisas de fazer um modulo.

//O file mudarparaor.info
; $Id : yourname v 0.1 $
name = mudarparaor
description = descriçao do modulo
core = 6.x

//o file mudarparaor.module
function mudarparaor_views_pre_execute(&$view){
if($views->name == 'myviews'){
$view->build_info['query'] = str_replace('AND', 'OR', $view->build_info['query']);
$view->build_info['count_query'] = str_replace('AND', 'OR', $view->build_info['query']); //isso è para o número de resultados
}
}

Deve ser feita uma pasta "mudarparaor" logo, colocar a pasta entre os módulos, e activar-lo da o menu de admin (/admin/build/modules).
Eu não testei o código.. mais o meno è isso.

Tive um problema semelhante

paulo_graca's picture

Tive um problema semelhante para um projecto que está neste momento online - Raftt.pt.

Precisava usar o Form de pesquisa das views em que num campo (search by keyword), pesquiso em 2 lugares distintos, no body e no title do post.

A solução...

Usei o módulo Views Or (drupal.org/project/views_or) para fazer a pesquisa com critérios conjuntos e criei os 2 filtros na view. Um é exposto no formulário, o outro não. O que não é exposto no formulário é manipulado por um módulo que criei que basicamente define o valor default do filtro como sendo igual ao do outro que está exposto.
Funcionou para mim!

Na views 3 acho que nao

ziomizar's picture

Na views 3 acho que nao precisas do módulo views_or porquè isso jà està entegrado.

Para fazer a pesquisa em dois lugares distintos pelo mesmo campo, usei o módulo drupal.org/project/computed_field, criei um campo novo no type cck (computed) e colei este codigo :

$node_field[0]['value'] = strip_tags($node->title . " " . $node->body);

depois na views criei so um filtro que pesquisa in este campo.

Isso è mais simple mas usa mais espaço.

Boas. Obrigado pessoal pela

sliderf's picture

Boas.
Obrigado pessoal pela ajuda. Eu estava a usar as views 2 por isso é que não estava a ver a opção do OR/And nos filtros. Obrigada ziomizar pela dica.
Ao mudar para as views 3 resolveu-me o problema anterior mas criou-me outro problema. A opção do exposed block desapareceu(pelo menos não encontro). Como posso colocar num bloco os filtros exposed? Tentei criar uma view block mas os filtros não ficam exposed.
Outro problema é os resultados na primeira vez, aparecem logo todos e só depois de preencher os campos da pesquisa é que ele filtra, a primeira execução mostra sempre os mesmos resultados. Será por eu ter escolhido nos filtros contain any word e ele pesquisar os campos com palavras vazias e por isso mostra tudo?

Sem mais...
sliderf

Olà sliderf, podes fazer

ziomizar's picture

Olà sliderf, podes fazer assim por o primeiro problema (os filtros no bloco):

STEP 1.
Quando crias um filtro, na configuraçoes do filtro, hà um botão para visualizar os filtros (exposed).

STEP 2.
Na "configuraçao base" da views hà

"Form exposed no bloco: No"

deve ser

"Form exposed no bloco: Sim"

STEP 3.
admin/build/block podes buscar o bloco da views.

Para o segundo problema , sim.. na primeira execuçao mostra tudo porquè os filtros estam vazios e têm as opçoes de default.

Boas, Sem fugir ao tópico,

Kusco's picture

Boas, Sem fugir ao tópico, acho se fugir as minhas desculpas.

É seguro usar uma versão alfa num site que está ja no ar?

Obrigado