Jump to content

[Resolvido] "Paginação" ficha de contactos


PF2G

Recommended Posts

Boa tarde,

Eu estou a fazer uma página de contactos, onde só tenho a localidade de Ermesinde e gostaria de acrescentar em Lisboa.

O meu objectivo é fazer da seguinte maneira: abrimos a página 'como_chegar' e automaticamente abre a localidade de Ermesinde (default), e no título do aparecer um link que diga Lisboa e nos redireccione para a página com os contactos de Lisboa, Será que fui esclarecedor?

Aqui fica o código, que tenho. Estou é com algumas dificuldades em implementar o case para cada localidade, visto que posso adicionar, certo.

<?php
switch ($page){
case 'como_chegar':

$result_content=mysql_query("SELECT e.id, e.url, el.titulo, el.contactos FROM escritorios as e, escritorios_lang as el
 WHERE e.id = el.id_escritorio AND
 el.lang='$current_lang' AND e.visivel=1 AND el.visivel=1
 GROUP BY el.lang");
$num_rows_content = mysql_num_rows($result_content);
$conta_rows_content = 1;
$content = "";

if($num_rows_content >0){
 $content .=  "<div class='content_page'>";
 $content .=  "<div class='content_page_top'></div>";

 $content .=  "<div class='content_page_center'>";

 while($row_content = mysql_fetch_object($result_content)){
  $pageTitle = "COMO CHEGAR | ". $row_content->titulo;
  $content .= "<h1 class='title'>".$pageTitle." <div style='margin-top:-20px; text-align:right;'><a href='como_chegar/".echo $url_contact."'> LISBOA &gt </a></h1>";
  $content .= "<div class='content_description'>".$row_content->contactos."</div>";
 }
 $content .=  "<div class='bottom_links'><ul><li><a href='$current_lang/$module/form'>< CONTACTOS</a></li></ul></div>";
 $content .=  "<br/></div>";
 $content .=  "<div class='content_page_bottom'></div>";
 $content .=  "</div>";  
 echo $content;

}else{
 header("Status: 404 Not Found");
 header( "Location: ".$url."/".$current_lang."/pages/error/404" );
 die();
}
break;
case 'form':
$result_content=mysql_query("SELECT c.id, cl.titulo, cl.descricao FROM `contactos` as c, `contactos_lang` as cl
 WHERE c.id = cl.id_contacto AND
 cl.lang='$current_lang' AND c.visivel=1 AND cl.visivel=1
 GROUP BY cl.lang");
$num_rows_content = mysql_num_rows($result_content);
$conta_rows_content = 1;
$content = "";

if($num_rows_content >0){
 $content .=  "<div class='content_page'>";
 $content .=  "<div class='content_page_top'></div>";

 $content .=  "<div class='content_page_center'>";

 while($row_content = mysql_fetch_object($result_content)){
  $pageTitle = "CONTACTOS";
  $content .= "<h1 class='title'>".$pageTitle."</h1>";
  $content .= "<div class='content_description'>
    <div class='fltlft'>
 <p>
 Travessa Monte Bela 55 – Armazém O<br />
 4445-450 Ermesinde<br />
 Portugal
 </p>
 <p>
 <b>Telefone:</b> 229 882 039<br />
 <b>Telemóvel:</b> 961 028 382<br />
 <b>Fax:</b> 224 860 819<br />
 <b>E-mail:</b> <a href='mailto:geral@af-reabilitacao.com' target='_blank'>geral@af-reabilitacao.com</a>
 </p>
 </div>
 <div class='fltlft' style='width:355px;margin-right:0px;'>
  <form id='contactos' onsubmit='return false' action=''>

   <input type='hidden' value='contacts' name='action'>
   <input type='hidden' value='$current_lang' id='info[lang]' name='info[lang]'>

   <input type='text' name='info[nome]' id='nome' value='' placeholder='Nome' class='validate[required] small_text' />
   <input type='text' name='info[email]' id='email' value='' placeholder='E-mail' class='validate[required,custom[email]] small_text'/>
   <input type='text' name='info[telemovel]' id='telemovel' value='' placeholder='Telémovel' class='validate[required,custom[phone]] small_text'/>

   <textarea name='info[obs]' id='obs' class='validate[required]' placeholder='Escreva aqui a sua mensagem...'></textarea>
   <input type='submit' value='ENVIAR' /><input type='reset' value='LIMPAR' />
  </form>
 </div>
 <div class='clearfloat'></div>
 <div class='bottom_links'><ul><li><a href='$current_lang/$module/como_chegar'>COMO CHEGAR ></a></li></ul></div>
  </div>";
 }
 $content .=  "<br/></div>";
 $content .=  "<div class='content_page_bottom'></div>";
 $content .=  "</div>";  
 echo $content;

}else{
 header("Status: 404 Not Found");
 header( "Location: ".$url."/".$current_lang."/pages/error/404" );
 die();
}
break;
default:
header("Status: 404 Not Found");
header( "Location: ".$url."/".$current_lang."/pages/error/404" );
die();
break;
}
?>

Espero que me possam ajudar.

Obrigado,

PF2G

Link to comment
Share on other sites

Sim.

Eu tenho a página dos contactos com a localidade da empresa em Ermesinde...e agora quero acrescentar outra empresa noutra localidade (Lisboa).

A maneira como estou a pensar fazer é fazer um switch case ao url (que esta na base de dados) que me redireccione para as informações respetivas à localidade.

Por exemplo o url da localidade Ermesinde é 'ermesinde' e o de Lisboa é 'lisboa'.

O que me está a confundir é como é que vou fazer o case, visto que posso adicionar mais localidades...

Link to comment
Share on other sites

não sei bem se percebi mas ok

colocas por exemplo uma dropdownlist com as localidades(url, o que lhes quiseres chamar) todas e um botao para fazer submit.

depois ao ser feito o submit vais fazer o select

$sql ='SELECT e.id, e.url, el.titulo, el.contactos FROM escritorios as e, escritorios_lang as el
WHERE e.id = el.id_escritorio AND
el.lang='$current_lang' AND e.visivel=1 AND el.visivel=1
AND e.url = '.$_POST['url'].'
GROUP BY el.lang';
Edited by MASNathan
Link to comment
Share on other sites

Esperem, deixem-me ver se consigo explicar melhor...

Neste código tenho a paginação de noticias:

<?php
switch ($page){


  case (is_numeric($page) || $page == "all"):
    //Blocos dos clientes
 $pageTitle = "NOTÍCIAS";

 //$breadcrumbContents = '<a href="/'.$current_lang.'">Início</a> ? <a href="/'.$current_lang.'/clients/all">Clientes</a>';

    echo "<div class='content_page'>";
 echo "<div class='content_page_top'></div>";

 echo "<div class='content_page_center'>";

 echo "<h1 class='title' style='margin:0 15px 8px'>".$pageTitle."</h1>";

  if($page == "all")
  $page = 0;


 $page_min = $page * 3;

 $page_max = 3;

    $result_clients = mysql_query("SELECT * FROM noticias_lang
				    WHERE lang='$current_lang' AND visivel=1
				    ORDER BY id DESC LIMIT $page_min, $page_max");
    $num_rows_clients = mysql_num_rows($result_clients);
    $conta_rows_clients = 1;
    echo "<ul class='clients_partners'>";	   
    while($row=mysql_fetch_object($result_clients)){
   $posicao_projecto = $row->id;
    echo "<li";
    if($conta_rows_clients == 1)
		    echo ' class="first"';
    if($conta_rows_clientes == $num_rows_clients)
		    echo ' class="last"';
   echo ">";

  echo '<div class="details">';
   echo '<label class="titulo"><a href="noticia_completa/'. $row->id .'">'. $row->titulo .'</a></label>';
   echo '<div class="descricao">'.substr(strip_tags($row->resumo), 0, 400);
 if(strlen(strip_tags($row->resumo)) > 400)  echo "(...)";
   '</div>';

  echo '</div>';
  echo '<div class="clearfloat"></div>';
    echo "</li>";
    $conta_rows_clients++;
    }
    echo "</ul>";

 $result_max_content=mysql_query("SELECT COUNT(*) AS num_rows FROM noticias_lang
				    WHERE lang='$current_lang' AND visivel=1");

   $row_max_content = mysql_fetch_object($result_max_content);



   $num_rows = $row_max_content->num_rows;


 echo "<div class='bottom_links'><ul>";


   $anterior_posicao = $page-1;

   if($anterior_posicao == 0)
  $anterior_posicao = "all";

   $seguinte_posicao = $page+1;


   if($page == 0){
  echo "<li>< ANTERIOR</li>";
   }else{
  echo "<li><a href='$current_lang/$module/$anterior_posicao'>< ANTERIOR</a></li>";
   }

   if($num_rows <= $page_min+$page_max)
  echo "<li>SEGUINTE ></li>";
   else{
  echo "<li><a href='$current_lang/$module/$seguinte_posicao'>SEGUINTE ></a></li>";
   }

   echo "</ul><div class='clearfloat'></div></div>";

 echo "</div>";
   echo "<div class='content_page_bottom'></div>";
 echo "</div>";  
    //fim dos blocos dos clientes

   break;
default:
 header("Status: 404 Not Found");
 header( "Location: ".$url."page/404" );
 die();
break;
}
?>

Certo?

Agora, quero fazer quase a mesma coisa só que em vez de seguinte/anterior quero ter o nome da localidade com o (id_local_atual + 1), isto se o id_atual=1, se não aparece o nome da localidade onde (id_local_atual - 1) e a localidade (id_local_atual + 1). No caso de ser o ultimo resultado mostra só a localidade (id_local_atual - 1).

Fica aqui o código, das localidades:

case 'como_chegar':

$result_content=mysql_query("SELECT e.id, e.url, el.titulo, el.contactos FROM escritorios as e, escritorios_lang as el
 WHERE e.id = el.id_escritorio AND
 el.lang='$current_lang' AND e.visivel=1 AND el.visivel=1
 GROUP BY el.lang");
$num_rows_content = mysql_num_rows($result_content);
$conta_rows_content = 1;
$content = "";

if($num_rows_content >0){
 $content .=  "<div class='content_page'>";
 $content .=  "<div class='content_page_top'></div>";

 $content .=  "<div class='content_page_center'>";

 while($row_content = mysql_fetch_object($result_content)){
  $pageTitle = "COMO CHEGAR | ". $row_content->titulo;
  $content .= "<h1 class='title'>".$pageTitle." <div style='margin-top:-20px; text-align:right;'><a href='como_chegar/lisboa'> LISBOA &gt </a></h1>";
  $content .= "<div class='content_description'>".$row_content->contactos."</div>";
 }
 $content .=  "<div class='bottom_links'><ul><li><a href='$current_lang/$module/form'>< CONTACTOS</a></li></ul></div>";
 $content .=  "<br/></div>";
 $content .=  "<div class='content_page_bottom'></div>";
 $content .=  "</div>";  
 echo $content;

}else{
 header("Status: 404 Not Found");
 header( "Location: ".$url."/".$current_lang."/pages/error/404" );
 die();
}
break;

Está melhor?

Link to comment
Share on other sites

Há algum problema com este código?

while($row_content = mysql_fetch_object($result_content))
 {
  /* nro total de rows */
  $query_posicao = mysql_query("SELECT posicao FROM escritorios");
  $total_posicao = mysql_num_rows($query_posicao);
  /* /nro total de rows */

  $posicao_atual=mysql_query("SELECT posicao FROM escritorios WHERE id='".$row_content->id."'");
  $posicao=mysql_fetch_assoc($posicao_atual);

  $posicao_prv=$posicao['posicao']-1;

  if ($posicao_prv<0)
  {
$posicao_prv=$posicao-$total_posicao;
$posicao_ant=$posicao_prv-1;
  }

  $query_previous=mysql_query("SELECT * FROM escritorios WHERE posicao='".$posicao_prv."'") or die (mysql_error());
  $previous=mysql_fetch_assoc($query_previous);

  $query_prv_titulo=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$previous['id']."'") or die(mysql_error());
  $prv_titulo=mysql_fetch_assoc($query_prv_titulo);

  ////////////////////////////////
  $id_nxt=$posicao + 1;
  $query_next=mysql_query("SELECT * FROM escritorios WHERE id='".$id_nxt."'") or die (mysql_error());
  $next=mysql_fetch_assoc($query_next);

  $query_nxt_titulo=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$next['id']."'") or die(mysql_error());
  $nxt_titulo=mysql_fetch_assoc($query_nxt_titulo);

  $pageTitle = "COMO CHEGAR | ". $row_content->titulo;
  $content .= "<h1 class='title'>".$pageTitle." <div style='margin-top:-15px; text-align:right;><a href='$current_lang/$module/como_chegar/".$previous['url']."'> &lt ".$prv_titulo['titulo']."</a>  <a href='$current_lang/$module/como_chegar/".$next['url']."'> ".$nxt_titulo['titulo']." &gt </a> </div>  </h1>";
  $content .= "<div class='content_description'>".$row_content->contactos."</div>";
 }
 $content .=  "<div class='bottom_links'><ul><li><a href='$current_lang/$module/form'>< CONTACTOS</a></li></ul></div>";

Está-me a dar erro:

Fatal error: Unsupported operand types in C:\wamp\www\www.af-reabilitacao.com\pages\contacts.php on line 34

nesta linha:

if ($posicao_prv<0)
  {
$posicao_prv=$posicao-$total_posicao;
Link to comment
Share on other sites

$posicao é um array

$posicao=mysql_fetch_assoc($posicao_atual);

logo não podes aplicar a operação de subtração a um array !!!

Não, estava a subtrair um nro pequeno por um grande, dava negativo, logo:

Fatal error: Unsupported operand types in C:\wamp\www\www.af-reabilitacao.com\pages\contacts.php on line 34

:S

Edited by PF2G
Link to comment
Share on other sites

Pronto... 😛

Hippo@ será que me podes ajudar aqui?

tenho aqui o codigo direito já:

 while($row_content = mysql_fetch_object($result_content))
 {
  /* nro total de rows */
  $query_posicao = mysql_query("SELECT posicao FROM escritorios");
  $total_posicao = mysql_num_rows($query_posicao);
  /* /nro total de rows */

  $posicao_atual=mysql_query("SELECT posicao FROM escritorios WHERE id='".$row_content->id."'");
  $posicao_at=mysql_fetch_assoc($posicao_atual);

  $pos=$posicao_at['posicao'];



  $posicao_prv=$pos-1;

  if ($posicao_prv<0)
  {
   $posicao_prev=$total_posicao-$pos;
   $posicao_ant=$posicao_prev-1;
  }

  $query_previous=mysql_query("SELECT * FROM escritorios WHERE posicao='".$posicao_ant."'") or die (mysql_error());
  $previous=mysql_fetch_assoc($query_previous);

  $query_prv_titulo=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$previous['id']."'") or die(mysql_error());
  $prv_titulo=mysql_fetch_assoc($query_prv_titulo);

  ////////////////////////////////
  $posicao_nxt=$pos + 1;

  if($posicao_nxt>$total_posicao)  
  {
   $posicao_nxt=$total_posicao-1;
  }

  $query_next=mysql_query("SELECT * FROM escritorios WHERE posicao='".$posicao_nxt."'") or die (mysql_error());
  $next=mysql_fetch_assoc($query_next);

  $query_nxt_titulo=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$next['id']."'") or die(mysql_error());
  $nxt_titulo=mysql_fetch_assoc($query_nxt_titulo);

  $pageTitle = "COMO CHEGAR | ". $row_content->titulo;
  $content .= "<h1 class='title'>".$pageTitle."
   <div style='text-align:right;'>
    <a href='$current_lang/$module/como_chegar/".$previous['url']."'>
	 &lt ".$prv_titulo['titulo']."
    </a>
       
    <a href='$current_lang/$module/como_chegar/".$next['url']."'> ".
	 $nxt_titulo['titulo']." &gt
    </a>
   </div>
  </h1>";
  $content .= "<div class='content_description'>".$row_content->contactos."</div>";

Já tem os <a href> direitos e so me falta apresentar o conteudo correspondente ao seleccionado que está no url como podes ver acima, mas com os $nxt_titulo e $prv_titulo, não sei como ir buscar o conteudo, estando tudo dividido...

E outra coisa é que não me muda os titulos...

Link to comment
Share on other sites

eu não te posso responder porque razão os conteúdos não aparecem divididos por duas razões:

- desconheço a tua base de dados

- não apresentas o código onde estás a ler a base de dados os dados dos registos a serem apresentados onde deverias aplicar a filtragem com elementos do URL

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

eu não te posso responder porque razão os conteúdos não aparecem divididos por duas razões:

- desconheço a tua base de dados

- não apresentas o código onde estás a ler a base de dados os dados dos registos a serem apresentados onde deverias aplicar a filtragem com elementos do URL

As tabelas que estou a usar sao estas

ESCRITORIOS

id

url

lang_default

visivel

posicao

ESCRITORIOS_LANG

id

id_escritorio ('id' da tabela acima)

lang

titulo

contactos

visivel

Aqui fica o codigo completo para os contactos:

$result_content=mysql_query("SELECT e.posicao, e.id, e.url, el.titulo, el.contactos FROM escritorios as e, escritorios_lang as el
 WHERE e.id = el.id_escritorio AND
 el.lang='$current_lang' AND e.visivel=1 AND el.visivel=1
 GROUP BY el.lang");
$num_rows_content = mysql_num_rows($result_content);
$conta_rows_content = 1;
$content = "";

if($num_rows_content >0){
 $content .=  "<div class='content_page'>";
 $content .=  "<div class='content_page_top'></div>";

 $content .=  "<div class='content_page_center'>";

 while($row_content = mysql_fetch_object($result_content))
 {
  /* nro total de rows */
  $query_posicao = mysql_query("SELECT posicao FROM escritorios");
  $total_posicao = mysql_num_rows($query_posicao);
  /* /nro total de rows */

  $posicao_atual=mysql_query("SELECT * FROM escritorios WHERE id='".$row_content->id."'");
  $posicao_at=mysql_fetch_assoc($posicao_atual);

  $contact_atual=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$posicao_at['id']."'");
  $contact=mysql_fetch_assoc($contact_atual);

  $pos=$posicao_at['posicao'];



  $posicao_prv=$pos-1;

  if ($posicao_prv<0)
  {
$posicao_prev=$total_posicao-$pos;
$posicao_ant=$posicao_prev-1;
  }

  $query_previous=mysql_query("SELECT * FROM escritorios WHERE id='".$posicao_at['id']."' AND posicao='".$posicao_ant."'") or die (mysql_error());
  $previous=mysql_fetch_assoc($query_previous);

  $query_prv_titulo=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$previous['id']."'") or die(mysql_error());
  $prv_titulo=mysql_fetch_assoc($query_prv_titulo);

  ////////////////////////////////
  $posicao_nxt=$pos + 1;

  if($posicao_nxt>$total_posicao)  
  {
$posicao_nxt=$total_posicao-1;
  }

  $query_next=mysql_query("SELECT * FROM escritorios WHERE posicao='".$posicao_nxt."'") or die (mysql_error());
  $next=mysql_fetch_assoc($query_next);

  $query_nxt_titulo=mysql_query("SELECT * FROM escritorios_lang WHERE id_escritorio='".$next['id']."'") or die(mysql_error());
  $nxt_titulo=mysql_fetch_assoc($query_nxt_titulo);

  $pageTitle = "COMO CHEGAR | ". $contact['titulo'];
  $content .= "<h1 class='title'>".$pageTitle."
   <div style='margin-top:-18px; text-align:right;'>
	<a href='$current_lang/$module/como_chegar/".$previous['url']."'>
	 &lt ".$prv_titulo['titulo']."
	</a>
	   
	<a href='$current_lang/$module/como_chegar/".$next['url']."'> ".
	 $nxt_titulo['titulo']." &gt
	</a>
   </div>
  </h1>";
  $content .= "<div class='content_description'>".$contact['contactos']."</div>";
 }
 $content .=  "<div class='bottom_links'><ul><li><a href='$current_lang/$module/form'>< CONTACTOS</a></li></ul></div>";
 $content .=  "<br/></div>";
 $content .=  "<div class='content_page_bottom'></div>";
 $content .=  "</div>";  
 echo $content;

}else{
 header("Status: 404 Not Found");
 header( "Location: ".$url."/".$current_lang."/pages/error/404" );
 die();
}
Link to comment
Share on other sites

este parece ser o Sql que usas para ler a informação a ser apresentada

SELECT e.posicao, e.id, e.url, el.titulo, el.contactos FROM escritorios as e, escritorios_lang as el
WHERE e.id = el.id_escritorio AND
el.lang='$current_lang' AND e.visivel=1 AND el.visivel=1
GROUP BY el.lang

esta informação e o código que apresentar de criação dos links "anterior" e "próximo"

<a href='$current_lang/$module/como_chegar/".$previous['url']."'>
/* ... */
<a href='$current_lang/$module/como_chegar/".$next['url']."'> ".

só posso deduzir que o elemento identificador será o campo "url" da tabela "escritorios"

no entanto, não efetuas qualquer filtragem dos registos no pedido à base de dados.

seria necessário adicionar uma condição no SQL que refletisse qual o escritório a ser apresentado, tendo em conta o valor que terás no pedido vindo do link "anterior" ou "seguinte".

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

este parece ser o Sql que usas para ler a informação a ser apresentada

SELECT e.posicao, e.id, e.url, el.titulo, el.contactos FROM escritorios as e, escritorios_lang as el
WHERE e.id = el.id_escritorio AND
el.lang='$current_lang' AND e.visivel=1 AND el.visivel=1
GROUP BY el.lang

esta informação e o código que apresentar de criação dos links "anterior" e "próximo"

<a href='$current_lang/$module/como_chegar/".$previous['url']."'>
/* ... */
<a href='$current_lang/$module/como_chegar/".$next['url']."'> ".

só posso deduzir que o elemento identificador será o campo "url" da tabela "escritorios"

no entanto, não efetuas qualquer filtragem dos registos no pedido à base de dados.

seria necessário adicionar uma condição no SQL que refletisse qual o escritório a ser apresentado, tendo em conta o valor que terás no pedido vindo do link "anterior" ou "seguinte".

Sim, eu estava a ver isso agora. Tenho aqui o sql para ir buscar o nro total de rows:

/* nro total de rows */
  $query_posicao = mysql_query("SELECT posicao FROM escritorios");
  $total_posicao = mysql_num_rows($query_posicao);
  /* /nro total de rows */

estou a tentar arranjar maneira de ir buscar o valor exato, por exemplo: o registo cujo id=1 a posicao=0 e sempre que adiciono a posicao segue (0, 1, 2,...)

Deste modo consigo calcular melhor, e talvez chegar onde quero. Se me puderes ajudar, agradecia

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.