]> git.llucax.com Git - z.facultad/75.43/tp1.git/commitdiff
Se agrega una función para listar items de forma genérica con paginador.
authorLeandro Lucarella <llucax@gmail.com>
Mon, 2 May 2005 20:16:56 +0000 (20:16 +0000)
committerLeandro Lucarella <llucax@gmail.com>
Mon, 2 May 2005 20:16:56 +0000 (20:16 +0000)
Para esto hay que implementar una interfaz común de los Item. Las subclases
de Item deben tener implementado los métodos: getHeaderArray(), next(),
getTotal() y asArray().

src/lib/Item.php
src/lib/listador.php [new file with mode: 0644]

index 152fa53359add45b60a9a8ac88e3651622781d01..550b26e6c661dcb7a0149b3f9c74a1b64e4acae7 100644 (file)
@@ -21,10 +21,41 @@ class Item
     var $autor;
     var $fecha;
     var $texto;
-
+    // Campos a mostrar
+    var $campos = array('Fecha', 'Autor', 'Texto');
 
     function toHTML()
     {
+        trigger_error("NO IMPLEMENTADO!!!", E_USER_WARNING);
+        return "NO IMPLEMENTADO";
+    }
+
+    // Carga en el objeto el próximo ítem disponible.
+    function next()
+    {
+        trigger_error("NO IMPLEMENTADO!!!", E_USER_WARNING);
+        return false;
+    }
+
+    // Devuelve cantidad total de ítems disponibles.
+    function getTotal()
+    {
+        trigger_error("NO IMPLEMENTADO!!!", E_USER_WARNING);
+        return 0;
+    }
+
+    // Obtiene cabeceras para el listador como un array.
+    function getHeaderArray()
+    {
+        return $this->campos;
+    }
+
+    // Devuelve los campos a listar del objeto actual como un array.
+    function asArray()
+    {
+        $arr = array();
+        foreach ($this->campos as $campo) $arr[] = $this->$campo;
+        return $arr;
     }
 
 }
diff --git a/src/lib/listador.php b/src/lib/listador.php
new file mode 100644 (file)
index 0000000..9d42231
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+// vim: set binary noeol et sw=4 sts=4 :
+// Grupo 10
+//
+// Lucarella, Schein, Arena
+//
+// Creado: Leandro Lucarella (lun may  2 15:36:09 ART 2005)
+//
+// $Id$
+
+/**
+ * Listador genérico de ítems. Usa las variables de GET lista_from.
+ */
+function listar($item, $summary = null, $caption = null, $cant = 15, $link = '')
+{
+    if (!$summary) $summary = 'Listado de ' . get_class($item) . 's';
+    printf('<table border="1" summary="%s">\n', $summary);
+    if ($caption) printf('    <caption>%s</caption>\n', $caption);
+    printf('    <thead>\n');
+    printf('    <tr>\n');
+    foreach ($item->getHeaderArray() as $header)
+        printf('        <th>%s</th>\n', $header);
+    printf('    </tr>\n');
+    printf('    </thead>\n');
+    printf('    <tbody>\n');
+    $total = $item->getTotal();
+    $from = intval(@$_GET["lista_from"]);
+    $c = min($total - $from, $cant);
+    $item->seek($from);
+    while ($item->next() and $c--)
+    {
+        printf('    <tr>\n');
+        foreach ($item->asArray() as $i) printf('        <td>%s</td>\n', $i);
+        printf('    </tr>\n');
+    }
+    printf('    </tbody>\n');
+    printf('</table>\n');
+    printf('<table summary="Paginador" border="0"><tr>\n');
+    $pags = ceil($total / $cant);
+    for ($i = 0; $i < $pags; ++$i)
+    {
+        printf('<td><a href="%s?lista_from=%d">%s</a></td>\n', $link, $i * $cant, $i + 1);
+    }
+    printf('</tr></table>\n');
+}
+
+?>
\ No newline at end of file