a este paginador le doy unos valores de los que deduce el resto de valores para los botones del paginador.
al pasar los valores a los botones que hay entre los botones adelante y atrás me devuelve el siguiente error:
Array to string conversion in line 271
esa línea es la línea en la que le asigno los valores a la función con los botones HTML
no encuentro el problema puesto que le estoy asignando a botones un valor numérico entero que se corresponde a las páginas que un usuario necesita ver para navegar de una en una hacia delante o hacia atrás.
¿alguien puede ayudarme?
quien necesite más información solo tiene que pedirla y se la doy, gracias!!! :)
la estructura del código es la siguiente:
class_paginacion.php
estas clases las he cambiado y traducido del inglés, se encuentra en
esta web
Código PHP:
Ver original
class Paginacion { public function __construct() { } public function calcular_paginas($filas_totales, $filas_por_pagina, $numero_pagina) { // calcula la última página // asegurarnos de que estamos dentro de los límites $numero_pagina = (int) $numero_pagina; if ($numero_pagina < 1) { $numero_pagina = 1; } elseif ($numero_pagina > $ultima_pagina) { $numero_pagina = $ultima_pagina; } //calculo el primer valor de LIMIT para el MYSQL //el primer valor es para decirle desde qué fila comienza a mostrar resultados $desde = ($numero_pagina - 1) * $filas_por_pagina; //paso a un array el LIMIT para la consulta MYSQL //el código original en vez de recibir para el LIMIT la variable $filas_totales //recibía la variable $filas_por_pagina, esto ha sido corregido porque daba un error //de cálculo $arr['limit'] = 'LIMIT '.$desde.',' .$filas_totales; //paso a array el numero de pagina $arr['numero_pagina'] = $numero_pagina; //si el numero de pagina actual es igual a 1 if ($numero_pagina == 1) { //paso a array el valor de la pagina actual $arr['previous'] = $numero_pagina; } //sino, si es diferente el previous es igual a la página actual -1 else { $arr['previous'] = $numero_pagina - 1; } //paso a array el limite del "página siguiente" if ($numero_pagina == $ultima_pagina) { $arr['next'] = $ultima_pagina; } //sino else { //calculo el "pagina siguiente" sumandole a la pagina actual +1 $arr['next'] = $numero_pagina + 1; //asigno a un boton de "ir a ultima pagina" el valor de la última pagina $arr['last'] = $ultima_pagina; //asigno a un array la "pagina actual" y la "ultima pagina" para un cuadro //informativo de por ejemplo "pagina 1 de 20" $arr['info'] = 'Página ('.$numero_pagina.' de '.$ultima_pagina.')'; //devuelve un array con todos los datos que necesitamos para continuar con el ciclo de paginación $arr['pages'] = $this->obtener_paginas_circundantes($numero_pagina, $ultima_pagina, $arr['next']); return $arr; } } function obtener_paginas_circundantes($numero_pagina, $ultima_pagina, $siguiente) { // cuantas paginas circundantes mostrar $mostrar = 5; // al principio //en caso de solo una pagina if ($numero_pagina == 1) { //controla que no se rompan las paginaciones circundantes for ($i = 0; $i < $mostrar; $i++) { //si llega a la última página no genera más botones siguientes if ($i == $ultima_pagina) break; //sino suma valores a más botones } return $arr; } // por fin //si me encuentro en la última página if ($numero_pagina == $ultima_pagina) { //calculo cuantos botones circundantes "anteriores" mostraré $comienzo = $ultima_pagina - $mostrar; //si estoy en la primera página entonces no hay botones //circundantes "anteriores" que mostrar if ($comienzo < 1) $comienzo = 0; //calcula el valor para el botón siguiente for ($i = $comienzo; $i < $ultima_pagina; $i++) { } return $arr; } // en el medio //calcula botones del medio $comienzo = $numero_pagina - $mostrar; //si está en la página 1 entonces LIMIT comienza a mostrar datos desde 0 if ($comienzo < 1) $comienzo = 0; //asigna valores a los botones del medio (circundantes) for ($i = $comienzo; $i < $numero_pagina; $i++) { } //asigna valores a los botones posteriores de la pagina actual for ($i = ($numero_pagina + 1); $i < ($numero_pagina + $mostrar); $i++) { if ($i == ($ultima_pagina + 1)) break; } return $arr; } }
controlador.php
Código PHP:
Ver original
//instancio hacia la clase de paginación pasándole los valores que requiere la clase, $paginacion=el nº de filas totales, rows; $datos_por_pagina=los datos que muestra en cada página; $pagina_clase=el nº de pagina actual $paginar_clase = new Paginacion(); $a_paginacion = $paginar_clase->calcular_paginas($paginacion, $datos_por_pagina, $pagina_clase); //este var_dump(); me muestra el siguiente tipo y contenido del array //array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } //este print_r(); me muestra lo siguiente //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) //al boton paginar hacia atrás le paso el valor previous paginar_atras($a_paginacion['previous']); //a los botones intermedios le paso el valor que se encuentra en forma de arreglo recorriendolos con un foreach foreach($a_paginacion as $a_paginacion) { numeros_paginas($a_paginacion['pages']); } //al boton paginar hacia adelante le paso el valor next paginar_adelante($a_paginacion['next']); //imprimo un info tipo pagina 1 de 10 por ejemplo echo $a_paginacion['info'];
Botones HTML
Código PHP:
Ver original
//visual para paginar function paginar_atras($ide) { ?> <form method="post" action="blog_index.php"> <input type="image" src="img/green/arrow-left.png" name="post_atras" value="<?php echo $ide; ?>" /> </form> <?php } //botones intermedios en los que me da problema insertar el valor function numeros_paginas($ide) { ?> <form method="post" action="blog_index.php"> <input type="submit" name="num_pag" value="<?php echo $ide; ?>" /> </form> <?php } function paginar_adelante($ide) { ?> <form method="post" action="blog_index.php"> <!-- <input type="hidden" name="adelante" value="<?php $ide; ?>" /> --> <input type="image" src="img/green/arrow-right.png" name="post_adelante" value="<?php echo $ide; ?>" /> </form> <?php }