]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/HTML/Tabla.php
e6010a7c836849bc903825f9b130eb4e993a1935
[mecon/meconlib.git] / lib / MECON / HTML / Tabla.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: fri mar 21 ART 2003
22 Autor:  Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'HTML/Table.php';
28 require_once 'MECON/HTML/Image.php';
29 require_once 'MECON/DB/Pager.php';
30
31 /**
32  * Libreria para le manejo de las tablas de los sistemas de intranet.
33  *
34  */
35 class MECON_HTML_Tabla extends HTML_Table {
36     
37     /**
38      * Valores de Configuracion particular
39      *
40      * @var array() $conf
41      * @access protected
42      */
43     var $_conf;
44
45     /**
46      * Atributos de las tablas.
47      *
48      * @var array() attrs
49      * @access protected
50      */
51     var $_attrs;
52
53     /**
54      * Íconos e información que va arriba de la tabla.
55      *
56      * @var array()
57      * @access private.
58      */
59     var $_cabecera = array();
60
61     /**
62      * Íconos e información que va abajo de la tabla.
63      *
64      * @var array()
65      * @access private.
66      */
67     var $_pie = array();
68
69     /**
70      * Constructor. 
71      * Puede recibir como parametro un string con los atributos que se 
72      * quieren dar a la tabla en cuestion. Estos atributos estan
73      * seteados por default segun el archivo de configuracion.
74      * Ademas puede recibir la indicacion de algun estilo en particular.
75      *
76      * @param mixed $atributos Atributos diferentes a los estandares para la tabla
77      * @param string $estilo Tipo de tabla
78      * 
79      * @access public
80      */
81     function MECON_HTML_Tabla($attrs = null, $estilo = 'comun') {
82         // Obtengo los valores particulares de configuracion.
83         $this->_conf = include(dirname(__FILE__) . '/Tabla/estilo_' . $estilo . '.php');
84         // Seteo los atributos para la tabla
85         $this->_attrs = $this->_conf['atributos']['tabla_comun'];
86         //Genero el objeto HTML_Table
87         if (is_string($attrs)) {
88             $attrs = $this->_parseAttributes($attrs);
89         }
90         if (is_array($attrs)) {
91             if (isset($attrs['width'])) {
92                 $this->_attrs['width'] = $attrs['width'];
93             }
94             if (isset($attrs['bgcolor'])) {
95                 $this->_attrs['bgcolor'] = $attrs['bgcolor'];
96             }
97             if (isset($attrs['cellspacing'])) {
98                 $this->_attrs['cellspacing']  = $attrs['cellspacing'];
99             }            
100             if (isset($attrs['cellpadding'])) {
101                 $this->_attrs['cellpadding']  = $attrs['cellpadding'];
102             }            
103         }        
104         $this->HTML_Table($this->_attrs);
105             if (isset($attrs['align'])) {
106                 $this->_attrs['align'] = $attrs['align'];
107             }
108
109     }    
110
111     /**                 
112      * Agrega una fila del tipo cabecera tomando colores y demas del  
113      * archivo de configuracion. Recibe como parametro un array con 
114      * los datos a incluir en la linea. Agrega tantas columnas como
115      * elementos tenga el array. Si no recibe parametro alguno, 
116      * inserta una fila en blanco. Devuelve el identificador de la
117      * fila en donde inserto los datos.
118      *
119      * @param array() $contenido Contenido de la fila
120      *
121      * @return int Identificador de Linea
122      * @access public
123      * @deprecated
124      */
125     function agregarFilaCabecera($contenido = '', $atributos = '') {
126         return $this->addRow($contenido, 'cabecera');
127     }
128
129     /**                 
130      * Agrega una fila del tipo comun, tomando colores y demas del  
131      * archivo de configuracion. Recibe como parametro un array con 
132      * los datos a incluir en la linea. Agrega tantas columnas como
133      * elementos tenga el array. Si no recibe parametro alguno, 
134      * inserta una fila en blanco. Devuelve el identificador de la
135      * fila en donde inserto los datos.
136      *
137      * @param array() $contenido Contenido de la fila
138      *
139      * @return int Identificador de Linea
140      * 
141      * @access public
142      * @deprecated
143      */
144     function agregarFila($contenido = '') {
145         return $this->addRow($contenido, 'comun');
146     }
147
148     /**                 
149      * Modifica el atributo rowSpan a la celda pasada por parametro
150      *
151      * @param int $fila    Identificador de la fila que se quiere modificar
152      * @param int $columna Identificador de la columna que se quiere modificar
153      * @param int $valor   Atributo a modificar
154      * 
155      * @access public
156      * @deprecated
157      */
158     function rowSpan($fila, $columna, $valor) {
159         return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"');
160     }
161
162     /**                 
163      * Modifica el atributo colSpan a la celda pasada por parametro
164      *
165      * @param int $fila    Identificador de la fila que se quiere modificar    
166      * @param int $columna Identificador de la columna que se quiere modificar
167      * @param int $valor   Atributo a modificar                               
168      * 
169      * @access public
170      * @deprecated
171      */
172     function colSpan($fila, $columna, $valor) {
173         return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"');
174     }
175
176     /**                 
177      * Modifica el atributo aling de la celda pasada por parametro
178      *
179      * @param int $fila     Identificador de la fila que se quiere modificar      
180      * @param int $columna  Identificador de la columna que se quiere modificar
181      * @param string $valor Atributo a modificar                               
182      * 
183      * @access public
184      * @deprecated
185      */
186     function align($fila, $columna, $valor) {
187         return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"');
188     }
189
190     /**
191      * Setea una columna como del tipo cabecera    
192      *
193      * @param int $columna Identificador de la columna que se quiere modificar
194      * 
195      * @access public
196      * @deprecated
197      */
198     function setColCabecera($columna) {
199         return $this->updateColAttributes($columna, 'cabecera');
200     }
201
202     /**                 
203      * Setea una columna como del tipo titulo
204      *
205      * @param int $columna Identificador de la columna que se quiere modificar
206      * 
207      * @access public
208      * @deprecated
209      */
210     function setColTitulo($columna) {
211         return $this->updateColAttributes($columna, 'titulo');
212     }
213
214     /**                 
215      * Alinea una columna entera  
216      *
217      * @param int $columna Identificador de la columna que se quiere modificar
218      * @param string $valor Valor
219      * 
220      * @access public
221      * @deprecated
222      */
223     function setColAlign($columna, $valor) {
224         return $this->updateColAttributes($columna,'align="'.$valor.'"');
225     }
226
227     /**                 
228      * Cambia el tamanio de una columna entera  
229      *
230      * @param int $columna  Identificadore de la columna que se quiere modificar
231      * @param string $valor Valor
232      * 
233      * @access public
234      * @deprecated
235      */
236     function setColWidth($columna, $valor) {
237         return $this->updateColAttributes($columna,'width="'.$valor.'"');
238     }
239
240     /**                 
241      * Cambia el color de fondo de una celda  
242      *
243      * @param int $fila     Identificador de la fila que se quiere modificar    
244      * @param int $columna  Identificador de la columna que se quiere modificar
245      * @param string $valor Atributo a modificar                               
246      *
247      * @access public
248      * @deprecated
249      */
250     function setCellBgcolor($fila, $columna, $valor) {
251         return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"');
252     }
253
254     /**                 
255      * Devuelve el html de la tabla
256      *
257      * Devuelve el html de la tabla para que sea mostrado.
258      * Como parametro recibe el indicador de tabla simple.
259      * Si $simple es falso, devuelve el html comun y corriente (con 2
260      * tablas), si es false devuelve una tabla sola.
261      *
262      * @param bool $simple Tipo de tabla que se quiere recibir.
263      *
264      * @return string Html
265      * 
266      * @access public
267      */
268     function toHtml($simple = 0) {
269         if ($simple) {
270             $result = parent::toHtml();
271         // Agregar la tabla de fondo.
272         } else {
273             $contenedora = $this->_conf['atributos']['tabla_contenedora'];
274             $contenedora['width'] = $this->getAttribute('width');
275             $contenedora['align'] = $this->_attrs['align'];
276             $this->updateAttributes(array('width' => '100%'));
277             $tabla_externa =  new HTML_Table($contenedora);
278             $tabla_externa->addRow(array(parent::toHtml()),
279                 $this->_conf['atributos']['celda_contenedora']);
280             $result = $tabla_externa->toHtml();    
281         }
282         // Si tiene pie o cabecera, crea tabla.
283         if ($this->_cabecera or $this->_pie) {
284             $tabla_externa = new HTML_Table(array('width'=>'100%','border'=>0));
285         }
286         // Si tiene cabecera, la agrega.
287         if ($this->_cabecera) {
288             $tabla_externa->addRow($this->_cabecera, array(
289                 'valign' => 'middle',
290                 'width'  => '33%',
291             ));
292             $tabla_externa->updateCellAttributes(0, 0, array('align' => 'left'));
293             $tabla_externa->updateCellAttributes(0, 1, array('align' => 'center'));
294             $tabla_externa->updateCellAttributes(0, 2, array('align' => 'right'));
295         }
296         // Si tiene cabecera o pie, agrega la tabla original.
297         if ($this->_cabecera or $this->_pie) {
298             //$id = $tabla_externa->addRow($result);
299             $tabla_externa->addRow(array($result), array(
300                 'align'   => 'center',
301                 'valign'  => 'middle',
302                 'width'   => '100%',
303                 'colspan' => '3',
304             ));
305         }
306         // Si tiene pie, lo agrega.
307         if ($this->_pie) {
308             $id = $tabla_externa->addRow($this->_pie, array(
309                 'valign' => 'middle',
310                 'width' => '33%',
311             ));
312             $tabla_externa->updateCellAttributes($id, 0, array('align' => 'left'));
313             $tabla_externa->updateCellAttributes($id, 1, array('align' => 'center'));
314             $tabla_externa->updateCellAttributes($id, 2, array('align' => 'right'));
315         }
316         return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result;
317     }
318
319     /**
320      * Cambia las propiedades de una celda
321      *
322      * Cambia las propiedades de una celda. Si $attrs es un array
323      * asociativo, se setean los atributos representados por las claves
324      * con los valores.
325      *
326      * @param int $row     Identificador de la fila que se quiere modificar    
327      * @param int $col     Identificador de la columna que se quiere modificar
328      * @param mixed $attrs Atributo a modificar                               
329      *
330      * @access public
331      */
332     function updateCellAttributes($row, $col, $attrs) {
333         return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs, false));
334     }
335
336     /**
337      * Establece las propiedades de una celda
338      *
339      * Establece las propiedades de una celda. Si $attrs es un array
340      * asociativo, se setean los atributos representados por las claves
341      * con los valores.
342      *
343      * @param int $row     Identificador de la fila que se quiere modificar     
344      * @param int $col     Identificador de la columna que se quiere modificar
345      * @param mixed $attrs Atributo a modificar                               
346      *
347      * @access public
348      */
349     function setCellAttributes($row, $col, $attrs) {
350         return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs, true));
351     }
352
353     /**
354      * Agrega una fila
355      *
356      * Agrega una fila. El contenido es el que viene representado por 
357      * el array $content. Recibe los atributos en la variable $attrs
358      *
359      * @param mixed $content Contenido
360      * @param mixed $attrs Atributos
361      *
362      * @return int $rowId Identificador de la fila
363      *
364      * @access public
365      */
366     function addRow($content, $attrs = 'comun') {
367         return parent::addRow($content, $attrs);
368     }
369     
370     /**
371      * Convierte un atributo a string
372      * 
373      * Convierte un atributo HTML al string para pasar a los metodos de HTML_Table
374      * Recibe en $attrs los atributos a modificar.
375      *
376      * @param mixed $attrs Atributos.
377      * @param bool  $isSet Indica si hay que setear.
378      *
379      * @return array
380      * @access private
381      */
382     function _translateAttributes($attrs, $isSet) {
383         if (!$attrs) {
384             return array();
385         }
386         if (is_string($attrs)) {
387             $attrs = $this->_parseAttributes($attrs);
388         }
389         if ($isSet) {
390             $rta = $this->_conf['atributos']['celda_comun'];
391         } else {
392             $rta = array();
393         }
394         foreach ($attrs as $attr => $val) {
395             $attr = strtolower($attr);
396             switch ($attr) {
397                 // Estilos de celda
398                 case 'comun':
399                 case 'cabecera':
400                 case 'titulo':
401                     $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]);
402                     break;
403                 case 'align':
404                 case 'valign':
405                 case 'width':
406                 case 'height':
407                 case 'rowspan':
408                 case 'colspan':
409                 case 'bgcolor':
410                 case 'class':
411                 case 'border':
412                 case 'cellspacing':
413                 case 'cellpadding':
414                 case 'nowrap':
415                     $rta[$attr] = $val;
416                     break;
417                 case 'spacing':
418                 case 'padding':
419                     $rta["cell$attr"] = $val;
420                     break;
421                 case 'th':
422                     $rta[$attr] = '';
423                     break;
424                 default:
425                     trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
426             }
427         }
428         return $rta;
429     }
430
431     /**
432      * Obtiene la Cascade Style Sheet para esta tabla.
433      *
434      * @return string Path 'web' a la css.
435      */
436     function getCSS() {
437         return $this->_conf['css'];
438     }
439
440     /**
441      * Setea la cabecera.
442      * Ejemplo:
443      * @code
444      * $tabla->setCabecera(array('Hola', '&nbsp;', 'mundo!'));
445      * @endcode
446      *
447      * @param array $cabecera Array de 3 elementos, que son la celda izquierda,
448      *                        central y derecha de la cabecera (en ese órden).
449      */
450     function setCabecera($cabecera) {
451         if (count($pie) != 3) {
452             $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
453         }
454         $this->_cabecera = $cabecera;
455     }
456
457     /**
458      * Agrega información a la cabecera de la tabla.
459      * Ejemplo:
460      * @code
461      * $tabla->updateCabecera('Hola', 'izquierda');
462      * $tabla->updateCabecera('mundo!', 'derecha');
463      * @endcode
464      *
465      * @param mixed $cabecera Celda a agregar a la cabecera. Puede ser un string
466      *                        o un objeto con un método toHtml().
467      * @param string $lugar   Lugar en donde poner la cabecera. Puede ser
468      *                       'izquierda', 'centro' o 'derecha'.
469      */
470     function updateCabecera($cabecera, $lugar) {
471         if (!$this->_cabecera) {
472             $this->_cabecera = array('&nbsp;', '&nbsp;', '&nbsp;');
473         }
474         if ($lugar == 'izquierda') {
475             $this->_cabecera[0] = $cabecera;
476         } elseif ($lugar == 'centro') {
477             $this->_cabecera[1] = $cabecera;
478         } elseif ($lugar == 'derecha') {
479             $this->_cabecera[2] = $cabecera;
480         } else {
481             $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
482         }
483     }
484
485     /**
486      * Setea el pie.
487      *
488      * @param array $pie Array de 3 elementos, que son la celda izquierda,
489      *                   central y derecha del pie (en ese órden).
490      *
491      * @see Ejemplo en setCabecera().
492      */
493     function setPie($pie) {
494         if (count($pie) != 3) {
495             $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
496         }
497         $this->_pie = $pie;
498     }
499
500     /**
501      * Agrega información al pie de la tabla.
502      *
503      * @param mixed $pie Celda a agregar al pie. Puede ser un string
504      *                        o un objeto con un método toHtml().
505      * @param string $lugar   Lugar en donde poner el pie. Puede ser
506      *                       'izquierda', 'centro' o 'derecha'.
507      *
508      * @see Ejemplo en updateCabecera().
509      */
510     function updatePie($pie, $lugar) {
511         if (!$this->_pie) {
512             $this->_pie = array('&nbsp;', '&nbsp;', '&nbsp;');
513         }
514         if ($lugar == 'izquierda') {
515             $this->_pie[0] = $pie;
516         } elseif ($lugar == 'centro') {
517             $this->_pie[1] = $pie;
518         } elseif ($lugar == 'derecha') {
519             $this->_pie[2] = $pie;
520         } else {
521             $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
522         }
523     }
524
525     /**
526      * Agrega un link predefinido a la cabecera o pie de la tabla.
527      * Ejemplo:
528      * @code
529      * if ($muchos) {
530      *      $tabla->addLink('nuevo');
531      * } else {
532      *      $tabla->addLink('nuevos', 'nuevos.php');
533      * }
534      * $tabla->addLink('volver',
535      *      new MECON_HTML_Link('atras.php'));
536      * $tabla->addLink('anterior',
537      *      new MECON_HTML_Link('previo.php', 'Persona Anterior'));
538      * $tabla->addLink('siguiente',
539      *      new MECON_HTML_Link('previo.php', 'Siguiente persona',
540      *          array('pers' => 'prox')));
541      * @endcode
542      *
543      * @param string $id Identificador del link predefinido. Puede ser 'volver',
544      *                   'nuevo', 'nuevos', 'anterior' y 'siguiente'.
545      * @param MECON_HTML_Link $link Link a usar. Si no tiene contenidos, se pone
546      *                              uno por defecto. Si es null, se pone como
547      *                              link la página actual.
548      * 
549      */
550     function addLink($id, $link = null) {
551         if (!$link) {
552             $link = @$_SERVER['PHP_SELF'];
553         }
554         if (is_string($link)) {
555             $link = new MECON_HTML_Link($link, '');
556         }
557         switch ($id) {
558             case 'nuevo':
559                 $img = new MECON_HTML_Image('/MECON/images/general_nuevo', '-&lt;');
560                 // Si no tiene titulo, le pone titulo por defecto.
561                 if (!$link->getContents()) {
562                     $link->setContents('Nuevo');
563                 }
564                 $link->addContents($img);
565                 $this->updateCabecera($link, 'derecha');
566                 break;
567             case 'nuevos':
568                 $img = new MECON_HTML_Image('/MECON/images/general_muchos_nuevo', '-&lt;');
569                 // Si no tiene titulo, le pone titulo por defecto.
570                 if (!$link->getContents()) {
571                     $link->setContents('Nuevos');
572                 }
573                 $link->addContents($img);
574                 $this->updateCabecera($link, 'derecha');
575                 break;
576             case 'siguiente':
577                 $img = new MECON_HTML_Image('/MECON/images/general_posterior', '-&lt;');
578                 // Si no tiene titulo, le pone titulo por defecto.
579                 if (!$link->getContents()) {
580                     $link->setContents('Siguiente');
581                 }
582                 $link->addContents($img);
583                 $this->updatePie($link, 'derecha');
584                 break;
585             case 'volver':
586                 $img = new MECON_HTML_Image('/MECON/images/general_anterior', '&gt;-');
587                 // Si no tiene titulo, le pone titulo por defecto.
588                 $cont = $link->getContents() ? $link->getContents() : 'Volver';
589                 $link->setContents($img);
590                 $link->addContents($cont);
591                 $this->updateCabecera($link, 'izquierda');
592                 break;
593             case 'anterior':
594                 $img = new MECON_HTML_Image('/MECON/images/general_anterior', '&gt;-');
595                 // Si no tiene titulo, le pone titulo por defecto.
596                 $cont = $link->getContents() ? $link->getContents() : 'Anterior';
597                 $link->setContents($img);
598                 $link->addContents($cont);
599                 $this->updatePie($link, 'izquierda');
600                 break;
601             default:
602                 $this->raiseError("No hay un link predefinido llamado '$id'.");
603         }
604     }
605
606     /**
607      * Agrega un páginador a la tabla, basado en un resultado de una base de datos.
608      * Ejemplo:
609      * @code
610      * $tabla = new MECON_HTML_Tabla();
611      * $result = $db->query('SELECT * FROM tabla');
612      * if (DB::isError($result)) {
613      *      die('Error');
614      * }
615      * $pager = $tabla->addPager($result);
616      * $tabla->addRow(array('Nombre', 'Apellido'), 'cabecera');
617      * if ($pager->numRows()) {
618      *      while ($row = $pager->fetchRow(DB_FETCHMODE_ASSOC)) {
619      *          $tabla->addRow(array($row['nombre'], $row['apellido']));
620      *      }       
621      * } else {
622      *      $tabla->addRow(array(new MECON_HTML_Error('No se encontraron agentes.')),
623      *          array('colspan' => 2));
624      * }   
625      * $tabla->display();
626      * @endcode
627      *
628      * @param DB_Result $result Resultado de una consulta de base de datos.
629      * @param mixed $tipo Tipo de link(s) a agregar. Puede ser:
630      *                    <ul>
631      *                      <li><tt>'anterior'</tt></li>
632      *                      <li><tt>'siguiente'</tt></li>
633      *                      <li><tt>'paginas'</tt></li>
634      *                      <li><tt>'total'</tt></li>
635      *                      <li><tt>'info'</tt></li>
636      *                    </ul>
637      *                    Puede pasarse uno solo como un string o varios como un
638      *                    array. Si se pasa <tt>'todo'</tt>, se incluyen todos.
639      *                    Si se pasa null, se incluyen <tt>'anterior'</tt>,
640      *                    <tt>'siguiente'</tt> y <tt>'paginas'</tt>.
641      * @param mixed $link Dirección a la que apuntan los links generados. Puede
642      *                    ser un MECON_HTML_Link (para poder pasar variables por
643      *                    GET) o un string.
644      * @param int $limit Parámetro usado para crear el MECON_DB_Pager.
645      * @param int $maxpages Parámetro usado para crear el MECON_DB_Pager.
646      *
647      * @return MECON_DB_Pager Pager que se puede usar para realizar los fetch de
648      *         los resultados de la página actual.
649      *
650      * @see MECON_DB_Pager
651      */
652     function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21) {
653         // Creo el pager con el resultado.
654         $pager = new MECON_DB_Pager($result, @$_GET['pager_from'], $limit, $maxpages);
655         // Obtengo un link válido.
656         if (!$link) {
657             $link = @$_SERVER['PHP_SELF'];
658         }
659         if (is_string($link)) {
660             $link = new MECON_HTML_Link($link, '');
661         }
662         // Si es el tipo por defecto pone paginador nada más.
663         if (!$tipo) {
664             $tipo = array('anterior', 'paginas', 'siguiente');
665         }
666         // Convierte tipo a array.
667         if (!is_array($tipo)) {
668             $tipo = array($tipo);
669         }
670         // Si se quiere mostrar todas las decoraciones del paginador.
671         if (in_array('todo', $tipo)) {
672             $tipo = array('anterior', 'paginas', 'siguiente', 'total', 'info');
673         }
674         // Me fijo si tiene cada uno de los elementos y los agrego.
675         if (in_array('anterior', $tipo) and $pager->numRows() and $pager->currentpage != 1) {
676             $link->setGetVar('pager_from', $pager->prev);
677             $this->addLink('anterior', $link);
678         }
679         if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) {
680             $link->setGetVar('pager_from', $pager->next);
681             $this->addLink('siguiente', $link);
682         }
683         if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) {
684             $from = @$_GET['pager_from'];
685             $pags = '';
686             $lnk = $link->getContents();
687             foreach ($pager->pages as $page => $start_row) {
688                 if ($start_row == $from) {
689                     $pags .= $page;
690                 } else {
691                     $link->setGetVar('pager_from', $start_row);
692                     $link->setContents($page);
693                     $pags .= $link->toHtml();
694                 }
695                 if ($page != $pager->lastpage) {
696                     $pags .= ' | ';
697                 }
698             }
699             $link->setContents($lnk);
700             $this->updatePie($pags, 'centro');
701         }
702         if (in_array('total', $tipo) and $pager->numRows()) {
703             $this->updateCabecera('Se encontraron ' . $pager->numrows . ' resultados.', 'izquierda');
704         }
705         if (in_array('info', $tipo) and $pager->numRows()) {
706             $this->updateCabecera('Página ' . $pager->currentpage . ' de ' . $pager->numpages
707                 . ' - ' . $pager->limit . ' resultados por página.', 'derecha');
708         }
709         return $pager;
710     }
711
712 }
713
714 ?>