Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => PHP => Mensaje iniciado por: Sinedra en 22 Enero 2011, 17:40 PM

Título: Paginacion PHP
Publicado por: Sinedra en 22 Enero 2011, 17:40 PM
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
Título: Re: Paginacion PHP
Publicado por: RedZer en 22 Enero 2011, 18:38 PM
quiza este te sriva

http://phppaging.phperu.net/
Título: Re: Paginacion PHP
Publicado por: Sinedra en 22 Enero 2011, 19:20 PM
Gracias, me sirvio de algo.
Título: Re: Paginacion PHP
Publicado por: Diabliyo en 22 Enero 2011, 19:46 PM
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 !
Título: Re: Paginacion PHP
Publicado por: tragantras en 22 Enero 2011, 20:54 PM
[asumiendo una conexión pre-establecida]

Código (php-brief) [Seleccionar]

$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>&gt;</b>";
for($i=0;$i<$pages;$i++)
{
echo "<a href='./index.php?pagina={$i}'> {$i} </a>&nbsp;";
}
echo "<b>&lt;</b>";







es solo el esqueleto de lo que tu quieres, pero plasma la idea
Título: Re: Paginacion PHP
Publicado por: Shell Root en 22 Enero 2011, 21:15 PM
:http://www.desarrolloweb.com/articulos/1035.php
Título: Re: Paginacion PHP
Publicado por: Sinedra en 23 Enero 2011, 00:08 AM
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

Título: Re: Paginacion PHP
Publicado por: Shell Root en 23 Enero 2011, 00:15 AM
Podrías poner el código para verlo...
Título: Re: Paginacion PHP
Publicado por: 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.
Título: Re: Paginacion PHP
Publicado por: Diabliyo en 23 Enero 2011, 17:11 PM
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 !
Título: Re: Paginacion PHP
Publicado por: Sinedra en 23 Enero 2011, 17:46 PM
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
Título: Re: Paginacion PHP
Publicado por: el_quick en 26 Noviembre 2011, 00:34 AM
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
Título: Re: Paginacion PHP
Publicado por: WHK en 26 Noviembre 2011, 23:05 PM
Talves puedas complementarla con la clase que hize hace algun tiempo para hacer paginadores a partir de una query mysql:

Código (php) [Seleccionar]
<?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_sqlstrripos($query_sql' from ') + 6strlen($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 $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_url0strlen($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">&lt;&lt;</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">&gt;&gt;</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;
}
}