Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DannyND

Filtros em busca de ecommerce

Recommended Posts

Galera, reabri esse tópico porque estou com uma grande dúvida rs

 

Estrou criando um sistema de filtros avançados para ecommerce, mas como faço o GET da faixa de valores de produtos:

 

Exemplo: produtos com valores entre R$49,50 a R$ 379,40 e R$ 379, 41 até R$ 709,30

Variáveis na URL

http://servidor/busca.php?precos=379.41:709.3|49.5:379.4

Como posso enviar "379.41:709.3|49.5:379.4" para o select?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Você não entendeu rsrsrs

Eu só consigo enviar uma variavel pelo link .. não consigo mandar uma, guardar e depois mandar outra rsrs.. como faço isso? tá osso

 

Você pode sim utilizar mais de um dado por link, exemplo:

link: index.php?id=123&nome=backon

echo $_GET['id']; //Saída 123
echo $_GET['nome']; //Saída backon

Você também pode trabalhar com Sessões para armazenar as pesquisar (y)

 

edit

-----------------

 

Só para esclarecer, a busca do submarino é feito em php juntamente com o ajax. Aquele "quadrado" que abre ao digitar a palavra é consequência do script que foi feito em Ajax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, reabri esse tópico porque estou com uma grande dúvida rs

 

Estrou criando um sistema de filtros avançados para ecommerce, mas como faço o GET da faixa de valores de produtos:

 

Exemplo: produtos com valores entre R$49,50 a R$ 379,40 e R$ 379, 41 até R$ 709,30

Variáveis na URL

http://servidor/busca.php?precos=379.41:709.3|49.5:379.4

Como posso enviar "379.41:709.3|49.5:379.4" para o select?

 

BETWEEN

 

mysql set double 10,2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que preciso usar o between, o que preciso é "explodir" e "implodir" esses dados da forma correta para entrar no between.

 

 

Galera.. alguém sabe como acumular GET na URL?

 

Exemplo: =27:100|109:299&common_filter%5BAtributos%5D=Usb|Portátil]://busca.submarino.com.br/busca.php?q=samsung&range_filter[Preço]=27:100|109:299&common_filter%5BAtributos%5D=Usb|Portátil

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui passar as informações bia GET, agora preciso bolar uma forma de marcar no checkbox o que está na URL.

 

filtros.png

<?php
include "sistema/funcoes/conexao.php";
include "sistema/funcoes/funcoes.php";

$inputString = "samsung";

$subgruposb  = $_GET['common_filter']['subgrupo'];
$especificab = $_GET['common_filter']['especifica'];

print "subgrupob: ".$subgruposb."<br>";
print "especificab: ".$especificab."<p>";

print "explode/implode para select<br>";
$subgruposc  = explode("|",$subgruposb);
$especificac = explode("|",$especificab);

$subgruposd  = implode(",",$subgruposc);
$especificad = implode(",",$especificac);

print "subgrupod: ".$subgruposd."<br>";
print "especificad: ".$especificad."<p>";

$sql = "select * from ti_produtos where cd_subgrupo in('".$subgruposd."') and ds_espec in('".$especificad."') ";
print $sql;

?>
<p>
<div id="geral">
<div class="coluna_1">
<!--FILTOS-->
<span class="titulo_menu">Filtros</span>

<ul id="menu_int">
	<li>Sub-Grupos
	<?
	#retorna subgrupos
	conecta();
	$querys = "SELECT p.cd_produto,p.cd_subgrupo FROM ti_produtos as p,ti_subgrupos as s where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_subgrupo=s.cd_subgrupo and p.nm_produto like '%samsung%' group by p.cd_subgrupo";
	$chamadas = mysql_query($querys);
	?>
		<form>
		<ul class="filto">
		<?
		while($subgrupos = mysql_fetch_array($chamadas)):
			$qtdests = est_subgrupo($subgrupos[cd_subgrupo]);

			if(isset($subgruposb)):
				$conds = "|".$subgruposb;
			endif;
			?>
			<li>
				<a href="teste_busca.php?inputString=<?=$inputString?>&common_filter[subgrupo]=<?=$subgrupos[cd_subgrupo].$conds?>">
					<IMG SRC="images/check_filtro.png" BORDER="0" ALT="">
				<span><?=ds_subgrupo($subgrupos[cd_subgrupo])?> (<?=$qtdests?>) <?=" - "."cod. ".$subgrupos[cd_subgrupo]?></span></a>
			</li>

		<?endwhile;?>
		</ul>
		</form>
	</li>
</ul>

