Ayuda Paginacion php poo

  • Autor Autor foxtier494
  • Fecha de inicio Fecha de inicio
F

foxtier494

Alfa
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos necesito por favor una ayuda con este código estaba buscando como hacer una pagiación con php y que sea poo de forma que cuando la persona valla pasando las paginas se vallas desapareciendo y apareciendo nuevos números en la lista de paginas y se matenga estable con una longitud de paginas de 10 paginas pero si son mas pues por decir que 5 es el limite a mostrar ejemplo ( 1 2 3 4 5 ) entonces el usuario llega a 5 desaparence los 12345 y si hay mas contenido aparece 6 7 8 9 10 muy bien la paginación funciona muy bien pero tengo es el problema en mostrar la consulta de la db porque en el tutorial el imprime la consulta con print_r( la consulta );
pero si quiero hacer una impresión con mysql_fetch_array,assoc u otros para mostrarlos con while no funciona y tengo rato itentando y no se me ocurre nada es primera ves que utilizo el print_r aqui les dejo los vídeos para que vean como funciona y que funciona pero no puedo mostrar las consultas a menos que sea con print_r no tengo mucha experiencia con esto pero por favor que alguien me ayude aquí les dejo los vídeos

Video 1
PHP😛OO - Crear un Paginador 1 - YouTube

Video 2

PHP😛OO - Crear un Paginador 2 (Crear rango de páginas) - YouTube

para que se ahorren en código yo se los monto solo tiene que hacer la db y probar

db.php
PHP:
<?php

class Db{


	public static function connect()
	{

		if(!$link = mysql_connect("localhost","root"," "))
		{
			die('ERROR al conectar con el servidor');
		}
		if(!mysql_select_db(DB_NAME))
		{
			die('ERROR al selecionar la DB'); 
		}
				return $link;
	}

}


?>

pagina.php
PHP:
<?php

require_once 'config.php';
require_once 'db.php';
require_once 'paginador.php';


?>

<html>
<head>
<meta charset="utf-8">
<title>Paginador</title>
</head>
<body>
<pre>
<?php

	$paginador = new Paginador();
	$pagina = $_GET['pagina'];
	print_r($paginador->paginar("select * from usuarios", $pagina));
	$params = $paginador->getRangoPaginacion();
	 
?>
</pre>

<ul>
<!------------------- Primero y anterior ---------------------->
	<li style="display:inline; margin-right:5px;">
	<?php	if($params['primero']){	?>
	<a href="?pagina=<?php echo $params['primero']; ?>">Primero</a>
	<?php	}else{	
			echo "Primero";
		     }
	?>
		
	</li>

	<li style="display:inline; margin-right:5px;">
	<?php	if($params['anterior']){	?>
	<a href="?pagina=<?php echo $params['anterior']; ?>">Anterior</a>
	<?php	}else{	
		 	echo "Anterior";	
		}	
	?>
	</li>
<!--------------------------------------------------------------->



<!----------------------- Numeracion ---------------------------->
	<li style="display:inline; margin-right:5px;">
	<?php for($i = 0; $i <= count($params['rango']); $i++){ ?>
	<?php if($params['actual'] != $params['rango'][$i]){ ?>
	
	<a href="?pagina=<?php echo $params['rango'][$i]; ?>">
	     <?php echo $params['rango'][$i]; ?>
	</a>

	<?php }else{ ?>

	   <?php echo $params['rango'][$i]; ?>

	<?php  
		}
	    }
	?>
	

	</li>

<!------------------------------------------------------------->

<!------------------- Siguiente y Ultimo ---------------------->

	<li style="display:inline; margin-right:5px;">
	<?php	if($params['siguiente']){	?>
	<a href="?pagina=<?php echo $params['siguiente']; ?>">Siguiente</a>
	<?php	
		}
		else
		{
			echo "Siguiente";
		 }?>
		

	</li>

	<li style="display:inline; margin-right:5px;">
	<?php	if($params['ultimo']){	?>
	<a href="?pagina=<?php echo $params['ultimo']; ?>">Ultimo</a>
	<?php	
		}else
		{ 
		 	echo "Ultimo";	
		}?>
	
	
	</li>
<!------------------------------------------------------------->


</ul>
</body>
</html>

paginar.php
PHP:
<?php

class Paginador
{

	private $_datos;
	private $_paginacion;

	public function __CONSTRUCT()
	{
		$this->_datos = array();
		$this->_paginacion = array();
	}

