Página 1 de 1

Busca pelos atributos [Resolvido]

Enviado: 17 Jul 2012, 16:24
por rdanna
Existe algum módulo free ou barato que inclua na busca os atributos do produto? Como tamanho, cor, etc...

Encontrei alguns, mas sem demo, pouco indicados. Ou alguns que criavam umas telas novas...

O que eu quero é que continue usando a mesma busca, mas se eu digitar, por exemplo 40, filtre pelos calçados que contenham numeração 40...

Re: Busca pelos atributos

Enviado: 18 Jul 2012, 10:52
por rdanna
Como não achei nenhum free, acabei fazendo na mão mesmo... menos complicado que eu imaginava.

No catalog/view/theme/LOJA/template/product/search.tlp repliquei o checkbox que tem para "busca na descrição" e renomeei para filter_option:
Código: Selecionar todos
<?php if ($filter_option) { ?>
    <input type="checkbox" name="filter_option" value="1" id="option" checked="checked" />
<?php } else { ?>
    <input type="checkbox" name="filter_option" value="1" id="option" />
<?php } ?>
<label for="option">Busca nas opções</label>
No catalog/controller/product/search.php repliquei todas as linhas onde usava filter_description e renomiei para filter_option... exemplo:
Código: Selecionar todos
if (isset($this->request->get['filter_description'])) {
	$filter_description = $this->request->get['filter_description'];
} else {
	$filter_description = '';
} 

if (isset($this->request->get['filter_option'])) {
	$filter_option = $this->request->get['filter_option'];
} else {
	$filter_option = '';
}
E no catalog/model/catalog/product.php, na function getProducts adicionei este código junto aos outros left joins :
Código: Selecionar todos
if (!empty($data['filter_option'])) { 			
    $sql .= " LEFT JOIN " . DB_PREFIX . "product_option_value pov ON (p.product_id = pov.product_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (pov.option_value_id = ovd.option_value_id)";
}
e este dentro do foreach ($words as $word), logo após o else do filter_description:
Código: Selecionar todos
if (!empty($data['filter_option'])) {
    $implode[] = "LCASE(ovd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
}
No resultado final, ficou um checkbox igual ao de "busca na descrição" mas para as opções do produto. :)

Re: Busca pelos atributos [Resolvido]

Enviado: 21 Jul 2012, 15:36
por preto
Bem interessante sua resolucao. Estou tentando fazer uma busca por um elemento que eu criei no banco, no caso é uma livraria e criei o campo autor. Ele fica na tabela Product. Tentei adaptar sua solucao mas nao consegui. Tem alguma sugestao?

Re: Busca pelos atributos [Resolvido]

Enviado: 15 Ago 2012, 09:48
por rdanna
Desculpa a demora, fiquei um poco parado aqui no fórum.

Para o seu problema adiciona essa linha:
Código: Selecionar todos
$implode[] = "LCASE(p.autor) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%'";
dentro do foreach ($words as $word), no arquivo catalog/model/catalog/product.php