Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite a todos,
No Front-End, na visualização de imóveis estou a fazer uns filtros de pesquisa e necessito de ajuda.
O que estou a desenvolver está visível nesta página de teste: http://andre-lc.webuda.com/index2.php
À frente do Total de imóveis a ideia será visualizar o total de imóveis da query de filtragem que se faz. Pois, ao escolher por exemplo por número de quartos, aqui o total irá variar.
1.Sei que é fazer um count, mas não estou a ver onde colocá-lo, até porque só depois aplico as querys e aqui inicialmente é que queria que aparecesse o respectivo total.
Depois a possibilidade de ordenar por preço, área útil ou tipologia tanto crescente como decrescente e por fim quantos imóveis por página o utilizador quer visualizar. Aqui tenho uma div a englobar os imóveis que por defeito "fica bem" com três imóveis, se escolher as outras opções de resultados: 5, 10, 20 ou 50 irá ultrapassar a div.
2. Como faço para que a div se adapte aos resultados?
3. Por defeito, a ideia inicial é quando se entra na página poder visualizar-se os imóveis ordenados por id, por ordem decrescente com limite de 3 imóveis por página e até aqui tudo bem. Posteriormente se se escolher uma opção no filtro, está a filtrar, mas quando se mexe na paginação dá problema porque volta ao select inicial. Sei que na query estou a fazer a consulta para mostrar todos os imóveis e que é daí, mas não estou a ver como interligar, pois se colocar a query de filtro retorna que a ordem, sentido e quant, não estão definidos. Como corrijo a paginação para que esteja certa de acordo com o filtro que se efectuou?
4.Quando se filtra, ao carregar no botão, a página faz refresh e a opção que se escolheu não fica seleccionada, como coloco-a com selected depois do refresh para que o utilizador possa ver o que seleccionou? Como é que filtro com botão e/ou sem botão (utilizando o onchange)?
O código que tenho (sem a paginação s/refresh à página para que seja mais fácil de perceber):
<?php
session_start();
if (count($_GET) == 0) {
unset($_SESSION['pesq']); // entrada na pagina pela 1 vez;
unset($_SESSION['nreg']);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Imóveis | Ver Imóveis</title>
<link rel="icon" type="image/x-icon" href="../favicon.ico" />
<link href="../css/template.css" rel="stylesheet" type="text/css" />
<link href="../css/pages.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="ajaxContent">
<form name="filtrar" action="<?php
echo $_SERVER['PHP_SELF'];
?>" method="POST">
<label>Total de imóveis: <?php
$total;
?> </label><br /><br />
<label>N.º de Quartos: </label>
<select name="quarto">
<?php
require 'config/connect.php';
$iselCats = "SELECT * FROM quartos";
$iqrCats = mysql_query($iselCats);
while ($ilinhaCat = mysql_fetch_array($iqrCats)) {
?>
<option value="<?php
echo $ilinhaCat['designacao'];
?>"><?php
echo $ilinhaCat['designacao'];
?></option><br/>
<?php
}
?>
</select>
<br /><br />
<label>Ordenar por:</label>
<select name="ordem">
<option value="preco">Preço</option>
<option value="area">Área</option>´
<option value="tipologia">Tipologia</option>
</select>
<select name="sentido">
<option value="asc">Crescente</option>
<option value="desc">Decrescente</option>
</select>
<br /><br />
<label>Imóveis p/ pág: </label>
<input type="radio" value="5" name="quant" id="5">5
<input type="radio" value="10" name="quant" id="10">10
<input type="radio" value="25" name="quant" id="25">20
<input type="radio" value="50" name="quant" id="50">50
<input type="hidden" name="accao" value="filtrar" />
<input type="submit" name="button" value="Filtrar"/> <br /><br />
</form>
<?php
//Área para visualizar os imóveis ordenados pelo id antes de filtrar
//inclusão da ligação com a BD
require("../config/connect.php");
//A quantidade de valor a ser exibida
$quantidade = 5;
//a pagina actual
$pagina = (isset($_GET['pagina'])) ? (int) $_GET['pagina'] : 1;
//Calcula a pagina de qual valor será exibido
$inicio = ($quantidade * $pagina) - $quantidade;
//$sql = "SELECT * FROM imoveis ORDER BY ID DESC LIMIT $inicio, $quantidade";if (!isset($_POST['accao'])) {
if (!isset($_SESSION['pesq'])) {
$sql = "SELECT * FROM imoveis ORDER BY id DESC LIMIT $inicio, $quantidade";
} else {
$sql = $_SESSION['pesq'] . " ORDER BY id LIMIT $inicio, $quantidade";
}
// echo $sql;
//Executa o SQL
$qr = mysql_query($sql) or die(mysql_error());
//Nr de Linhas retornado
//$total = mysql_num_rows($qr);
//Percorre os campos da tabela
while ($ln = mysql_fetch_assoc($qr)) {
$id = $ln['id'];
$id_para = $ln['id_para'];
$id_tipologia = $ln['id_tipologia'];
$id_categoria = $ln['id_categoria'];
$id_estado = $ln['id_estado'];
$area_util = $ln['area_util'];
$area_bruta = $ln['area_bruta'];
$area_terreno = $ln['area_terreno'];
$montante = $ln['montante'];
$id_distrito = $ln['id_distrito'];
$id_concelho = $ln['id_concelho'];
$id_freguesia = $ln['id_freguesia'];
$mini_descricao = $ln['mini_descricao'];
$Imagem1 = $ln['Imagem1'];
echo "<div class=\"area_reservada_pesquisa_txt1\">";
if ($Imagem1 != "") {
echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/$Imagem1' alt='' /></a>";
} else {
echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/default.png' alt='' /></a>";
}
echo "Tipo de Negócio: " . $negocio . "<br>";
echo "Estado: " . $id_estado . "<br>";
//echo "Estado: ".$id_estado." | Tipo de Negócio: (".$negocio.")<br>";
echo "Área útil: " . $area_util . " <label>m²</label><br>";
echo "Área Bruta: " . $area_bruta . " <label>m²</label><br>";
echo "Área Terreno: " . $area_terreno . " <label>m²</label><br>";
echo "Valor: " . $montante . " <label>€</label>";
echo "<br><br>";
echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
echo "</div>";
} //while?>
</div>
<!-- Área de Filtros -->
<?php
if (isset($_POST['accao']) && $_POST['accao'] == 'filtrar') {
switch (isset($_POST['ordem'])) {
case 'preco':
$ordem = "ORDER BY montante ";
break;
case 'area':
$ordem = "ORDER BY area_util ";
break;
case 'tipologia':
$ordem = "ORDER BY id_tipologia ";
break;
default:
$ordem = "ORDER BY id ";
}
switch (isset($_POST['sentido'])) {
case 'asc':
$sentido = "ASC ";
break;
case 'desc':
$sentido = "DESC ";
break;
default:
$sentido = "DESC ";
}
switch (isset($_POST['quant'])) {
case '5':
$quantidade = 5;
break;
case '10':
$quantidade = 10;
break;
case '25':
$quantidade = 25;
break;
case '50':
$quantidade = 50;
break;
default:
$quantidade = 5;
}
if (!empty($_POST['quarto'])) {
$quarto = " WHERE id_quarto = '" . $_POST['quarto'] . "' ";
} else {
$quarto = "";
}
$sql = "SELECT * FROM imoveis $quarto $ordem $sentido LIMIT $quantidade";
echo $sql;
//Executa o SQL
$qr = mysql_query($sql) or die(mysql_error());
//Nr de Linhas retornado
$total = mysql_num_rows($qr);
//Percorre os campos da tabela
$contador = 0;
while ($ln = mysql_fetch_assoc($qr)) {
$id = $ln['id'];
$id_para = $ln['id_para'];
$id_tipologia = $ln['id_tipologia'];
$id_categoria = $ln['id_categoria'];
$id_estado = $ln['id_estado'];
$area_util = $ln['area_util'];
$area_bruta = $ln['area_bruta'];
$area_terreno = $ln['area_terreno'];
$montante = $ln['montante'];
$id_distrito = $ln['id_distrito'];
$id_concelho = $ln['id_concelho'];
$id_freguesia = $ln['id_freguesia'];
$mini_descricao = $ln['mini_descricao'];
$Imagem1 = $ln['Imagem1'];
$contador++;
if ($contador > $quantidade)
break;
echo "<div class=\"area_reservada_pesquisa_txt1\">";
if ($Imagem1 != "") {
echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/$Imagem1' alt='' /></a>";
} else {
echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/default.png' alt='' /></a>";
}
echo "Tipo de Negócio: " . $negocio . "<br>";
echo "Estado: " . $id_estado . "<br>";
//echo "Estado: ".$id_estado." | Tipo de Negócio: (".$negocio.")<br>";
echo "Área útil: " . $area_util . " <label>m²</label><br>";
echo "Área Bruta: " . $area_bruta . " <label>m²</label><br>";
echo "Área Terreno: " . $area_terreno . " <label>m²</label><br>";
echo "Valor: " . $montante . " <label>€</label>";
echo "<br><br>";
echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
echo "</div>";
}
?>
<!-- Paginação -->
<div class="pesquisa_page">
<?php
/* Sei que é daqui o "problema" porque estou a mostrar todos os imóveis
Mas como interligo isto aqui?
Se colocar a query de filtro retorna que o post de ordem, sentido e quant, não estão definidos!
*/
$sqlTotal = "SELECT * FROM imoveis";
//echo $sqlTotal;
//Executa o SQL
$qrTotal = mysql_query($sqlTotal) or die(mysql_error());
//Total de Registos na tabela
$numTotal = mysql_num_rows($qrTotal);
//Calculo do Total de páginas a serem exibidas
$totalPagina = ceil($numTotal / $quantidade);
//Defini o valor máximo a ser exibido na página tanto para a direita como para a esquerda
$exibir = 5;
//Pagina Anterior - Caso o valor seja zero, por padrão ficará o valor 1
$anterior = (($pagina - 1) == 0) ? 1 : $pagina - 1;
//Pagina Seguinte - Caso a pagina +1 for maior ou igual ao total, terá o valor do total
//caso contrario fica com o valor da página + 1
$posterior = (($pagina + 1) >= $totalPagina) ? $totalPagina : $pagina + 1;
//Primeira Página e Anterior
echo '<a href="?pagina=1">Primeira</a> | ';
echo "<a href=\"?pagina=$anterior\">Anterior</a> | ";
//Exibe (expande) as páginas à esquerda
for ($i = $pagina - $exibir; $i <= $pagina - 1; $i++) {
if ($i > 0)
echo '<a href="?pagina=' . $i . '"> ' . $i . ' </a>';
}
//Pagina actual
echo '<a href="?pagina=' . $pagina . '"><strong><font color=#BC202C>' . $pagina . '</font></strong></a>';
//Exibe (expande) as páginas à direita
for ($i = $pagina + 1; $i < $pagina + $exibir; $i++) {
if ($i <= $totalPagina)
echo '<a href="?pagina=' . $i . '"> ' . $i . ' </a>';
}
//Proxima e Ultima Pagina
echo " | <a href=\"?pagina=$posterior\">Seguinte</a> | ";
echo " <a href=\"?pagina=$totalPagina\">Última</a>";
?>
</div>
</body>
</html>
Obrigado pela vossa ajuda e atenção.
Podem dar uma vista de olhos, por favor?
Obrigado.
Carregando comentários...