KumbiaPHP beta2-dev
Framework PHP en español
paginate.php
Ir a la documentación de este archivo.
00001 <?php
00023 class Paginator
00024 {
00063     public static function paginate ($model)
00064     {
00065         $params = Util::getParams(func_get_args());
00066         $page_number = isset($params['page']) ? (int) $params['page'] : 1;
00067         $per_page = isset($params['per_page']) ? (int) $params['per_page'] : 10;
00068         //Si la página o por página es menor de 1 (0 o negativo)
00069         if ($page_number < 1 && $per_page < 1) {
00070             throw new KumbiaException("La página $page_number no existe en el páginador");
00071         }
00072         $start = $per_page * ($page_number - 1);
00073         //Instancia del objeto contenedor de página
00074         $page = new stdClass();
00075         //Si es un array, se hace páginacion de array
00076         if (is_array($model)) {
00077             $items = $model;
00078             $n = count($items);
00079             //si el inicio es superior o igual al conteo de elementos,
00080             //entonces la página no existe, exceptuando cuando es la página 1
00081             if ($page_number > 1 && $start >= $n) {
00082                 throw new KumbiaException("La página $page_number no existe en el páginador");
00083             }
00084             $page->items = array_slice($items, $start, $per_page);
00085         } else {
00086             //Arreglo que contiene los argumentos para el find
00087             $find_args = array();
00088             $conditions = null;
00089             //Asignando Parámetros de busqueda
00090             if (isset($params['conditions'])) {
00091                 $conditions = $params['conditions'];
00092             } elseif (isset($params[1])) {
00093                 $conditions = $params[1];
00094             }
00095             if (isset($params['columns'])) {
00096                 $find_args[] = "columns: {$params['columns']}";
00097             }
00098             if (isset($params['join'])) {
00099                 $find_args[] = "join: {$params['join']}";
00100             }
00101             if (isset($params['group'])) {
00102                 $find_args[] = "group: {$params['group']}";
00103             }
00104             if (isset($params['having'])) {
00105                 $find_args[] = "having: {$params['having']}";
00106             }
00107             if (isset($params['order'])) {
00108                 $find_args[] = "order: {$params['order']}";
00109             }
00110             if (isset($params['distinct'])) {
00111                 $find_args[] = "distinct: {$params['distinct']}";
00112             }
00113             if (isset($conditions)) {
00114                 $find_args[] = $conditions;
00115             }
00116             //contar los registros
00117             $n = call_user_func_array(array($model , 'count'), $find_args);
00118             //si el inicio es superior o igual al conteo de elementos,
00119             //entonces la página no existe, exceptuando cuando es la página 1
00120             if ($page_number > 1 && $start >= $n) {
00121                 throw new KumbiaException("La página $page_number no existe en el páginador");
00122             }
00123             //Asignamos el offset y limit
00124             $find_args[] = "offset: $start";
00125             $find_args[] = "limit: $per_page";
00126             //Se efectua la busqueda
00127             $page->items = call_user_func_array(array($model , 'find'), $find_args);
00128         }
00129         //Se efectuan los calculos para las páginas
00130         $page->next = ($start + $per_page) < $n ? ($page_number + 1) : false;
00131         $page->prev = ($page_number > 1) ? ($page_number - 1) : false;
00132         $page->current = $page_number;
00133         $page->total = ceil($n / $per_page);
00134         $page->count = $n;
00135         $page->per_page = $per_page;
00136         return $page;
00137     }
00161     public static function paginate_by_sql ($model, $sql)
00162     {
00163         $params = Util::getParams(func_get_args());
00164         $page_number = isset($params['page']) ? (int) $params['page'] : 1;
00165         $per_page = isset($params['per_page']) ? (int) $params['per_page'] : 10;
00166         //Si la página o por página es menor de 1 (0 o negativo)
00167         if ($page_number < 1 || $per_page < 1) {
00168             throw new KumbiaException("La página $page_number no existe en el páginador");
00169         }
00170         $start = $per_page * ($page_number - 1);
00171         //Instancia del objeto contenedor de página
00172         $page = new stdClass();
00173         //Cuento las apariciones atraves de una tabla derivada
00174         $n = $model->count_by_sql("SELECT COUNT(*) FROM ($sql) AS t");
00175         //si el inicio es superior o igual al conteo de elementos,
00176         //entonces la página no existe, exceptuando cuando es la página 1
00177         if ($page_number > 1 && $start >= $n) {
00178             throw new KumbiaException("La página $page_number no existe en el páginador");
00179         }
00180         $page->items = $model->find_all_by_sql($model->limit($sql, "offset: $start", "limit: $per_page"));
00181         //Se efectuan los calculos para las páginas
00182         $page->next = ($start + $per_page) < $n ? ($page_number + 1) : false;
00183         $page->prev = ($page_number > 1) ? ($page_number - 1) : false;
00184         $page->current = $page_number;
00185         $page->total = ceil($n / $per_page);
00186         $page->count = $n;
00187         $page->per_page = $per_page;
00188         return $page;
00189     }
00190 }
 Todo Estructuras de Datos Namespaces Archivos Funciones Variables Enumeraciones