Estoy en pleno desarrollo de un sistema de usuarios en PHP/MySQL y he llegado a un punto en que necesito una paginacion de resultados (para mostrar los usuarios registrados), el punto es que no se cual es la mejor forma de hacerlo, he buscado en google pero ninguna se acomoda mucho a la que quiero. para que entiendan mejor:
<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
.
.
.
<< Anterior 1 ... 3 4 5 6 7 8 9 ... 101 Siguiente>>
<< Anterior 1 ... 4 5 6 7 8 9 10 ... 101 Siguiente>>
.
.
.
<< Anterior 1 ... 92 93 94 95 96 97 98 ... 101 Siguiente>>
<< Anterior 1 ... 93 94 95 96 97 98 99 ... 101 Siguiente>>
.
.
.
<< Anterior 1 ... 94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior 1 ... 94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior 1 ... 94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior 1 ... 94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior 1 ... 94 95 96 97 98 99 100 101 Siguiente>>
Porfavor alguien orienteme como puedo hacer algo de este estilo.
Si alguien me quiere ayudar porfavor envienme un PM con su msn para hablar mas rapido. Gracias
quiza este te sriva
http://phppaging.phperu.net/
Gracias, me sirvio de algo.
Cita de: Sinedra en 22 Enero 2011, 19:20 PM
Gracias, me sirvio de algo.
Men, si has echo un sistema de usuarios, la paginacion es pan comido, vaya.... asumiendo que programaste ya un sistema.
La cosa es usar consultar con LIMIT y utilizar una variable que te sirva como punto de referencia para saber que rango mostrar ( $_GET["pagina"] )...
saludos !
[asumiendo una conexión pre-establecida]
$query = mysql_query("SELECT COUNT(*) FROM `my_tabla`");
$query_result = mysql_fetch_array($query);
$count = $query_result[0];
$max_results = 20;
$pages = ceil($count/$max_results);
if(isset($_GET["pagina"])){
$pagina = intval($_GET["pagina"]);
else{
$pagina = 0;
}
$query = mysql_query("SELECT * from `my_tabla` limit {$pagina},{$max_results}";
$query_result = mysql_fetch_assoc($query);
foreach($query_result as $key => $val)
{
echo "{$key} : {$val}".PHP_EOL;
}
echo "</br></br>";
echo "<b>></b>";
for($i=0;$i<$pages;$i++)
{
echo "<a href='./index.php?pagina={$i}'> {$i} </a> ";
}
echo "<b><</b>";
es solo el esqueleto de lo que tu quieres, pero plasma la idea
:http://www.desarrolloweb.com/articulos/1035.php
Muchas gracias a todos por la ayuda!, muy amables, les cuento que tras un largo dia de programacion la paginacion me quedo de lujo =) gracias por ayudarme.
Saludos
Podrías poner el código para verlo...
jeje esque tiene unas 305 lineas, sin contar las funciones extras. pronto cuando estrene el proyecto en que ando les dejo un link aqui para que lo vean. Saludos.
Cita de: Sinedra en 23 Enero 2011, 00:25 AM
jeje esque tiene unas 305 lineas, sin contar las funciones extras. pronto cuando estrene el proyecto en que ando les dejo un link aqui para que lo vean. Saludos.
Wow 305 lineas es mucho, entonces me imagino que tienes un mezcladero horrendo no ?... porque una buena paginacion no hiria mas haya de las 100 lineas :S...
Te recomiendo uses 2 funciones:
paginacion()paginacion_rollout()La funcion
paginacion() toma argumentos que le sirven para hacer la paginacion segun el limite de inicio y fin, toma la bdd y genera una consulta que despues puedes usar con mysql_fetch_array().
Y
paginacion_rollout() crea el roll out de las paginas, tomandos los mismos argumentos que le paseste a
paginacion(), esta deduce las paginas, Y podra retornarte el HTML a pegar (ya tu le concatenas una capa) o que lo imprima directo dentro de la funcion (aunque seria poco recomendable).
Saludos !
Gracias creo que seguire tu consejo, la paginacion solamente tiene unas 120 lineas solo puse 2 veces el mismo codigo pq tb le implemente un buscador, pero en si tiene como 120 lineas
kpaginate es una excelente clase para paginación en php (http://www.aprender-a-programar.com/paginacion-php), te la recomiendo! http://www.aprender-a-programar.com/paginacion-php
Talves puedas complementarla con la clase que hize hace algun tiempo para hacer paginadores a partir de una query mysql:
<?php if($_SERVER['SCRIPT_FILENAME'] == __file__) exit;
/*
FrameworkDrawCoders : 3.*
Last modification : 29-4-2011
Class version : 1.2
*/
class paginator{
/* Results */
var $total_items;
var $total_pages;
var $actual_page;
var $actual_url;
var $matrix_content;
var $matrix_paginator;
/* Configurations */
var $items_by_page = 15;
var $pages_by_screen = 10;
var $page_var = '_p';
var $custom_css = false;
var $base_url; /* Blank. Change in function. */
/* Libs */
var $sql;
/* System Vars */
var $last_error;
var $libs_need;
/* Default libs */
var $conf;
var $str;
var $path;
var $headers;
function __construct(){
$this->libs_need = array('sql'); /* Need */
}
function matrix_sql($query_sql){
/* Reset value */
$this->total_items = null;
$this->total_pages = null;
$this->actual_page = null;
$this->actual_url = null;
$this->matrix_content = null;
$this->matrix_paginator = null;
$this->last_error = null;
$this->base_url = null;
/* Count results */
$this->total_items = $this->sql->fast_select('select count(*) from '.substr($query_sql, strripos($query_sql, ' from ') + 6, strlen($query_sql) - (strripos($query_sql, ' from ') + 6)), true);
$this->total_pages = ceil($this->total_items / (int)$this->items_by_page);
/* Clean get var */
if((int)$_GET[$this->page_var] == 0)
$this->actual_page = 1; /* Default page */
elseif($_GET[$this->page_var] > (int)$this->total_pages)
$this->actual_page = (int)$this->total_pages;
else
$this->actual_page = (int)$_GET[$this->page_var];
/* Make content */
$this->matrix_content = $this->sql->fast_select($query_sql.' limit '.(((int)$this->actual_page - 1) * (int)$this->items_by_page).', '.(int)$this->items_by_page);
/* Configuration of paginator */
if((int)$this->actual_page > ($this->pages_by_screen / 2)){
$nstart_paginator = floor(((int)$this->actual_page + 1 - $this->pages_by_screen / 2));
if($nstart_paginator < 1)
$nstart_paginator = 1;
$nlast_paginator = ($this->pages_by_screen + $nstart_paginator - 1);
}else{
$nstart_paginator = 1;
$nlast_paginator = (int)$this->pages_by_screen;
}
/* Make URL base */
$this->base_url = $this->conf->script_url .'?';
if($_GET){
foreach($_GET as $var => $val){
if($var != $this->page_var){
if(is_array($val)){
foreach($val as $a => $b){
$this->base_url .= $var.'['.urlencode($a).']'.'='.urlencode($b).'&';
unset($b);
}
unset($a);
}else{
$this->base_url .= urlencode($var).'='.urlencode($val).'&';
}
}
unset($var, $val);
}
$this->base_url = substr($this->base_url, 0, strlen($this->base_url) - 1);
}
/* Make paginator */
for($c = $nstart_paginator; $c <= $nlast_paginator; $c++){
if($c > (int)$this->total_pages)
break;
$this->matrix_paginator[] = array(
'id' => $c,
'url' => $this->path->make_permalink($this->base_url.'&'.$this->page_var .'='.(int)$c),
);
}
$this->actual_url = $this->base_url.'&'.$this->page_var .'='.(int)$this->actual_page;
return array(
'matrix_paginator' => $this->matrix_paginator,
'matrix_content' => $this->matrix_content
);
}
function make_content_html($headers, $custom_css = false){
if(!$this->matrix_content){
$this->last_error = array('id' => 1, 'text' => 'No have content');
return false;
}
$return = '';
/* Include default css */
if((!$custom_css) and (!$this->conf->css_paginator_content_inserted)){
$return .= '<link href="'.$this->path->libs().'res_paginator/default_content.css" type="text/css" media="screen" rel="stylesheet" />';
$this->conf->css_paginator_content_inserted = true;
}
$return .= '
<table class="__cpag_a" id="__pag_a" name="__pag_a">
<thead class="__cpag_b">
<tr class="__cpag_c">
';
/* Calculate columns */
$th = 0;
foreach($this->matrix_content[0] as $var => $val){
$th++;
$return .= '
<th class="__cpag_d __cpag_th_'.(int)$th.'">'.$this->str->toHtml($headers[$var]).'</th>
';
unset($var, $val);
}
unset($th);
$return .= '
</tr>
</thead>
<tbody class="__cpag_e">
';
foreach($this->matrix_content as $trid => $content){
$return .= '
<tr class="__cpag_f __cpag_tr_'.$trid.'" id="__cpag_id_'.$trid.'" name="__cpag_id_'.$trid.'">
';
$tdid = 0;
foreach($content as $col => $val){
$tdid++;
$return .= '
<td class="__cpag_g __cpag_td_'.(int)$tdid.'" id="__cpag_id_'.$trid.'_'.$tdid.'" name="__cpag_id_'.$trid.'_'.$tdid.'">
'.$this->str->toHtml($val).'
</td>
';
unset($col, $val);
}
unset($tdid);
$return .= '
</tr>
';
unset($trid, $content);
}
$return .= '
</tbody>
</table>
';
return $return;
}
function make_paginator_html($custom_css = false){
if(!$this->matrix_content){
$this->last_error = array('id' => 1, 'text' => 'No have content');
return false;
}
$return = '';
/* Include default css */
if((!$custom_css) and (!$this->conf->css_paginator_inserted)){
$return .= '<link href="'.$this->path->libs().'res_paginator/default_paginator.css" type="text/css" media="screen" rel="stylesheet" />';
$this->conf->css_paginator_inserted = true;
}
$return .= '
<table class="__pag_a" id="__pag_a" name="__pag_a">
<tbody class="__pag_b">
<tr class="_pag_c">
<td class="__pag_d __pag_td_start">
<a class="__pag_e __pag_href_start" href="'.$this->path->make_permalink($this->base_url .'&'.$this->page_var .'=1').'"><div class="__pag_f __pag_div_start"><<</div></a>
</td>
';
foreach($this->matrix_paginator as $id => $pag){
$id = ($id + 1);
if($this->actual_page == $pag['id']){
$return .= '
<td class="__pag_d __pag_td_'.$id.' __pag_td_actual">
<a class="__pag_e __pag_href_'.$id.' __pag_href_actual" href="'.$pag['url'].'"><div class="__pag_f __pag_div_'.$id.' __pag_div_actual">'.$pag['id'].'</div></a>
</td>
';
}else{
$return .= '
<td class="__pag_d __pag_td_'.$id.'">
<a class="__pag_e __pag_href_'.$id.'" href="'.$pag['url'].'"><div class="__pag_f __pag_div_'.$id.'">'.$pag['id'].'</div></a>
</td>
';
}
unset($id, $pag);
}
$return .= '
<td class="__pag_d __pag_td_end">
<a class="__pag_e __pag_href_end" href="'.$this->path->make_permalink($this->base_url .'&'.$this->page_var .'='.$this->total_pages).'"><div class="__pag_f __pag_div_end">>></div></a>
</td>
</tr>
</tbody>
</table>
';
return $return;
}
function make_all_html($headers, $custom_css = false){
return ($paginator = $this->make_paginator_html($custom_css)).$this->make_content_html($headers, $custom_css).$paginator;
}
}