Uso la clase templatepower para la gestión de templates en mi web pero me he encontrado con la dura tarea de realizar la paginacion en este sistema...
Tenia originalmente una funcion para realizar la paginacion que es la siguiente:
Código :
function paginar($pag, $total, $por_pagina, $url) { $total_paginas = ceil($total/$por_pagina); $anterior = $pag - 1; $posterior = $pag + 1; if ($pag>1) $texto = "<a href=\"".$url."pag=$anterior\">«</a> "; else $texto = "<b>«</b> "; for ($i=1; $i<$pag; $i++) $texto .= "<a href=\"".$url."pag=$i\">$i</a> "; $texto .= "<b>$pag</b> "; for ($i=$pag+1; $i<=$total_paginas; $i++) $texto .= "<a href=\"".$url."pag=$i\">$i</a> "; if ($pag<$total_paginas) $texto .= "<a href=\"".$url."pag=$posterior\">»</a>"; else $texto .= "<b>»</b>"; return $texto; }
trate de llevarlo a templates y resulte en esto:
archivo paginar.tpl
Código :
<!-- START BLOCK : pasoUno --> <a href="{url}pag={anterior}">«</a> <!-- END BLOCK : pasoUno --> <!-- START BLOCK : pasoUnoDos --> <b>«</b> <!-- END BLOCK : pasoUnoDos --> <!-- START BLOCK : pasoDos --> <a href="{url}pag={numero}">{numero}</a> <!-- END BLOCK : pasoDos --> <b>{pag}</b> <!-- START BLOCK : pasoTres --> <a href="{url}pag={posterior}">»</a> <!-- END BLOCK : pasoTres --> <!-- START BLOCK : pasoTresDos --> <b>»</b> <!-- END BLOCK : pasoTresDos -->
La nueva funcion seria la siguiente:
Código :
function paginar($pag, $total, $por_pagina, $url) { include_once( "clases/class.TemplatePower.inc.php" ); $tpl = new TemplatePower( "estilo/estilo.tpl" ); $tpl->assignInclude( "paginar", "estilo/paginar.tpl" ); $tpl->prepare(); $total_paginas = ceil($total/$por_pagina); $anterior = $pag - 1; $posterior = $pag + 1; if ($pag>1){ $tpl->newBlock( "pasoUno" ); $tpl->assign( "url", $url ); $tpl->assign( "anterior", $anterior ); }else{ $tpl->newBlock( "pasoUnoDos" ); } for ($i=1; $i<$pag; $i++){ $tpl->newBlock( "pasoDos" ); $tpl->assign( "url", $url ); $tpl->assign( "numero", $i ); } $tpl->gotoBlock( "_ROOT" ); $tpl->assign( "pag", $pag ); for ($i=$pag+1; $i<=$total_paginas; $i++){ $tpl->newBlock( "pasoDos" ); $tpl->assign( "url", $url ); $tpl->assign( "numero", $i ); } if ($pag<$total_paginas){ $tpl->newBlock( "pasoTres" ); $tpl->assign( "url", $url ); $tpl->assign( "posterior", posterior ); }else{ $tpl->newBlock( "pasoTresDos" ); } }
Tomando en cuenta que se encuentra en un archivo llamado funciones.php al cual hago llamado desde otro llamado noticias.php que esta en base a templates.
archivo noticias.php
Código :
<?php ob_start(); session_start(); include("conectar_db.php"); include("login.php"); $link=Conectarse(); include_once( "clases/class.TemplatePower.inc.php" ); $tpl = new TemplatePower( "estilo/estilo.tpl" ); @$noticia=$_GET['idnoti']; if ($noticia){ $tpl->assignInclude( "contenido", "estilo/noticia_completa.tpl" ); }else{ $tpl->assignInclude( "contenido", "estilo/noticia.tpl" ); } include("funciones.php"); if ($noticia){ $noti = "select * from noticias where Id = $noticia"; $noti = mysql_query($noti); $noticias = mysql_fetch_array($noti); $tpl->gotoBlock( "_ROOT" ); $tpl->assign( "titulo", $noticias['titulo'] ); $tpl->assign( "noticia", $noticias['noticia'] ); $tpl->assign( "autor", $noticias['autor'] ); $tpl->assign( "fecha", $noticias['fecha'] ); $comentario = "SELECT * FROM comentarios WHERE id_noticia='$noticia' ORDER BY Id ASC"; $comentario = mysql_query($comentario); while ($comentarios = mysql_fetch_array($comentario)){ $tpl->newBlock( "comentarios" ); $tpl->assign( "Nick", $comentarios['Nick'] ); $tpl->assign( "Comentario", $comentarios['Comentario'] ); } if(@ $nickSession){ $tpl->newBlock( "formulario" ); $tpl->assign( "nickSession", $nickSession ); }else{ $tpl->newBlock( "mensaje" ); } }else{ @ $pag=$_GET['pag']; $url = "noticias.php?"; if (!isset ($pag)) $pag = 1; $result = mysql_query("SELECT COUNT(*) FROM noticias ORDER BY fecha DESC", $link); list($total) = mysql_fetch_row($result); $por_pagina = 10; $reg1 = ($pag-1) * $por_pagina; $noti = "SELECT * FROM noticias ORDER BY fecha DESC LIMIT $reg1, $por_pagina"; $noti = mysql_query($noti, $link); while($noticia = mysql_fetch_array($noti)){ $id_noticia=$noticia["Id"]; $comentarios = "SELECT COUNT(*) FROM comentarios WHERE Id_noticia = $id_noticia"; $comentarios = mysql_query($comentarios, $link); $tpl->newBlock( "noticias" ); $tpl->assign( "titulo", $noticia['titulo'] ); $tpl->assign( "contenido", $noticia['noticia'] ); $tpl->assign( "autor", $noticia['autor'] ); $tpl->assign( "fecha", $noticia['fecha'] ); $tpl->assign( "ide", $noticia['Id'] ); $tpl->assign( "coment", $totalComentarios); } paginar($pag, $total, $por_pagina, $url); } $tpl->printToScreen(); ob_end_flush(); ?>
y el archivo del template para la sección de noticias que es donde se incluye el bloque de paginación es el siguiente:
Código :
<center> <!-- START BLOCK : noticias --> <table border="0" cellpadding="0" cellspacing="0" width="494"> <tr> <td width="492" colspan="2" background="images/bar_satatus.gif" height="25"> <p align="center" class="titulo_noticia">{titulo} </td> </tr> <tr> <td width="74" height="69" align="left" valign="top"> <p align="center"><img border="0" src="images/taka.gif" width="70" height="70"> </td> <td width="428" height="69" valign="top"> {contenido} </td> </tr> <tr> <td width="492" height="24" colspan="2"> Publicado por {autor} {fecha} <a href="noticias.php?idnoti={ide}">Comentarios</a> (3) </td> </tr> </table><br> <!-- END BLOCK : noticias --> <center><!-- INCLUDE BLOCK : paginar --></center> </center>
Bien, no se si me habre explicado bien, el punto es que al momento de hacer el llamado a la funcion paginar() no muestra nada...