Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/05/2013, 10:08
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
¿array to string conversion?

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 original
  1. class Paginacion
  2. {
  3.     public function __construct()
  4.     {
  5.     }
  6.     public function calcular_paginas($filas_totales, $filas_por_pagina, $numero_pagina)
  7.     {
  8.         $arr = array();
  9.         // calcula la última página
  10.         $ultima_pagina = ceil($filas_totales / $filas_por_pagina);
  11.         // asegurarnos de que estamos dentro de los límites
  12.         $numero_pagina = (int) $numero_pagina;
  13.         if ($numero_pagina < 1)
  14.         {
  15.            $numero_pagina = 1;
  16.         }
  17.         elseif ($numero_pagina > $ultima_pagina)
  18.         {
  19.            $numero_pagina = $ultima_pagina;
  20.         }
  21.        
  22.         //calculo el primer valor de LIMIT para el MYSQL
  23.         //el primer valor es para decirle desde qué fila comienza a mostrar resultados
  24.         $desde = ($numero_pagina - 1) * $filas_por_pagina;
  25.        
  26.         //paso a un array el LIMIT para la consulta MYSQL
  27.         //el código original en vez de recibir para el LIMIT la variable $filas_totales
  28.         //recibía la variable $filas_por_pagina, esto ha sido corregido porque daba un error
  29.         //de cálculo
  30.         $arr['limit'] = 'LIMIT '.$desde.',' .$filas_totales;
  31.        
  32.         //paso a array el numero de pagina
  33.         $arr['numero_pagina'] = $numero_pagina;
  34.        
  35.         //si el numero de pagina actual es igual a 1
  36.         if ($numero_pagina == 1)
  37.         {
  38.             //paso a array el valor de la pagina actual
  39.             $arr['previous'] = $numero_pagina;
  40.         }
  41.         //sino, si es diferente el previous es igual a la página actual -1
  42.         else
  43.         {
  44.             $arr['previous'] = $numero_pagina - 1;
  45.         }
  46.        
  47.         //paso a array el limite del "página siguiente"
  48.         if ($numero_pagina == $ultima_pagina)
  49.         {
  50.             $arr['next'] = $ultima_pagina;
  51.         }
  52.         //sino
  53.         else
  54.         {
  55.             //calculo el "pagina siguiente" sumandole a la pagina actual +1
  56.             $arr['next'] = $numero_pagina + 1;
  57.            
  58.             //asigno a un boton de "ir a ultima pagina" el valor de la última pagina
  59.             $arr['last'] = $ultima_pagina;
  60.            
  61.             //asigno a un array la "pagina actual" y la "ultima pagina" para un cuadro
  62.             //informativo de por ejemplo "pagina 1 de 20"
  63.             $arr['info'] = 'Página ('.$numero_pagina.' de '.$ultima_pagina.')';
  64.            
  65.             //devuelve un array con todos los datos que necesitamos para continuar con el ciclo de paginación
  66.             $arr['pages'] = $this->obtener_paginas_circundantes($numero_pagina, $ultima_pagina, $arr['next']);
  67.             return $arr;
  68.         }
  69.     }
  70.     function obtener_paginas_circundantes($numero_pagina, $ultima_pagina, $siguiente)
  71.     {
  72.         $arr = array();
  73.        
  74.         // cuantas paginas circundantes mostrar
  75.         $mostrar = 5;
  76.        
  77.         // al principio
  78.        
  79.         //en caso de solo una pagina
  80.         if ($numero_pagina == 1)
  81.         {
  82.             if ($siguiente == $numero_pagina) return array(1);
  83.            
  84.             //controla que no se rompan las paginaciones circundantes
  85.             for ($i = 0; $i < $mostrar; $i++)
  86.             {
  87.                 //si llega a la última página no genera más botones siguientes
  88.                 if ($i == $ultima_pagina) break;
  89.                
  90.                 //sino suma valores a más botones
  91.                 array_push($arr, $i + 1);
  92.             }
  93.             return $arr;
  94.         }
  95.         // por fin
  96.        
  97.         //si me encuentro en la última página
  98.         if ($numero_pagina == $ultima_pagina)
  99.         {
  100.             //calculo cuantos botones circundantes "anteriores" mostraré
  101.             $comienzo = $ultima_pagina - $mostrar;
  102.            
  103.             //si estoy en la primera página entonces no hay botones
  104.             //circundantes "anteriores" que mostrar
  105.             if ($comienzo < 1) $comienzo = 0;
  106.            
  107.             //calcula el valor para el botón siguiente
  108.             for ($i = $comienzo; $i < $ultima_pagina; $i++)
  109.             {
  110.                 array_push($arr, $i + 1);
  111.             }
  112.             return $arr;
  113.         }
  114.         // en el medio
  115.        
  116.         //calcula botones del medio
  117.         $comienzo = $numero_pagina - $mostrar;
  118.        
  119.         //si está en la página 1 entonces LIMIT comienza a mostrar datos desde 0
  120.         if ($comienzo < 1) $comienzo = 0;
  121.        
  122.         //asigna valores a los botones del medio (circundantes)
  123.         for ($i = $comienzo; $i < $numero_pagina; $i++)
  124.         {
  125.             array_push($arr, $i + 1);
  126.         }
  127.        
  128.         //asigna valores a los botones posteriores de la pagina actual
  129.         for ($i = ($numero_pagina + 1); $i < ($numero_pagina + $mostrar); $i++)
  130.         {
  131.             if ($i == ($ultima_pagina + 1)) break;
  132.             array_push($arr, $i);
  133.         }
  134.         return $arr;
  135.     }
  136. }


