/** * Método para generar un mensaje de alerta, párametros que puede recibir: "icon: icono", "title: ", "subtext: ", "name: ", "autoOpen: " * @param type $text * @param type $params * @return type */ public static function alert($text, $params = '') { //Extraigo los parametros $params = Util::getParams(func_get_args()); $icon = isset($params['icon']) ? $params['icon'] : 'icon-exclamation-sign'; $title = isset($params['title']) ? '<i class="' . $icon . '" style="padding-right:5px; margin-top:5px;"></i>' . $params['title'] : null; $subtext = isset($params['subtext']) ? "<p style='margin-top: 10px'>{$params['subtext']}</p>" : null; $name = isset($params['name']) ? trim($params['name'], '()') : "dwModal" . rand(10, 5000); $autoOpen = isset($params['autoOpen']) ? true : false; $modal = '<div class="modal hide" id="' . $name . '">'; $modal .= '<div class="modal-header">'; $modal .= '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>'; $modal .= $title ? "<h3>{$title}</h3>" : ''; $modal .= '</div>'; $modal .= "<div class=\"modal-body\">{$text} {$subtext}</div>"; $modal .= '<div class="modal-footer">'; $modal .= '<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Aceptar</button>'; $modal .= '</div>'; $modal .= '</div>'; $modal .= '<script type="text/javascript">'; $modal .= "function {$name}() { \$('#{$name}').modal('show'); }; "; if ($autoOpen) { $modal .= '$(function(){ ' . $name . '(); });'; } $modal .= "\$('#{$name}').on('shown', function () { \$('.btn-primary', '#{$name}').focus(); });"; $modal .= '</script>'; return $modal . PHP_EOL; }
/** * Enruta el controlador actual a otro módulo, controlador, o a otra acción * @deprecated Se mantiene por legacy temporalmente * @example * Redirect::route_to("module: modulo", "controller: nombre", "action: accion", "parameters: 1/2") */ public static function route_to() { static $cyclic = 0; $url = Util::getParams(func_get_args()); if (isset($url['module'])) { $vars['module'] = $url['module']; $vars['controller'] = 'index'; $vars['action'] = 'index'; $vars['parameters'] = array(); $vars['controller_path'] = $url['module'] . '/index'; } if (isset($url['controller'])) { $vars['controller'] = $url['controller']; $vars['action'] = 'index'; $vars['parameters'] = array(); $vars['controller_path'] = isset($url['module']) ? $url['module'] . '/' . $url['controller'] : $url['controller']; } if (isset($url['action'])) { $vars['action'] = $url['action']; $vars['parameters'] = array(); } if (isset($url['parameters'])) { $vars['parameters'] = explode('/', $url['parameters']); } elseif (isset($url['id'])) { // Deprecated $vars['parameters'] = array($url['id']); } else { $vars['parameters'] = array(); } if (++$cyclic > 1000) { throw new KumbiaException('Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad'); } Router::to($vars, TRUE); }
/** * Constructor del Autenticador * * @param string $adapter */ public function __construct() { $extra_args = Util::getParams(func_get_args()); if (isset($extra_args[0])) { $adapter = $extra_args[0]; unset($extra_args[0]); } else { $adapter = 'model'; } $this->set_adapter($adapter, $this, $extra_args); }
/** * Agrega un nodo a la salida XML * * <code> * $xml->addNode(array('value' => 1, 'text' => 'Prueba', 'selected' => '0')); * $xml->addNode('value: 1', 'text: Prueba', 'selected: 0'); * </code> * * @param array $arr */ public function add_node($arr) { $this->_xml->startElement('row'); if (!is_array($arr)) { $arr = Util::getParams(func_get_args()); } foreach ($arr as $key => $value) { $this->_xml->writeAttribute($key, $value); } $this->_xml->endElement(); }
public static function imagen($imagen, $alt = "", $w = 0, $h = 0) { $params = is_array($imagen) ? $imagen : Util::getParams(func_get_args()); if ($alt != "") { $params["alt"] = str_replace(":", "###", $alt); $params["title"] = str_replace(":", "###", $alt); } if ($w != "") { $params["width"] = $w; } if ($h != "") { $params["height"] = $h; } $params["border"] = "0"; return str_replace("###", ":", img_tag($params)); }
public static function formularioInicio($accion, $contenedor = "ajax", $referencia = 0) { $params = is_array($accion) ? $accion : Util::getParams(func_get_args()); $params["enctype"] = "multipart/form-data"; if ($referencia == 0) { $referencia = rand(0, 999999); } $params["name"] = "f" . $referencia; $params["id"] = "f" . $referencia; $opciones = 'target: "#' . $contenedor . '"'; if (isset($params["success"])) { $opciones .= ', success: function() { ' . $params["success"] . ' }'; } if (isset($params["before"])) { $opciones .= ', beforeSubmit: function() { ' . $params["before"] . ' }'; } $code = '<script type="text/javascript"> $.metadata.setType("attr", "validate"); $(document).ready(function() { $("#' . $params["id"] . '").validate({}); $("#' . $params["id"] . '").ajaxForm({ ' . $opciones . ' }); }); </script>'; $code .= form_tag($params); return $code; }
/** * Enrutamiento interno * @example * Redirect::intern("module: modulo", "controller: nombre", "action: accion", "parameters: 1/2") */ public static function internal() { static $cyclic = 0; $url = Util::getParams(func_get_args()); $default = array('controller' => 'index', 'action' => 'index'); $url['parameters'] = isset($url['parameters']) ? explode('/', $url['parameters']) : array(); if (isset($url['module'])) { $vars = $url + $default; $vars['controller_path'] = $vars['module'] . '/' . $vars['controller']; } elseif (isset($url['controller'])) { $vars = $url + $default; $vars['controller_path'] = $vars['controller']; } else { $vars = $url; } if (++$cyclic > 1000) { throw new KumbiaException('Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad'); } Router::to($vars, TRUE); }
/** * Enruta a un modelo, controlador, accion y pasa parámetros */ public static function toRoute() { $url = Util::getParams(func_get_args()); if (!isset($url['module'])) { $url['module'] = null; } if (!isset($url['action'])) { $url['action'] = 'index'; } if (!isset($url['parameters'])) { $url['parameters'] = null; } if (Input::isAjax() && APP_AJAX) { $href = trim("{$url['module']}/{$url['controller']}/{$url['action']}/{$url['parameters']}/", '/'); echo DwJs::setUrl($href); } if ($url['parameters'] == null) { Redirect::route_to("module: {$url['module']}", "controller: {$url['controller']}", "action: {$url['action']}"); } else { Redirect::route_to("module: {$url['module']}", "controller: {$url['controller']}", "action: {$url['action']}", "parameters: {$url['parameters']}"); } }
public static function imagen($imagen, $alt = "", $radio = true) { $params = is_array($imagen) ? $imagen : Util::getParams(func_get_args()); if ($alt != "") { $params["alt"] = str_replace(":", "###", $alt); $params["title"] = str_replace(":", "###", $alt); } $params["border"] = "0"; if ($radio) { $params["id"] = "jcrop"; } else { $params["id"] = "jcropRECTANGULO"; } $code = str_replace("###", ":", img_tag($params)); $code .= '<input type="hidden" size="4" id="imagen" name="imagen" value="' . $imagen . '" /> <input type="hidden" size="4" id="x1" name="x1" /> <input type="hidden" size="4" id="y1" name="y1" /> <input type="hidden" size="4" id="x2" name="x2" /> <input type="hidden" size="4" id="y2" name="y2" /> <input type="hidden" size="4" id="w" name="w" /> <input type="hidden" size="4" id="h" name="h" />'; return $code; }
/** * Método para generar un mensaje de alerta, párametros que puede recibir: "icon: icono", "title: ", "subtext: ", "name: ", "autoOpen: " * @param type $text * @param type $params * @return type */ public static function alert($text, $params = '') { //Extraigo los parametros $params = Util::getParams(func_get_args()); $icon = isset($params['icon']) ? $params['icon'] : 'fa-exclamation-sign'; $title = isset($params['title']) ? '<i class="' . $icon . '" style="padding-right:5px; margin-top:5px;"></i>' . $params['title'] : null; $subtext = isset($params['subtext']) ? "<p style='margin-top: 10px'>{$params['subtext']}</p>" : null; $name = isset($params['name']) ? trim($params['name'], '()') : "dwModal" . rand(10, 5000); $autoOpen = isset($params['autoOpen']) ? true : false; $button = isset($params['show_button']) && Filter::get($params['show_button'], 'lower') == 'false' ? false : true; $style = isset($params['style']) ? $params['style'] : ''; $modal = '<div class="modal fade" tabindex="-1" id="' . $name . '" role="dialog" aria-labelledby="' . $name . '" aria-hidden="true">'; $modal .= '<div class="modal-dialog" style="' . $style . '">'; $modal .= '<div class="modal-content">'; $modal .= '<div class="modal-header">'; $modal .= '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>'; $modal .= $title ? "<h4 class=\"modal-title\">{$title}</h4>" : ''; $modal .= '</div>'; $modal .= "<div class=\"modal-body\">{$text} {$subtext}</div>"; if ($button) { $modal .= '<div class="modal-footer">'; $modal .= '<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Aceptar</button>'; $modal .= '</div>'; } $modal .= '</div>'; $modal .= '</div>'; $modal .= '</div>'; $modal .= self::open(); $modal .= "function {$name}() { \$('#{$name}').modal('show'); }; "; if ($autoOpen) { $modal .= '$(function(){ ' . $name . '(); });'; } $modal .= "\$('#{$name}').on('shown.bs.modal', function () { \$('.btn-primary', '#{$name}').focus(); });"; $modal .= self::close(); return $modal; }
public function setMimes($name) { $params = is_array($name) ? $name : Util::getParams(func_get_args()); $this->array_mimes = $params; }
/** * Devuelve un LIMIT valido para un SELECT del RBDM * * @param string $sql * @return string */ public function limit($sql) { $params = Util::getParams(func_get_args()); $limit = ''; if (isset($params['offset'])) { $limit .= " SKIP {$params['offset']}"; } if (isset($params['limit'])) { $limit .= " FIRST {$params['limit']}"; } return str_ireplace("SELECT ", "SELECT {$limit} ", $sql); }
/** * Devuelve un LIMIT valido para un SELECT del RBDM * * @param string $sql consulta sql * @return string */ public function limit($sql) { $params = Util::getParams(func_get_args()); $sql_new = $sql; if (isset($params['limit']) && is_numeric($params['limit'])) { $sql_new .= " LIMIT {$params['limit']}"; } if (isset($params['offset']) && is_numeric($params['offset'])) { $sql_new .= " OFFSET {$params['offset']}"; } return $sql_new; }
/** * Método para paginar resultados utilizando el método find_all_by_sql de los modelos <br> * * Retorna un PageObject que tiene los siguientes atributos: <br> * next: numero de pagina siguiente, si no hay pagina siguiente entonces es false <br> * prev: numero de pagina anterior, si no hay pagina anterior entonces es false <br> * current: numero de pagina actual <br> * total: total de paginas que se pueden mostrar <br> * items: array de items de la pagina <br> * counter: Número que lleva el conteo de la página <br> * size: Total de registros <br> * per_page: cantidad de elementos por pagina <br> * * * @param string $model modelo * @param string $sql consulta sql * @return stdClass */ public static function paginate_by_sql($model, $sql) { $params = Util::getParams(func_get_args()); $page_number = isset($params['page']) ? Filter::get($params['page'], 'numeric') : 1; //Numero de la página $per_page = isset($params['per_page']) ? Filter::get($params['per_page'], 'numeric') : DATAGRID; //Datos por página $counter = $page_number > 1 ? $page_number * $per_page - ($per_page - 1) : 1; //Determino el contador para utilizarlo en la vista $start = $per_page * ($page_number - 1); //Determino el offset $page = new stdClass(); //Instancia del objeto contenedor de pagina $total_items = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t"); //Se cuentan los registros $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}")); //Se efectua la búsqueda //Se efectuan los cálculos para las paginas $page->next = $start + $per_page < $total_items ? $page_number + 1 : false; $page->prev = $page_number > 1 ? $page_number - 1 : false; $page->current = $page_number; $page->total_page = ceil($total_items / $per_page); if ($page->total_page < $page_number && $total_items > 0) { $page->prev = false; $url = Router::get('route'); $url = explode('pag', $url); $url = trim($url[0], '/'); DwMessage::error('La página solicitada no se encuentra en el paginador. <br />' . DwHtml::link($url, 'Regresar a la página 1')); } $page->counter = $total_items >= $counter ? $counter : 1; $page->size = $total_items; $page->per_page = $per_page; return $page; }
/** * Devuelve un LIMIT válido para un SELECT del RBDM * * @param string $sql consulta sql * @return string */ public function limit($sql) { $params = Util::getParams(func_get_args()); //TODO: añadirle el offset if (isset($params['limit'])) { $sql = str_ireplace("SELECT ", "SELECT TOP {$params['limit']} ", $sql); } return $sql; }
/** * páginador por sql * * @param object $model Modelo a paginar * @param string $sql Consulta sql * * page: número de página a mostrar (por defecto la página 1) * per_page: cantidad de registros por página (por defecto 10 registros por página) * * * Retorna un PageObject que tiene los siguientes atributos: * next: numero de página siguiente, si no hay página siguiente entonces es false * prev: numero de página anterior, si no hay página anterior entonces es false * current: numero de página actual * total: total de páginas que se pueden mostrar * items: array de registros de la página * count: Total de registros * * @example * $page = paginate_by_sql('usuario', 'SELECT * FROM usuario' , 'per_page: 5', "page: $page_num"); * * @return stdClass * */ public static function paginate_by_sql($model, $sql) { $params = Util::getParams(func_get_args()); $page_number = isset($params['page']) ? (int) $params['page'] : 1; $per_page = isset($params['per_page']) ? (int) $params['per_page'] : 10; //Si la página o por página es menor de 1 (0 o negativo) if ($page_number < 1 || $per_page < 1) { throw new KumbiaException("La página {$page_number} no existe en el páginador"); } $start = $per_page * ($page_number - 1); //Instancia del objeto contenedor de página $page = new stdClass(); //Cuento las apariciones atraves de una tabla derivada $n = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t"); //si el inicio es superior o igual al conteo de elementos, //entonces la página no existe, exceptuando cuando es la página 1 if ($page_number > 1 && $start >= $n) { throw new KumbiaException("La página {$page_number} no existe en el páginador"); } $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}")); //Se efectuan los calculos para las páginas $page->next = $start + $per_page < $n ? $page_number + 1 : false; $page->prev = $page_number > 1 ? $page_number - 1 : false; $page->current = $page_number; $page->total = ceil($n / $per_page); $page->count = $n; $page->per_page = $per_page; return $page; }
public static function textarea($nombre, $valor = "") { $params = is_array($nombre) ? $nombre : Util::getParams(func_get_args()); $params["name"] = $nombre; $params["id"] = $nombre; $params[1] = $valor; return textarea_tag($params); }
/** * Devuelve un LIMIT valido para un SELECT del RBDM * * @param string $sql * @return string */ public function limit($sql) { $params = Util::getParams(func_get_args()); if (!isset($params['offset']) && isset($params['limit'])) { return str_ireplace("SELECT ", "SELECT TOP {$params['limit']} ", $sql); } $orderby = stristr($sql, 'ORDER BY'); if ($orderby !== false) { $sort = stripos($orderby, 'desc') !== false ? 'desc' : 'asc'; $order = str_ireplace('ORDER BY', '', $orderby); $order = trim(preg_replace('/ASC|DESC/i', '', $order)); } $sql = preg_replace('/^SELECT\\s/i', 'SELECT TOP ' . $params[offset] . ' ', $sql); $sql = 'SELECT * FROM (SELECT TOP ' . $params[limit] . ' * FROM (' . $sql . ') AS itable'; if ($orderby !== false) { $sql .= ' ORDER BY ' . $order . ' '; $sql .= stripos($sort, 'asc') !== false ? 'DESC' : 'ASC'; } $sql .= ') AS otable'; if ($orderby !== false) { $sql .= ' ORDER BY ' . $order . ' ' . $sort; } return $sql; }
/** * Crea una relacion n-n o 1-n inversa entre dos modelos * * @param string $relation * * model : nombre del modelo al que se refiere * fk : campo por el cual se relaciona (llave foranea) * key: campo llave que identifica al propio modelo * through : atrav�s de que tabla */ protected function has_and_belongs_to_many($relation) { $params = Util::getParams(func_get_args()); for ($i = 0; isset($params[$i]); $i++) { $relation = Util::smallcase($params[$i]); if (!array_key_exists($relation, $this->_has_and_belongs_to_many)) { $this->_has_and_belongs_to_many[$relation] = new stdClass(); $this->_has_and_belongs_to_many[$relation]->model = isset($params['model']) ? $params['model'] : $relation; $this->_has_and_belongs_to_many[$relation]->fk = isset($params['fk']) ? $params['fk'] : "{$relation}_id"; $this->_has_and_belongs_to_many[$relation]->key = isset($params['key']) ? $params['key'] : Util::smallcase(get_class($this)) . '_id'; if (isset($params['through'])) { $this->_has_and_belongs_to_many[$relation]->through = $params['through']; } } } }
/** * Renderiza una vista parcial * * @param string $partial vista a renderizar * @param string $__time tiempo de cache * @param array $params * @param string $group grupo de cache * @return string * @throw KumbiaException */ public static function partial($partial, $__time = '', $params = NULL, $group = 'kumbia.partials') { if (PRODUCTION && $__time && !Cache::driver()->start($__time, $partial, $group)) { return; } //Verificando el partials en el dir app $__file = APP_PATH . "views/_shared/partials/{$partial}.phtml"; if (!is_file($__file)) { //Verificando el partials en el dir core $__file = CORE_PATH . "views/partials/{$partial}.phtml"; } if ($params) { if (is_string($params)) { $params = Util::getParams(explode(',', $params)); } // carga los parametros en el scope extract($params, EXTR_OVERWRITE); } // carga la vista parcial if (!(include $__file)) { throw new KumbiaException('Vista Parcial "' . $__file . '" no se encontro'); } // se guarda en la cache de ser requerido if (PRODUCTION && $__time) { Cache::driver()->end(); } }
/** * Permite incluir un objeto flash dentro de una vista respetando * las convenciones de directorios y rutas en Kumbia * * @param string $data url del archivo flash con o sin extension .swf<br/> * height: Alto del flash<br/> * width: Ancho del flash<br/> * wmode: Modo en que se muestra el flash * * @return string */ function swf_tag($data) { $params = is_array($data) ? $data : Util::getParams(func_get_args()); if (!isset($params['data']) && isset($params[0])) { $temp = str_replace(".swf", "", $params[0]); $params['data'] = PUBLIC_PATH . "swf/{$temp}.swf"; unset($params[0]); } else { $temp = str_replace(".swf", "", $params['data']); $params['data'] = PUBLIC_PATH . "swf/{$temp}.swf"; } if (!isset($params['type'])) { $params['type'] = 'application/x-shockwave-flash'; } if (!isset($params['wmode'])) { $wmode = 'transparent'; } else { $wmode = $params['wmode']; unset($params['wmode']); } $code = xhtml_start_tag('object', $params); $code .= '<param name="movie" value="' . $params['data'] . '" />'; $code .= '<param name="wmode" value="' . $wmode . '" />'; $code .= xhtml_end_tag('object'); return $code; }
/** * Realiza un conteo de filas * * @param string $what * @return integer */ public function count($what = '') { $what = Util::getParams(func_get_args()); if ($this->schema) { $table = "{$this->schema}.{$this->source}"; } else { $table = $this->source; } unset($what['order']); if (isset($what['distinct']) && $what['distinct']) { if (isset($what['group'])) { $select = "SELECT COUNT(*) FROM (SELECT DISTINCT {$what['distinct']} FROM {$table} "; $select .= $this->convert_params_to_sql($what); $select .= ') AS t '; } else { $select = "SELECT COUNT(DISTINCT {$what['distinct']}) FROM {$table} "; $select .= $this->convert_params_to_sql($what); } } else { if (isset($what['group']) && isset($what['paginated'])) { $select = "SELECT COUNT(*) FROM (SELECT {$table}.* FROM {$table} "; $select .= $this->convert_params_to_sql($what); $select .= ') AS t'; } else { $select = "SELECT COUNT(*) FROM {$table} "; $select .= $this->convert_params_to_sql($what); } } $num = $this->db->fetch_one($select); return $num[0]; }
/** * Enruta el controlador actual a otro controlador, o a otra acción * Ej: * <code> * kumbia::route_to(["module: modulo"], "controller: nombre", ["action: accion"], ["id: id"]) * </code> * * @return null */ public static function route_to() { static $cyclic = 0; self::$vars['routed'] = false; $cyclic_routing = false; $url = Util::getParams(func_get_args()); //print_r ($url); if (isset($url['module'])) { // Verifica para asignar correctamente los parametros en all_parameters, // efectuando los debidos corrimientos de ser necesario if (self::$vars['module']) { self::$vars['all_parameters'][0] = $url['module']; } else { array_unshift(self::$vars['all_parameters'], $url['module']); } self::$vars['module'] = $url['module']; self::$vars['controller'] = 'index'; self::$vars['action'] = "index"; self::$vars['routed'] = true; } if (isset($url['controller'])) { self::$vars['controller'] = $url['controller']; // Verifica para asignar correctamente los parametros en all_parameters, // efectuando los debidos corrimientos de ser necesario if (self::$vars['module']) { self::$vars['all_parameters'][1] = $url['controller']; } else { self::$vars['all_parameters'][0] = $url['controller']; } self::$vars['action'] = "index"; self::$vars['routed'] = true; $app_controller = util::camelcase($url['controller']) . "Controller"; } if (isset($url['action'])) { self::$vars['action'] = $url['action']; // Verifica para asignar correctamente los parametros en all_parameters, // efectuando los debidos corrimientos de ser necesario if (self::$vars['module']) { self::$vars['all_parameters'][2] = $url['action']; } else { self::$vars['all_parameters'][1] = $url['action']; } self::$vars['routed'] = true; } if (isset($url['id'])) { self::$vars['id'] = $url['id']; /** * Verifico para asignar correctamente los parametros en all_parameters, * efectuando los debidos corrimientos de ser necesario **/ if (self::$vars['module']) { self::$vars['all_parameters'][3] = $url['action']; } else { self::$vars['all_parameters'][2] = $url['action']; } self::$vars['parameters'][0] = $url['id']; self::$vars['routed'] = true; } $cyclic++; if ($cyclic >= 1000) { throw new KumbiaException("Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad", 1000); } //return null; }
/** * Paginador por sql * * @param string $model nombre del modelo * @param string $sql consulta sql * * page: numero de pagina a mostrar (por defecto la pagina 1) * per_page: cantidad de elementos por pagina (por defecto 10 items por pagina) * * * Retorna un PageObject que tiene los siguientes atributos: * next: numero de pagina siguiente, si no hay pagina siguiente entonces es false * prev: numero de pagina anterior, si no hay pagina anterior entonces es false * current: numero de pagina actual * total: total de paginas que se pueden mostrar * items: array de items de la pagina * count: Total de registros * * Ejemplos: * $page = paginate_by_sql('usuario', 'SELECT * FROM usuario' , 'per_page: 5', "page: $page_num"); * * @return object **/ public static function paginate_by_sql($model, $sql) { $params = Util::getParams(func_get_args()); $page_number = isset($params['page']) ? $params['page'] : 1; $per_page = isset($params['per_page']) ? $params['per_page'] : 10; $start = $per_page * ($page_number - 1); /** * Si es una cadena, instancio el modelo **/ if (is_string($params[0])) { $m = Util::camelcase($params[0]); $model = ActiveRecord::get($m); } /** * Instancia del objeto contenedor de pagina **/ $page = new stdClass(); /** * Cuento las apariciones atraves de una tabla derivada **/ $n = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t"); $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}")); /** * Se efectuan los calculos para las paginas **/ $page->next = $start + $per_page < $n ? $page_number + 1 : false; $page->prev = $page_number > 1 ? $page_number - 1 : false; $page->current = $page_number; $page->total = $n % $per_page ? (int) ($n / $per_page) + 1 : $n / $per_page; $page->count = $n; $page->per_page = $per_page; return $page; }