<ul id="menu_int">
	<li>Especificações
	<?
	#retorna especificações
	$queryes = "SELECT p.cd_itprod,p.cd_grupo,p.ds_espec FROM ti_produtos as p,ti_grupos as es where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_grupo=es.cd_grupo and p.nm_produto like '%samsung%'  group by p.cd_grupo";
	$chamadaes = mysql_query($queryes);
	?>
		<ul  class="filto">
		<?
		while($especifica = mysql_fetch_array($chamadaes)):
			$qtdestes = est_especifica($especifica[cd_grupo]);
			$ds_espec = $especifica['ds_espec'];

			if(isset($especificab)):
				$condes = "|".$especificab;
			endif;
			?>				 
			<li>
				<a href="teste_busca.php?inputString=<?=$inputString?>&common_filter[subgrupo]=<?=$subgruposb?>&common_filter[especifica]=<?=$especifica[cd_grupo].$condes?>">
					<IMG SRC="images/check_filtro.png" BORDER="0" ALT="">
				<span><?=$ds_espec?> (<?=$qtdestes?>)</span></a>
			</li>
		<?endwhile;?>
		</ul>
	</li>
</ul>

</div>
</div>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito. A primeira coisa: com PHP, você pode já tornar variáveis de post/get de mesmo nome em arrays sem precisar de explode:

 

 

/meuteste.php?var[]=primeiro&var[]=segundo&var=[]terceiro

 

Ou:

 

 

<form action="meuteste.php" method="get">
    <input name="var[]"><br>
    <input name="var[]"><br>
    <input name="var[]"><br>
    <input name="var[]"><br>
    <button type="submit">Testar!</button>
</form>

 

meuteste.php

 

<?php
 
var_dump($_GET);

 

Isso posto, não sei como está seu formulário, mas você poderia formular o filtro de categorias da seguinte forma:

 

 

<?php
 
$categorias = array(
    array('id' => 1, 'nome' => 'eletrodomésticos'),
    array('id' => 2, 'nome' => 'computadores e periféricos'),
    array('id' => 3, 'nome' => 'celulares')
);
 
?>
<fieldset>
    <legend>Categoria</legend>
    <ul>
        <?php foreach($categorias as $categoria): ?>
        <li>
            <label for="categ-<?php echo $categoria['nome']; ?>">
                <input value="<?php echo $categoria['id']; ?>" id="categ-<?php echo $categoria['nome']; ?>" <?php echo in_array($categoria['id'], $_GET['categorias']) ? "checked" : ""?> type="checkbox" name="categorias[]">
                <?php echo $categoria['nome']; ?>
            </label>
        </li>
       <?php endforeach; ?>
    </ul>

 

básico sobre PDO:

 

 

// conexão com MySQL
 
$conn = new PDO("mysql:host=IP-do-host;dbname=Nome-do-Banco", "usuario", "senha");
 
// Em PDO, é comum trabalharmos com um conceito chamado prepared statements
 
$stmt = $conn->prepare("select * from tabela where campo = ?");
 
$stmt->execute(array("valor_do_campo"));
 
var_dump($stmt->fetchAll());

 

Então vamos quebrar o processo em dois passos:

  • A montagem da consulta preparada
  • A passagem dos valores

 

O básico da consulta você já sabe...

 

 

$sql = "select id, descricao, foto from produto";

 

Conforme formos tendo critérios no nosso filtro, devemos montar a consulta desses critérios e armazenar os valores que serão passados para a consulta preparada:

 

 

$criteria = array();
$replacements = array();
 
if (isset($_GET['categorias']) and sizeof($_GET['categorias'])) {
    $criteria[] = sprintf("categoria in (%s)", str_pad("", sizeof($_GET['categorias']) * 3 - 2, "?, ")));
    $replacements = array_merge($replacements, $_GET['categorias']);
}
 
