Ir para conteúdo

POWERED BY:

Arquivado

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

diegoholiveira

paginação usando smarty e adodb

Recommended Posts

Pessoal, estou tentando fazer o script de paginação do wolfphw funcionar no meu sistema com smarty mas esta dando algum problema que eu não soube localizar, se alguem puder me ajudar, agradeço.

 

scripts:

 

index.php

<?php// Chama a conexãoinclude "conexao.php";// carrega a classe Smarty_intranetrequire('Smarty_intranet.php');// inicia a classe$smarty = new Smarty_intranet;// Começo da paginação$numreg = 3; // Quantos registros por página vai ser mostradoif (isset($_GET['pg'])) {	$pg = $_GET['pg'];} else {	$pg = 0;}$inicial = $pg * $numreg;	// Faz o Select pegando o registro inicial até a quantidade de registros para página$sql = "SELECT * FROM intra_pages LIMIT $inicial, $numreg";$dados = $db->Execute($sql);// Conta quantos registros existem na tabela para fazer a paginação$sql_conta = "SELECT * FROM intra_pages";$conta = $db->Execute($sql_conta);// Quantidade de registros pra paginação$quantreg = $conta->RecordCount();	// Monta o conteudo a ser exibidowhile (!$dados->EOF) {	$exibe_dados[] = $dados->fields[1];	$dados->MoveNext();}$quant_pg = ceil($quantreg/$numreg);$quant_pg++;// Verifica se esta na primeira página, se nao estiver ele libera o link para anteriorif ( $pg > 0) {	$nav_inicio = "<a href=".$_SERVER['PHP_SELF']."?pg=".($pg-1) ."><b>« anterior</b></a>";}else {	$nav_inicio = "« anterior";}	// Faz aparecer os numeros das página entre o ANTERIOR e PROXIMOfor($i_pg=1;$i_pg<$quant_pg;$i_pg++) {	// Verifica se a página que o navegante esta e retira o link do número para identificar visualmente	if ($pg == ($i_pg-1)) {		$nav_meio[] = " [$i_pg] ";	} else {		$i_pg2 = $i_pg-1;		$nav_meio[] = " <a href=".$_SERVER['PHP_SELF']."?pg=$i_pg2><b>$i_pg</b></a> ";	}}	// Verifica se esta na ultima página, se nao estiver ele libera o link para próximaif (($pg+2) < $quant_pg) {	$nav_fim = "<a href=".$_SERVER['PHP_SELF']."?pg=".($pg+1)."><b>próximo »</b></a>";} else {	$nav_fim = "próximo »";}// Fim da paginação// monta os dados e exibe o template$smarty->assign("dados", $exibe_dados);$smarty->assign("nav_inicio", $nav_inicio);$smarty->assign("nav_meio", $nav_meio);$smarty->assign("nav_fim", $nav_fim);$smarty->display('index.htm');?>

index.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Intranet</title>{literal}<link href="css/estilo.css" rel="stylesheet" type="text/css" />{/literal}</head><body>{section name=i loop=$dados}<span class="teste">{$dados[i]}</span><br />{/section}{$nav_inicio}{section name=n loop=$nav_meio}{$nav_meio[n]}{/section}{$nav_fim}</body></html>

O resultado deste script é isso:

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Intranet</title><link href="css/estilo.css" rel="stylesheet" type="text/css" /></head><body><span class="teste">Organograma</span><br /><span class="teste">Competências</span><br /><span class="teste">Quem somos?</span><br />« anterior [1]  <a href=/new_intra/index.php?pg=1><b>2</b></a>  <a href=/new_intra/index.php?pg=2><b>3</b></a> <a href=/new_intra/index.php?pg=1><b>próximo »</b></a></body></html>

ele gera corretamente o numero de paginas (neste caso 3 paginas pra 7 registros), mas porem ele exibe apenas os 3 primeiros registros e não faz a navegação conforme deveria.

 

ps.: Fora do smarty esse script funciona 100%

 

Valeu galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