controlador.php

Código PHP:
Ver original
  1. //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
  2.  
  3.             $paginar_clase = new Paginacion();
  4.             $a_paginacion = $paginar_clase->calcular_paginas($paginacion, $datos_por_pagina, $pagina_clase);
  5. //este var_dump(); me muestra el siguiente tipo y contenido del array
  6. //array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }
  7.             var_dump($a_paginacion['pages']);
  8.  
  9. //este print_r(); me muestra lo siguiente
  10. //Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
  11.             print_r($a_paginacion['pages']);
  12.            
  13. //al boton paginar hacia atrás le paso el valor previous
  14.             paginar_atras($a_paginacion['previous']);
  15.            
  16. //a los botones intermedios le paso el valor que se encuentra en forma de arreglo recorriendolos con un foreach
  17.  
  18.             foreach($a_paginacion as $a_paginacion)
  19.             {
  20.                 numeros_paginas($a_paginacion['pages']);
  21.             }
  22. //al boton paginar hacia adelante le paso el valor next
  23.  
  24.             paginar_adelante($a_paginacion['next']);
  25. //imprimo un info tipo pagina 1 de 10 por ejemplo
  26.  
  27.             echo $a_paginacion['info'];

Botones HTML
Código PHP:
Ver original
  1. //visual para paginar
  2.     function paginar_atras($ide)
  3.     {
  4.     ?>
  5.         <form method="post" action="blog_index.php">
  6.             <input type="image" src="img/green/arrow-left.png" name="post_atras" value="<?php echo $ide; ?>" />
  7.         </form>
  8.     <?php
  9.     }
  10.  
  11. //botones intermedios en los que me da problema insertar el valor
  12.  
  13.     function numeros_paginas($ide)
  14.     {
  15.     ?>
  16.         <form method="post" action="blog_index.php">
  17.             <input type="submit" name="num_pag" value="<?php echo $ide; ?>"  />
  18.         </form>
  19.     <?php
  20.     }
  21.     function paginar_adelante($ide)
  22.     {
  23.     ?>
  24.         <form method="post" action="blog_index.php">
  25.             <!-- <input type="hidden" name="adelante" value="<?php $ide; ?>" /> -->
  26.             <input type="image" src="img/green/arrow-right.png" name="post_adelante" value="<?php echo $ide; ?>" />
  27.         </form>
  28.     <?php
  29.     }