if (isset($_GET['valores-min']) and sizeof($_GET['valores-min'])
    and isset($_GET['valores-max']) and sizeof($_GET['valores-max']) {
    foreach ($_GET['valores-min'] as $key=>$initial) {
        $final = $_GET['valores-max'][$key];
        $values_criteria[] = "valor between ? and ?";
        $replacements = array_merge($replacements, array($initial, $final));
    }
    $criteria[] = sprintf("(%s)", join(" or ", $values_criteria));
}
 
// para entender os critérios que temos montados até aqui:
print_r($criteria);
 
// se tivermos critérios, acrescentamos na consulta:
if (sizeof($criteria)) {
    $sql .= " where " . join(" and ", $criteria);
}
 
// para checar se a consulta foi montada conforme o esperado:
echo $sql;
 
$stmt = $pdo->prepare($sql);
$stmt->execute($replacements);
var_dump($stmt->fetchAll());
 

 

Acho que por ora é isso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou fazer uns testes.. valeu =D

 

 

Consegui da forma abaixo, porém não sei como fazer para limpar apenas um dos itens selecionados.

<?phpinclude "sistema/funcoes/conexao.php";include "sistema/funcoes/funcoes.php";$inputString = "samsung"; #teste para texto digitado$subgruposb  = $_GET['common_filter']['subgrupo'];$especificab = $_GET['common_filter']['especifica'];$subgruposc  = explode("|",$subgruposb);$especificac = explode("|",$especificab);$subgruposd  = implode(",",$subgruposc);$especificad = implode(",",$especificac);if(isset($subgruposb)):	$condSubg   = " and cd_subgrupo in ('".$subgruposd."') ";	$condSugb_l = "&common_filter[subgrupo]=$subgruposb";endif;if(isset($especificab)):	$condEspec = " and cd_grupo in ('".$especificad."') ";	$condEspec_l = "&common_filter[especifica]=$especificab";endif;$sql = "select * from ti_produtos where nm_produto like '%$inputString%' ".$condSubg." ".$condEspec." ";print "montando a query: ".$sql;?><p><div id="geral"><div class="coluna_1"><!--FILTOS--><span class="titulo_menu">selecionados</span><br><?conecta();$subgs = explode(",", $subgruposd);$conta_subgs = count($subgs);for($i=0; $i < $conta_subgs; $i++){	if($subgs[$i] <> ''){		echo ds_subgrupo($subgs[$i])." <A HREF='#'>x</A>"."<br>";	}}$especs = explode(",", $especificad);$conta_especs = count($especs);for($i=0; $i < $conta_especs; $i++){	if($especs[$i] <> ''){		echo ds_grupo($especs[$i])." <A HREF='#'>x</A>"."<br>";	}}?><A HREF="teste_busca.php?inpuString=samsung">limpar selecionados</A><p><span class="titulo_menu">Filtros</span><ul id="menu_int">	<li>Sub-Grupos	<?	#retorna subgrupos	conecta();	$querys = "SELECT p.cd_produto,p.cd_subgrupo FROM ti_produtos as p,ti_subgrupos as s where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_subgrupo=s.cd_subgrupo and p.nm_produto like '%samsung%' group by p.cd_subgrupo";	$chamadas = mysql_query($querys);	?>		<form>		<ul class="filto">		<?		while($subgrupos = mysql_fetch_array($chamadas)):			$qtdests = est_subgrupo($subgrupos[cd_subgrupo]);			if(isset($subgruposb)):				$conds = "|".$subgruposb;			endif;			?>			<li>				<a href="teste_busca.php?inputString=<?=$inputString.$condEspec_l?>&common_filter[subgrupo]=<?=$subgrupos[cd_subgrupo].$conds?>">								<IMG SRC="images/check_filtro.png" BORDER="0" ALT="">				<span><?=ds_subgrupo($subgrupos[cd_subgrupo])?> (<?=$qtdests?>) <?=" - "."cod. ".$subgrupos[cd_subgrupo]?></span></a>			</li>		<?endwhile;?>		</ul>		</form>	</li></ul><ul id="menu_int">	<li>Especificações	<?	#retorna especificações	$queryes = "SELECT p.cd_itprod,p.cd_grupo,p.ds_espec FROM ti_produtos as p,ti_grupos as es where p.id_status='A' and p.venda_proibida='N' and p.cd_grupo!='0' and p.cd_grupo=es.cd_grupo and p.nm_produto like '%samsung%'  group by p.cd_grupo";	$chamadaes = mysql_query($queryes);	?>		<ul  class="filto">		<?		while($especifica = mysql_fetch_array($chamadaes)):			$qtdestes = est_especifica($especifica[cd_grupo]);			$ds_espec = ds_grupo($especifica['cd_grupo']);			if(isset($especificab)):				$condes = "|".$especificab;			endif;			?>				 			<li>				<a href="teste_busca.php?inputString=<?=$inputString.$condSugb_l?>&common_filter[especifica]=<?=$especifica[cd_grupo].$condes?>">					<IMG SRC="images/check_filtro.png" BORDER="0" ALT="">				<span><?=$ds_espec?> (<?=$qtdestes?>)</span></a>			</li>		<?endwhile;?>		</ul>	</li></ul></div></div>

Resultado:

filtros.png

 

 

Vou fechar esse tópico e abrir outro com essa questão. Obrigada à todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.