	public function paginar($query, $pagina = false, $limite = false)
	{
		if($limite && is_numeric($limite))
		{
			$limite = $limite;
		}else
		{
			$limite = 10;
		}


		if($pagina && is_numeric($pagina))
		{
			$pagina = $pagina;
			$inicio = ($pagina - 1) * $limite;
		}else
		{
			$pagina = 1;
			$inicio = 0;	
		}

	$consulta = mysql_query($query, Db::connect());
	$registros = mysql_num_rows($consulta);
	$total = ceil($registros / $limite);
	$query = $query . " LIMIT $inicio, $limite";
	$consulta = mysql_query($query, Db::connect());

	while($regs = mysql_fetch_assoc($consulta))
	{
		$this->_datos[] = $regs;
	}

	$paginacion = array();
	$paginacion['actual'] = $pagina;
	$paginacion['total'] = $total;
	

	if($pagina > 1)
	{
		$paginacion['primero'] = 1;
		$paginacion['anterior'] = $pagina - 1;
	}else
	{
		$paginacion['primero'] = '';
		$paginacion['anterior'] = '';
	}

	if($pagina < $total)
	{
		$paginacion['ultimo'] = $total;
		$paginacion['siguiente'] = $pagina + 1;
	}else
	{
		$paginacion['ultimo'] = '';
		$paginacion['siguiente'] = '';
	}

	$this->_paginacion = $paginacion;
		return $this->_datos;

   }
	




	public function getRangoPaginacion($limite = false)
	{

	 if($limite && is_numeric($limite))
		{
			$limite = $limite;
		}else
		{
			$limite = 10;
		}

	$total_paginas = $this->_paginacion['total'];
	$pagina_selecionada = $this->_paginacion['actual'];
	$rango = ceil($limite / 2);
	$paginas = array();

	$rango_derecho = $total_paginas - $pagina_selecionada;
	

	if($rango_derecho < $rango)
	{
		$resto = $rango - $rango_derecho;
	}else
	{
		$resto = 0;
	}
	

	$rango_izquierdo = $pagina_selecionada - ($rango + $resto);

	for($i=$pagina_selecionada; $i > $rango_izquierdo; $i--)
	{
		if($i == 0)
		{
			break;
		}

	$paginas[] = $i;

	}

		sort($paginas);


	if($pagina_selecionada < $rango)
	{
		$rango_derecho = $limite;	
	}else
	{
		$rango_derecho = $pagina_selecionada + $rango;
	}

	for($i = $pagina_selecionada + 1; $i <= $rango_derecho; $i ++)
	{
		if($i > $total_paginas)
		{
			break;
		}
	
	$paginas[] = $i;

	}

	$this->_paginacion['rango'] = $paginas;
	
	return $this->_paginacion;

 }


	



	public function getPaginacion()
	{

	if($this->_paginacion)
	{
		return $this->_paginacion; 
	}else
	{
		return false;
	}


     }


}



?>
 
Yo no usaría ese código... Piénsalo: Crees que hacer cada vez un SELECT * FROM usuarios es rápido? Para nada. Para paginar deberías usar una consulta COUNT.

Además cada vez que llamas a la función DB::connect() estás creando una conexión NUEVA a la bd, en vez de usar una existente.

Si de verdad te interesa programar orientado a objetos lo primero que tienes que hacer es conocer el PSR y la primera clase de todas tiene que ser un autoloader compatible (te recomiendo hacer uno o usar composer).

Finalmente, para acceder a la base de datos lo que menos te recomendaría es mysql_connect()... PDO es lo más seguro (y lo más coherente si te interesa POO), ya que escapa los parámetros más fácilmente, y mysql también hay maneras de orientarlo a objetos.



Ahora, sobre lo que dices (siento haberte dado la lata :topsy_turvy: pero me gustaría que la gente aprendiese a programar PHP en serio, los tutoriales tan ridículamente malos que hay desperdigados por ahí es lo que más prestigio quita a este lenguaje):

Lo que devuelve la función paginar son literalmente los datos obtenidos por la bd (es curioso porque se tira media hora creando una variable que luego no retorna pero bueno), así que con después de llamar a la función paginar deberás te trabajar con $paginador->_paginacion o getRangoPaginacion



Por último (de verdad 😉) permíteme decirte una cosa: No aprendas PHP con tutoriales aleatorios por la web, la mayoría son malísimos, incluso desde páginas con prestigio: Infórmate bien, consulta diferentes opciones de hacer las cosas, pregunta por el foro lo que quieras y sobre todo, piensa en el rendimiento: PHP es un lenguaje que genera datos que el usuario espera rápidamente, así que es super importante que todo acceso a la base de datos esté super optimizado. Este link te ayudará muchísimo para las tareas más frecuentes: PHP: The Right Way
 
Gracias por tu comentario me párese muy interesante por ahora buscare la forma de salir del paso de otra forma pero seguiré tu consejo 😛7:
 
hola
esoty aprendiendo php oop PSR??
 
hola
esoty aprendiendo php oop PSR??

PSR significa PHP Specification Request, para el caso, son una serie de normas acerca del estilo de código para asegurar interoperabilidad entre aplicaciones. Puedes leer los diferentes estándares aceptados aquí:

https://github.com/php-fig/fig-standards/tree/master/accepted/es

Obviamente hay diferentes niveles, lo mínimo a cumplir es por lo menos psr-0, pero tampoco es necesario obsesionarse con ello:

PSR-1 por ejemplo estipula que se deben usar 4 espacios para indentar, a mí me gusta usar una tabulación.
 
Atrás
Arriba