Estoy jugueteando con un paginador.
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 originalclass Paginacion
{
public function __construct()
{
}
public function calcular_paginas($filas_totales, $filas_por_pagina, $numero_pagina)
{
// calcula la última página
$ultima_pagina = ceil($filas_totales / $filas_por_pagina); // 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)
{
if ($siguiente == $numero_pagina) return array(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
}