Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   D4PHP: DBRepeater y algún buen paginador (https://www.clubdelphi.com/foros/showthread.php?t=59999)

alquimista_gdl 16-09-2008 21:03:23

D4PHP: DBRepeater y algún buen paginador
 
Hola,

Estoy implementando el dbRepeater para mostrar grids de datos, en lugar del DBGrid que me parece le hace falta algo de madurez. Quize usar el dbPaginator con el dbRepeater pero igual, no supe o no veo manera de se desplieguen que distintos bloques (digamos de 10 en 10) para el dbRepeater. Hay alguien que haya usado el dbRepeater con algún buen paginador? De otra manera tendría que olvidarme de las ventajas de DBRepeater, usar el "paginator" junto con algun proceso de plantillas que genere registros según resultados del paginator.

Gracias !
Guillermo

David82 17-09-2008 12:19:27

Hola Guillermo, yo también estuve intentando "manejar" el dbpaginator y acabe dejandolo, no se controla bien el número máximo de paginas a mostrar, da problemas cuando utilizas otros elementos vcl...En fin, un montón de problemas. Lo que utilizo ahora es una función paginadora propia que me es más sencilla de utilizar, mira a ver si te sirve:

Código PHP:

function paginador($actual,$max,$path,$anterior,$siguiente,$uno,$dos,$tres,$pri,$ult,$saltoAnt,$saltoSig)
{
        
$max=ceil($max);
        if(
$max==1)
                {
                
$dos->visible=true;
                
$dos->caption="pág 1";
                
$dos->link="";
                
$uno->visible=false;
                
$tres->visible=false;
                
$siguiente->visible=false;
                
$anterior->visible=false;
                
$pri->visible=false;
                
$ult->visible=false;
                
$saltoAnt->visible=false;
                
$saltoSig->visible=false;
                }
        if(
$max==2)
                {
                
$uno->visible=true;
                
$tres->visible=true;
                
$siguiente->visible=true;
                
$anterior->visible=true;
                
$uno->caption="1";
                
$tres->caption="2";
                if (
$actual==1)
                        {
                        
$uno->link="";
                        
$tres->link=$path."2";
                        
$siguiente->link=$path."2";
                        
$anterior->link="";
                        }
                else
                        {
                        
$uno->link=$path."1";
                        
$tres->link="";
                        
$siguiente->link="";
                        
$anterior->link=$path."1";
                        }
                
$dos->visible=false;
                
$pri->visible=false;
                
$ult->visible=false;
                
$saltoAnt->visible=false;
                
$saltoSig->visible=false;
                }
        if(
$max>2)
                {
                
$uno->visible=true;
                
$dos->visible=true;
                
$tres->visible=true;
                
$siguiente->visible=true;
                
$anterior->visible=true;
                
$pri->visible=true;
                
$ult->visible=true;
                
$saltoAnt->visible=true;
                
$saltoSig->visible=true;
                if(
$actual==1)
                        {
                        
$anterior->link="";
                        
$siguiente->link=$path.($actual+1);
                        
$uno->caption=($actual);
                        
$uno->link="";
                        
$dos->caption=($actual+1);
                        
$dos->link=$path.($actual+1);
                        
$tres->caption=($actual+2);
                        
$tres->link=$path.($actual+2);
                        
$pri->link="";
                        
$ult->link=$path.$max;
                        
$saltoAnt->link="";
                        if(
$actual+3<$max)
                                {
                                
$saltoSig->link=$path.($actual+3);
                                }
                        else
                                {
                                
$saltoSig->link="";
                                }
                        }
                else
                        {
                        if(
$actual==$max)
                                {
                                
$anterior->link=$path.($actual-1);
                                
$siguiente->link="";
                                
$uno->caption=($actual-2);
                                
$uno->link=$path.($actual-2);
                                
$dos->caption=($actual-1);
                                
$dos->link=$path.($actual-1);
                                
$tres->caption=($actual);
                                
$tres->link="";
                                
$pri->link=$path."1";
                                
$ult->link="";
                                if(
$actual-3>'1')
                                        {
                                        
$saltoAnt->link=$path.($actual-3);
                                        }
                                else
                                        {
                                        
$saltoAnt->link="";
                                        }
                                
$saltoSig->link="";
                                }
                        else
                                {
                                
$anterior->link=$path.($actual-1);
                                
$siguiente->link=$path.($actual+1);
                                
$uno->caption=($actual-1);
                                
$uno->link=$path.($actual-1);
                                
$dos->caption=($actual);
                                
$dos->link="";
                                
$tres->caption=($actual+1);
                                
$tres->link=$path.($actual+1);
                                
$pri->link=$path."1";
                                
$ult->link=$path.$max;
                                if(
$actual-3>'1')
                                        {
                                        
$saltoAnt->link=$path.($actual-3);
                                        }
                                else
                                        {
                                        
$saltoAnt->link="";
                                        }
                                if(
$actual+3<$max)
                                        {
                                        
$saltoSig->link=$path.($actual+3);
                                        }
                                else
                                        {
                                        
$saltoSig->link="";
                                        }
                                }
                        }

                }


Los tres primeros parametros son la página actual, el número max de páginas y el path del link donde te lleva el paginador. El resto son las etiquetas del paginador.
A mi me hace un apaño, espero que te sirva.

Para mostrar los bloques de 10 en 10 yo lo hago en la sentencia SQL, poniendo limit X, 10; donde X es el valor de inicio que depende de la página actual.

Un saludo, David.

alquimista_gdl 17-09-2008 18:56:44

Muchas gracias David !!!

alquimista_gdl 18-09-2008 04:26:59

Hola David,

Estoy incorporando tu función a un programita de prueba que estoy haciendo; quisiera hacerte una pregunta: qué diferencia funcional hay entre los parámetros $anterior y $saltoAnt, así como $siguiente, $saltoSig ? Entiendo lo que debería espefidicar en $anterior y $siguiente; pero que tipo de etiqueta serían las que se prefijan con $salto ?

Por otro lado, entiendo que una línea como:

$siguiente->link=$path.($actual+1);

asume que a $path, se le concatenará la página siguiente a mostrar, por lo que path debería tener ya un string como "programa.php?pagina=" ?

Gracias,
Guillermo

David82 18-09-2008 08:15:10

Hola Guillermo,

La variable $path es como tu has puesto, se le pasa la cadena que va antes del número de página.
SaltoAnt y saltoSig te envian 3 páginas atras o adelante , mientras que anterior y siguiente solo saltan 1 página.

un saludo!

Yolen 24-09-2008 13:34:07

As probado con el pager
 
A mi me ocurrio lo mismo pero con el pager me funciona correctamente

PepeLolo 11-10-2008 03:08:48

Yo tambien estoy empezando con PHP, concretamente con delphi for php y mi opinión es que los componentes en gral son un pestiño, estos generan cantidad de código, una autentica locura. Buscando, buscando encontre la página miniajax con excelentes miniprogramitas listos para incorporar en nuestros proyectos.

Uno de ellos es el enlace que dice Unobtrusive table sort script - Demo, genial tablas dinamicas dhtml con páginador, ordenación, selección, etc. Tambien hay un calendario, todo con css, javascript y dhtml (todo muy sencillo de utilizar).:D

Yolen 31-10-2008 13:43:13

Como insertas estos programitas
 
Buenas Pepelolo

Perdona que sea tan paquete pero como insertas esto programitas

Gracias

PepeLolo 01-11-2008 13:44:18

De momento solo he incluido el del calendario y las tablas, es solo cuestion de llevarlo a tu proyecto, incluir los hojas de estilo y el javascript, sigue uno de los ejemplos de la descarga. ;)


La franja horaria es GMT +2. Ahora son las 19:14:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi