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

Portugal

Group categories

Classificação

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: