/** * Paginador para listados. */ public static function pager($paramsMap) { // Agrega params de ordenamiento al paginador. $model = Model::getInstance(); $paramsMap['dir'] = $model->get('dir'); // puede no estar $paramsMap['sort'] = $model->get('sort'); // puede no estar $bodyPrev = isset($paramsMap['bodyPrev']) ? $paramsMap['bodyPrev'] : "Previo"; $paramsMap['bodyPrev'] = NULL; $bodyNext = isset($paramsMap['bodyNext']) ? $paramsMap['bodyNext'] : "Siguiente"; $paramsMap['bodyNext'] = NULL; // Las reglas para filtrar offset y max estan en PersistentObject::filtrarParams //$offset = (isset($paramsMap['offset'])) ? $paramsMap['offset'] : '0'; //$max = (isset($paramsMap['max'])) ? $paramsMap['max'] : '50'; $filteredParams = PersistentObject::filtrarParams(new ArrayObject($paramsMap)); $offset = $filteredParams['offset']; $max = $filteredParams['max']; if (!isset($paramsMap['count'])) { throw new Exception("El parametro 'count' es obligatorio y no aparece en la lista de parametros"); } $count = $paramsMap['count']; $paramsMap['count'] = NULL; // El helper link necesita la accion, le paso la accion actual. $ctx = YuppContext::getInstance(); $paramsMap['action'] = $ctx->getAction(); // Agregado de params de filtrado a links (http://code.google.com/p/yupp/issues/detail?id=49) $_params = $model->getAll(); // params + lo que metio el controller como model para la view foreach ($_params as $k => $v) { if (String::startsWith($k, 'filter_')) { $paramsMap[$k] = $v; } } $linkPrev = ""; if ($offset - $max >= 0) { // Link previo $paramsMap['body'] = $bodyPrev; $paramsMap['offset'] = $offset - $max; $linkPrev = '[ ' . self::link($paramsMap) . ' ] '; } // pagina actual / cantidad de paginas $pagerState = floor($offset / $max) + 1 . ' / ' . ($count == 0 ? '1' : ceil($count / $max)); $linkNext = ""; if ($offset + $max < $count) { // Link Siguiente $paramsMap['body'] = $bodyNext; $paramsMap['offset'] = $offset + $max; $linkNext = ' [ ' . self::link($paramsMap) . ' ] '; } return $linkPrev . $pagerState . $linkNext; }