$numreg = 3; // Quantos registros por página vai ser mostradoif (isset($_GET['pg'])) { $pg = $_GET['pg'];} else { $pg = 0;}$inicial = $pg * $numreg; // Faz o Select pegando o registro inicial até a quantidade de registros para página$sql = "SELECT * FROM intra_pages LIMIT $inicial, $numreg";você me ajudo ta na minha vez de ajudaheeheho problema é o seguintevocê fala que o numreg é 3logo em baixo você fala que inicial é $pg(0) * numrege no select você coloca Limit inicial,numregda problema que seria tipo0,3e você muda de pagina e fica3,3o numreg do limite teria que se = ao total de registros no db

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo assimvocê fala que numreg = 3e que o inicial é pg(numero da pagina) * numrege no limit você ta colocando limit inicial,numregagora tipo assimvamos troca isso pelos valores reaisPG=0:Limit 0,3PG=1:Limit 3,3PG=2:Limit 6,3olha esse código que eu vo passa eu usei no meu mais ele funciona pra paginação em ajaxé só você autera Function Paginacao($pagina,$totreg,$jnome,$qtdp,$anime) { $this->padroes = $this->Texto_Padrao(9,1); $this->padroes2 = $this->Texto_Padrao(9,2); $codp = null; if ($totreg <= $qtdp) { If ($totreg <= $pagina) { $total_paginas = $pagina; } Else { $total_paginas = 1; } } // mais de 10 registros com valor múltiplo de 10... Else if ($totreg%$qtdp == 0) { $total_paginas = $totreg / $qtdp; } // mais de 10 registros porém o valor não é múltiplo de 10... else { // como a divisão não é exata, teremos que subtrair a parte que não é inteira e // acrescentar 1 página. $total_paginas = ($totreg/$qtdp) - (($totreg%$qtdp)/$qtdp) + 1; } // se estivermos na primeira página, o link "anterior" não precisa linkar nada... if ($pagina == 1) { $codp .= "<center><< ".$this->padroes[0]." |"; } // do contrário, linka a página anterior... else { $codp .= "<center><a href=# onclick=\"tab(".$anime.",'textoanime',".$jnome.",'oi','".($pagina-1)."')\"><< ".$this->padroes[0]."</a> |"; } // gerando os números com os respectivos links... $i = 1; If ($i == $total_paginas) { $codp .= 1; } Elseif ($total_paginas == 0) { $codp .= 1; } Else { while ($i <= $total_paginas) { // a página atual não precisa ser linkada... if ($i == $pagina) { $codp .= " <b><u>$i</u></b> "; } // as demais páginas deve ser linkadas... else { $codp .= " <a href=# onclick=\"tab(".$anime.",'textoanime',".$jnome.",'oi','".$i."')\">".$i."</a> "; } $i = $i + 1; } } // se estivermos na última página, o link "próximo" não precisa linkar nada... if ($pagina >= $total_paginas) { $codp .= "| ".$this->padroes2[0]." >></center>"; } // do contrário, linka a próxima página... elseif ($total_paginas == 0) { $codp .= "| ".$this->padroes2[0]." >></center>"; } Else { $codp .= "| <a href=# onclick=\"tab(".$anime.",'textoanime',".$jnome.",'oi','".($pagina+1)."')\">".$this->padroes2[0]." >></a></center>"; } Return $codp; }

Compartilhar este post


Link para o post
Compartilhar em outros sites

puts cacheisso eu não sei caraeu to a mou era tentando faze o cache e o login do meu site funciona em conjuntoai eu desisti e desabiliteimais o código ali em cima vai da problema no limit pq se você fo por exemplo pra pagina 2 o limit vai fica 6,3 e ele não vai achaeditmau eu fiz um test aqui e funcionase o problema é cache cara descupa eu to apanhando com isso tbmnem configo po o login do meu site pra roda com cache

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o comando LIMIT ali estava correto.O problema realmente estava no cache mesmo do smarty, agora eu deixar o cache dele desabilitado enquanto não encontro outra solução pra resolver este problema.Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra cache só se fo em site americanoja tentei varias coisas do tipo,mutiplos caches pro mesmo arquivo ou mata o refaz o cache se autera algo essas coisas e nd e em site brasileiro esse tema é muito poco abordado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é cara, a gente quase não encontra bom material sobre isso na net em portugues, mas eu vou continuar estudando o smarty, porem neste projeto não vou usa-lo.

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.