Autor Tema: Reto de paginacion cortando el contenido  (Leído 4239 veces)

Desconectado alienmaster

  • PHPer@ Fijo
  • ***
  • Mensajes: 102
  • Karma: 12
  • Sexo: Masculino
  • No dependo de nadie!!
    • Ver Perfil
    • 4cosaS
Reto de paginacion cortando el contenido
« en: 22 de Septiembre de 2007, 09:12:31 am »
Bueno, este reto es algo entretenido y sencillo (yo lo hice en 20 minutos) y sera muy util para vuestros scripts. El reto se trata de elaborar un script que si a este le enviamos una variable llamada $texto y con el siguiente cotenido:
Código: [Seleccionar]
Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!Pagine el texto, es decir que lo corte en 3 paginas segun cortemos la variable, señalando cada pagina por un [--pagina--], es decir:
Código: [Seleccionar]
pagina1[--pagina--]pagina2[--pagina--]pagina3...
Yo lo acabo de hacer, la idea no es mia, se la e escuchado a varia gente, pero nunca e visto una programacion por el estilo. Quien lo resuelva, me gustaria que indicara con comentarios lo que hace en cada parte, para hacer un mejor script y demostrar que esta programado por l mismo. Para que lo veais como es el resultado, podreis ver un ejemplo online del que yo programe, puesun reto hay que superarlo uno mismo antes de enviarselo a hacer a otros:
http://alien2006.al.funpic.de/pag.php


Salu2
« Última modificación: 22 de Septiembre de 2007, 09:15:11 am por alienmaster »

Comunidad PHPeros

Reto de paginacion cortando el contenido
« en: 22 de Septiembre de 2007, 09:12:31 am »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Reto de paginacion cortando el contenido
« Respuesta #1 en: 22 de Septiembre de 2007, 09:52:30 am »

<?php
$texto 
"Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!";

if(!
$_GET[&#39;p&#39;]) {
$pagina 1// Si no esta definido la variable P en la barra de direcciones, la pagina sera la numero 1
} elseif ($_GET[&#39;p&#39;] == 2) {
$pagina 2// Si esta definida como 2, sera la pagina 2
} elseif($_GET[&#39;p&#39;] == 3) {
$pagina 3// Si esta definida como 3, la pagina sera la numero 3
} elseif($_GET[&#39;p&#39;] == 1) {
$pagina 1// Si esta definida como 1, la pagina sera la numero 1
} else {
echo 
"El sistema no reconoce los datos enviados por URL";
}

$paginado explode("[--pagina--]",$texto); // Dividimos el texto por los caracteres [--pagina--], asi que queda dividido en 3 partes

echo $paginado[$pagina-1]; // Mostramos la pagina que se ha elegido
echo "<br>"// Mostramos un salto de linea
echo "<a href=&#39;?p=1&#39;>1</a> <a href=&#39;?p=2&#39;>2</a> <a href=&#39;?p=3&#39;>3</a>"// Mostramos enlaces para pasar a otras paginas
?>


Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado alienmaster

  • PHPer@ Fijo
  • ***
  • Mensajes: 102
  • Karma: 12
  • Sexo: Masculino
  • No dependo de nadie!!
    • Ver Perfil
    • 4cosaS
Re: Reto de paginacion cortando el contenido
« Respuesta #2 en: 22 de Septiembre de 2007, 10:18:25 am »

<?php
$texto 
"Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!";

if(!
$_GET[&#39;p&#39;]) {
$pagina 1// Si no esta definido la variable P en la barra de direcciones, la pagina sera la numero 1
} elseif ($_GET[&#39;p&#39;] == 2) {
$pagina 2// Si esta definida como 2, sera la pagina 2
} elseif($_GET[&#39;p&#39;] == 3) {
$pagina 3// Si esta definida como 3, la pagina sera la numero 3
} elseif($_GET[&#39;p&#39;] == 1) {
$pagina 1// Si esta definida como 1, la pagina sera la numero 1
} else {
echo 
"El sistema no reconoce los datos enviados por URL";
}

$paginado explode("[--pagina--]",$texto); // Dividimos el texto por los caracteres [--pagina--], asi que queda dividido en 3 partes

echo $paginado[$pagina-1]; // Mostramos la pagina que se ha elegido
echo "<br>"// Mostramos un salto de linea
echo "<a href=&#39;?p=1&#39;>1</a> <a href=&#39;?p=2&#39;>2</a> <a href=&#39;?p=3&#39;>3</a>"// Mostramos enlaces para pasar a otras paginas
?>


Saludos!
Esta incumpleto en lo que se refiere a mostrar las paginas, pues tienes que mostrar las apginas existentes, y en tu script sean las paginas que sean solo mostraria 3. Tambien a poder ser y para un mejor detallle no estaria mal que marcaras de alguna manera la pagina que se esta visitando en negrita o algo abajo donde aparezcan las posibels paginas.

Salu2!

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Reto de paginacion cortando el contenido
« Respuesta #3 en: 22 de Septiembre de 2007, 10:40:30 am »

<?php
$texto 
"Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro 

tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!"
;

if(
$_GET[&#39;p&#39;]) {
if(!is_numeric($_GET[&#39;p&#39;])) {
echo "P debe ser un numero!";
exit;
} else {
$pagina $_GET[&#39;p&#39;];
}
} else {
$pagina 1;
}

$paginado explode("[--pagina--]",$texto); // Dividimos el texto por los caracteres [--pagina--], asi que queda dividido en 3 partes

echo $paginado[$pagina-1]; // Mostramos la pagina que se ha elegido
echo "<br>"// Mostramos un salto de linea
$enlaces "";
$numero count($paginado);

for(
$i 1$i <= $numero$i++) {
 if(
$pagina == $i)  {
  
$enlaces .= "<a href=&#39;?p=".$i."&#39;><strong>".$i."</strong></a> ";
 } else {
  
$enlaces .= "<a href=&#39;?p=".$i."&#39;>".$i."</a> ";
 }
}

echo 
$enlaces;
## Mostramos enlaces para pasar a otras paginas
?>


Aqui lo tienes,
Un saludo!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado Revancha

  • PHPero Avanzado
  • ****
  • Mensajes: 375
  • Karma: 22
  • Sexo: Masculino
    • Ver Perfil
Re: Reto de paginacion cortando el contenido
« Respuesta #4 en: 22 de Septiembre de 2007, 16:39:00 pm »
Yo he creado una funcion. Aqui se las dejo:
<?php
function Paginacion($Texto,$KeyDivision,$Url,$Name,$NamePag)
{
	
$Division explode($KeyDivision,$Texto); // Divide Texto

	
if (!isset(
$Url)) $Url 0// Pagina Default
	
	

	
echo 
$Division[$Url]; // Imprime contenito de la pag. X
	

	
for (
$x 0$x count($Division); $x++) {
	
	
if (
$Url == $x)  {
	
	
	
$Direcciones .= "<b>".$x."</b> "// Numero de pagina en la que uno esta
	
	
} else {
	
	
	
$Direcciones .= &#39;<a href="&#39;.$NamePag.&#39;?&#39;.$Name.&#39;=&#39;.$x.&#39;">&#39;.$x.&#39;</a> &#39;; // Numero de pagina que no se esta usando
	
	
}
	
}
	

	
echo 
"<br />".$Direcciones;
}

// Modo de uso
echo Paginacion("Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!","[--pagina--]",$_GET[&#39;Page&#39;],"Page","paginacion.php");

?>


Explicacion:
$Texto
= Contenido
$KeyDivision = Palabra para dividir el texto
$Url = Mode de usar la paginacion ($_GET['Page'] o como le coloques)
$Name = Igual que Url, pero en este caso solo el nombre no el metodo ($_GET['Page'] = No, Page = Si)
$NamePage = Nombre la pagina

Algun error o algo avisame.


Desconectado alienmaster

  • PHPer@ Fijo
  • ***
  • Mensajes: 102
  • Karma: 12
  • Sexo: Masculino
  • No dependo de nadie!!
    • Ver Perfil
    • 4cosaS
Re: Reto de paginacion cortando el contenido
« Respuesta #5 en: 22 de Septiembre de 2007, 20:20:31 pm »
Bueno, creo que esto ya esta solucionado jeje, un reto sencillo. Aqui dejo mi codigo...

<?
// Sistema de paginacion mediante cortado de texto en paginas.
// aLiEnMaStEr <eFnWorkZ@hotmail.com> - http://4cosas.com
$texto "Hola, bienvenidoas a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamoes a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!";
$paginas explode("[--pagina--]",$texto);
if(!
$_GET[&#39;pagina&#39;]){
	
$pag 0;// Si no obtenemos la variable pagina nos situaremos en la pagina 0
}else{
	
$pag $_GET[&#39;pagina&#39;];// Si obtenemos la variable pagina por GET la pagina sera la misma variable.
}
$num count($paginas);
if(
$pag >= $num|$pag 0|!preg_match("/$pag/i""0123456789")){// Evitar posibles errores del usuario
	
exit(
"Error de paginacion.");
}
$i $paginas[$pag];
echo 
"Tutorial, página $pag:<br>$i<br><br>Paginas:";// Mostramos el contenido de la pagina actual y las paginas disponibles
if($pag !=0){// Si existen paginas inferiores a la actual la mostramos
	
for(
$i=0;$i<$pag;$i++){
	
	
echo 
" <a href=&#39;".$archivo."?pagina=$i&#39; title=&#39;Pagina $i&#39;>$i</a>,";
	
}
}
echo 
" <b>$pag</b>";// Mostramos la pagina actual
if($pag !=$num){
	
for(
$i=($pag 1);$i<$num;$i++){
	
	
echo 
", <a href=&#39;".$archivo."?pagina=$i&#39; title=&#39;Pagina $i&#39;>$i</a>";
	
}
}
echo 
".";
?>

Desconectado Revancha

  • PHPero Avanzado
  • ****
  • Mensajes: 375
  • Karma: 22
  • Sexo: Masculino
    • Ver Perfil
Re: Reto de paginacion cortando el contenido
« Respuesta #6 en: 22 de Septiembre de 2007, 21:42:03 pm »
Hace más retos, están interesantes xd

Desconectado juaxix

  • PHPerit@
  • *
  • Mensajes: 14
  • Karma: 1
  • Sexo: Masculino
  • Programador PHP
    • Ver Perfil
    • zenphp
Re: Reto de paginacion cortando el contenido
« Respuesta #7 en: 22 de Marzo de 2008, 18:55:26 pm »
En el framework PHP que estoy escribiendo la cosa se simplifica de la siguiente forma:
Tenemos una clase en zenphp/clases/clase_zen_paginador.php:


/**
 * clase_zen_paginador.php
 * @author Juan Belon
 * @copyright LGPL, GPL
 * @package zenphp
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @magic Clase que devuelve información de números de página para paginar resultados como lo hacen los buscadores [1]  _2_ ...  _3_   _4_
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
define(&#39;ZF_PAGINAS_POR_PAGINA&#39;,10);
class zen_paginador {
	
/**
	
 * ¿Ha habido algún error?
	
 *
	
 * @var unknown_type
	
 */
    
var $error false;
    
/**
     * Donde se guardan las posiciones de las páginas, ver documentación
     *
     * @var array
     */
    
var $posiciones = array();
    
/**
     * Total de registros
     *
     * @var unknown_type
     */
    
var $total_pags 0;
    
/**
     * Constructor de la clase paginadora
     *
     * @param int $pag_actual
     * @param int $total_pags
     * @param int $numero_indices
     * @return zen_paginador
     */
    
function zen_paginador($pag_actual$total_pags$numero_indices){
        
$this->comprobar($pag_actual$total_pags);
        if(
$this->error == true){
            echo 
_("P&aacute;gina incorrecta")."\r\n"
            
        }
        
$this->total_pags intval($total_pags);
        if((
$pag_actual <= ($numero_indices+1)) && ($total_pags <= ($numero_indices+1))){
            for(
$i=1$i<=$total_pags$i++) {
                if(
$pag_actual == $i) {
                    
$this->posiciones[$i] = "actual";
                } else {
                    
$this->posiciones[$i] = "enlace";
                }
            }    
        } elseif((
$pag_actual <= ($numero_indices+1)) && ($total_pags > ($numero_indices+1)) && ($total_pags <= ($numero_indices*2+1))) {
            for(
$i=1$i<=$total_pags$i++) {
                if(
$pag_actual == $i) {
                    
$this->posiciones[$i] = "actual";
                } else {
                    
$this->posiciones[$i] = "enlace";
                }
            }
        } elseif((
$pag_actual <= ($numero_indices+1)) && ($total_pags > ($numero_indices*2+1))) {
            for(
$i=1$i<=($numero_indices*2+1); $i++) {
                if(
$pag_actual == $i) {
                    
$this->posiciones[$i] = "actual";
                } else {
                    
$this->posiciones[$i] = "enlace";
                }
            }
            
$this->posiciones[$total_pags] = "separadorAntes";
        } elseif((
$pag_actual > ($numero_indices+1)) && ($total_pags <= ($numero_indices*2+1))) {
            for(
$i=1$i<=$total_pags$i++) {
                if(
$pag_actual == $i) {
                    
$this->posiciones[$i] = "actual";
                } else {
                    
$this->posiciones[$i] = "enlace";
                }
            }    
        } elseif((
$pag_actual > ($numero_indices+1)) && ($total_pags > ($numero_indices*2+1))) {
            
$usar_separadorDespues true;
            
$usar_separadorAntes true;
            
            if(
$pag_actual == ($numero_indices+2)) {
                
$ancho_ini 1;
                
$usar_separadorDespues false;
            } else {
                
$ancho_ini $pag_actual-$numero_indices;
                
//$usar_separadorDespues = true;
            
}
            
            if(
$pag_actual < ($total_pags-$numero_indices)) {
                if(
$pag_actual == ($total_pags-($numero_indices+1))){
                    
$ancho_fin $pag_actual+($numero_indices+1);
                    
$usar_separadorAntes false;
                } else {
                    
$ancho_fin $pag_actual+$numero_indices;
                }
            } else {
                
$ancho_fin $total_pags;
                
$ancho_ini = ($total_pags-($numero_indices*2));
                
$usar_separadorAntes false;
            }
            
            if(
$usar_separadorDespues) {
                
$this->posiciones[1] = "separadorDespues";
            }
    
            for(
$i=$ancho_ini$i<=$ancho_fin$i++) {
                if(
$pag_actual == $i)
                {
                    
$this->posiciones[$i] = "actual";
                } else
                {
                    
$this->posiciones[$i] = "enlace";
                }
            }
            
            if(
$usar_separadorAntes) {    
                
$this->posiciones[$total_pags] = "separadorAntes";
            }
        }
    }
    
/**
     * Comprueba que una página esté en el conjunto
     *
     * @param int $pagina
     * @param int $total_pags
     * @return bool
     */
    
function comprobar($pagina$total_pags=-1){
    
	
if (
$total_pags==-1$total_pags=$this->total_pags;
        if(
$pagina $total_pags)
        {
            
$this->error true;
        }
        
        return 
$this->error;
    }
    
/**
     * Devuelve el HTML para paginar resultados
     * @example $html = $paginador->html_paginado($_GET[&#39;pagina&#39;],"index.php/listar/");
     *
     * @param int $pagina
     * @param str $enlace
     * @param bool $mostrar_info Si es true muestra el total y el número de páginas
     * @param int $resultados_por_pagina Si no se especifica se usa ZF_PAGINAS_POR_PAGINA definido en la misma clase
     * @return str
     */
    
function html_paginado($pagina,$enlace,$mostrar_info=true,$resultados_por_pagina=ZF_PAGINAS_POR_PAGINA){
    
	
$totalPaginas ceil($this->total_pags/$resultados_por_pagina); //calcula el total de numero de paginas
    
	
if (
$mostrar_info)
    
	
{
    
	
	
$html  _("Total p&aacute;ginas = ") . $totalPaginas "<br />";
    
	
   
	
$html .= _("N&uacute;mero de p&aacute;gina = ") . $pagina "<br /><br />";
    
	
}
    
	
//mostrar resultados
    
	
$division_ini = ($pagina-1)*$resultados_por_pagina;
    
	
$division $resultados_por_pagina;
	
    
//la primera y ultima pagina siempre se muestran
	
    
//necesitamos un separador entre la primera/ultima pagina asi como en medio de los numeros de pagina
	
    
$separador "...";
	
    foreach(
$this->posiciones as $numero_pagi=>$tipo)
	
    {
        
	
//cada numero tiene un tipo de 4 disponibles
    
	
    
//
	
"actual" - numero de pagina actual;
	
        
//  "enlace" - es el enlace a otros numeros de pagina
        
	
//  "separadorDespues" - primer separador entre numeros de pagina (antes)
        
	
//  "separadorAntes" - ultimo separador (despues de los numeros de pagina)
        
	
switch(
$tipo)
        
	
{
	
            case 
"actual"$html.= &#39;&nbsp;&#39; . $numero_pagi . &#39;&nbsp&#39;;
                
	
break;
	
                
            
	
case 
"enlace"$html .= &#39;&nbsp<a href="&#39;.$enlace.$numero_pagi . &#39;">&#39; . $numero_pagi . &#39;</a>&nbsp;&#39;;
	
                break;
                
	

            
	
case 
"separadorDespues"$html .= &#39;&nbsp<a href="&#39;.$enlace.$numero_pagi . &#39;">&#39; . $numero_pagi . &#39;</a>&nbsp;&#39; . $separador . &#39;&nbsp;&#39;;
	
                break;
                
	

            
	
case 
"separadorAntes"$html .= &#39;&nbsp;&#39; . $separador . &#39;&nbsp;<a href="&#39;.$enlace . $numero_pagi . &#39;">&#39; . $numero_pagi . &#39;</a>&#39;;
	
                break;
        
	
}
    
	
}
    
	
return 
$html;
    }
    
}



y con ella trabajaremos para cargarla ,una vez cargado el sistema con

require_once(&#39;zenphp/zen.php&#39;);

entonces hacemos la carga de la clase y procesamos el contenido donde lo necesitemos, veamos un ejemplo dificil:

 
=========inicio paginador.php =========
    
//generatar un array
    
$resultados range(0710);

    
$resultados_por_pagina 20//20 results on a pagina
    
$totalPaginas ceil(count($resultados)/$resultados_por_pagina); //calcula el total de numero de paginas
    
echo "total p&aacute;ginas = " $totalPaginas "<br />";

    
$pagina $_GET[&#39;p&#39;]; //obtener el numero de pagina
    
echo "n&uacute;mero de p&aacute;gina = " $pagina "<br /><br />";

    
//mostrar resultados
    
$division_ini = ($pagina-1)*$resultados_por_pagina;
    
$division $resultados_por_pagina;
    echo 
"<pre>";
    
print_r(array_division($resultados$division_ini$division));
    echo 
"</pre>";
    
    
    
zen___carga_clase(&#39;zen_paginador&#39;);
    
    //parametros:
    //$pagina = pagina actual
    //$totalPaginas = numero total de paginas
    //3 = numeros a mostrar a la izquierda y a la derecha del numero de pagina actual
    
$pag = new zen_paginador($pagina$totalPaginas3);

    
//la primera y ultima pagina siempre se muestran
    //necesitamos un separador entre la primera/ultima pagina asi como en medio de los numeros de pagina
    
$separador "...";
    foreach(
$pag->posiciones as $numero_pagi=>$tipo)
    {
        
//cada numero tiene un tipo de 4 disponibles
        //  "actual" - numero de pagina actual;
        //  "enlace" - es el enlace a otros numeros de pagina
        //  "separadorDespues" - primer separador entre numeros de pagina (antes)
        //  "separadorAntes" - ultimo separador (despues de los numeros de pagina)
        
switch($tipo)
        {
            case 
"actual": echo &#39;&nbsp;&#39; . $numero_pagi . &#39;&nbsp&#39;;
                
break;
                
            case 
"enlace": echo &#39;&nbsp<a href="index.php?p=&#39; . $numero_pagi . &#39;">&#39; . $numero_pagi . &#39;</a>&nbsp;&#39;;
                
break;
                
            case 
"separadorDespues": echo &#39;&nbsp<a href="index.php?p=&#39; . $numero_pagi . &#39;">&#39; . $numero_pagi . &#39;</a>&nbsp;&#39; . $separador . &#39;&nbsp;&#39;;
                
break;
                
            case 
"separadorAntes": echo &#39;&nbsp;&#39; . $separador . &#39;&nbsp;<a href="index.php?p=&#39; . $numero_pagi . &#39;">&#39; . $numero_pagi . &#39;</a>&#39;;
                
break;
        }
    }

Veamos ahora un ejemplo fácil:

zen___carga_clase
(&#39;zen_paginador&#39;);
$pag intval($datos[0]);
//$bd es una instancia de la clase zen_basedatos ($bd = new zen_basedatos(...) )
$total abs(($bd->seleccion_unica("count(idp) from productos"))/ZF_PAGINAS_POR_PAGINA);
if (
$total==0$total 1;
$p = new zen_paginador($pag$total,4);
$r[&#39;paginacion&#39;] = $p->html_paginado($pag,"index.php/index/",true,ZF_PAGINAS_POR_PAGINA);
$limite = (($pag*ZF_PAGINAS_POR_PAGINA)-1);
if (
$limite<0$limite=0;
//Ahora sólo queda usar una clase de plantillas para mostrar el resultado
//$productos es un zen_modelo_datos ($productos = new zen_modelo_datos("id,nombre...","tabla_productos"))
$productos->condiciones_where .= " limit ".$limite.",".ZF_PAGINAS_POR_PAGINA;
echo 
$productos->html->listado(
	
	
//->html es un zen_html_modelo_datos que se crea automáticamente
 
"productos/lista_productos.html","indice.html","lista_productos",$r //los HTML son plantillas para mostrar los productos
);
Más acerca de en http://blog.zenphp.es

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: Reto de paginacion cortando el contenido
« Respuesta #8 en: 22 de Marzo de 2008, 21:04:10 pm »
En el framework PHP que estoy escribiendo la cosa se simplifica de la siguiente forma:
[ ... ]

No es por nada juaxix, pero me parece mucho mas complicado lo que tu propones que las soluciones que proponen los demas, por estas razones:

- Necesitas aprender la clase que manejas casi de memoria.
- Utilizas muchas funciones que hacen el codigo mucho mas complejo de lo que en realidad es.
- Cualquier codigo de los que estan encima de tu mensaje es mas organizado, mas sencillo de leer, mas sencillo de modificar... en fin, mas sencillo en general. Y ademas, no necesita aprender las funciones de una clase auxiliar para realizar la tarea.

En definitiva, me parece que usar algo como lo que propones para realizar algo asi, es complicarse demasiado sin necesidad.

Saludos!
« Última modificación: 22 de Marzo de 2008, 21:06:02 pm por TLX »
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado kael

  • PHPerit@
  • *
  • Mensajes: 3
  • Karma: 0
    • Ver Perfil
Re: Reto de paginacion cortando el contenido
« Respuesta #9 en: 05 de Febrero de 2009, 04:00:44 am »
algo mas sencillo XD

<?php
$texto 
= &#39;Yo lo acabo de hacer, la idea no es mia,
se la e escuchado a varia gentepero nunca e visto
una programacion por el estilo
.  Quien lo resuelva,[divide]
me gustaria queindicara con comentarios lo que hace
en cada parte
para hacer un mejor script y demostrar[divide]
que esta programado por l mismo.  Para que lo veais como
es el resultado
podreis ver un ejemplo online [divide]
del que yo programepuesun reto hay que superarlo
 uno mismo antes de enviarselo a hacer a otros
&#39;;

$array explode(&#39;[divide]&#39;,$texto);

$total count($array)-1;

if(isset(
$_GET[&#39;pag&#39;])){
$next $_GET[&#39;pag&#39;];
$a $next+1;
    if(
$total == $next){
    echo 
$array[$next];
    echo 
"<br /><a href=\"divide. php\">Inicio<a herf</a> [$next][$total]";
    }else{
    echo 
$array[$next];
    echo 
"<br /><a href=\"divide. php?pag=$a\">Siguiente<a herf</a> [$next][$total]";
    }
}else{

echo 
$array[0];
echo 
"<br /><a href=\"divide. php?pag=1\">Siguiente<a herf</a> [1][$total]";
}
?>

Desconectado IgnacioViglo

  • PHPerit@
  • *
  • Mensajes: 1
  • Karma: 0
  • Nuev@ PHPer@
    • Ver Perfil
Re:Reto de paginacion cortando el contenido
« Respuesta #10 en: 29 de Abril de 2012, 14:22:41 pm »
Código: [Seleccionar]
<?php
$text 
= &#39;Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!&#39;;
if(strpos($text, &#39;[--pagina--]&#39;) === false) {
  
echo $text;
} else {
  
$pag = array();
  
$xp explode(&#39;[--pagina--]&#39;, $text);
  
foreach($xp as $val) {
    if(empty(
$val)) { continue; }
    
$pag[] = $val;
  }
  
$p $_GET[&#39;p&#39;] > 0 && ctype_digit($_GET[&#39;p&#39;]) && $_GET[&#39;p&#39;] <= count($pag) ? $_GET[&#39;p&#39;]-1 : 0;
  
echo $pag[$p];
  for(
$i=1;$i<=count($pag);$i++) {
    echo &
#39;<a href="?p=&#39;.$i.&#39;">&#39;.$i.&#39;</a> &#39;;
  
}
}

Pruebalo, funciona

Desconectado ouch01

  • PHPerit@
  • *
  • Mensajes: 10
  • Karma: 0
  • Sexo: Masculino
  • "Insert system disk and press enter..."
    • Ver Perfil
    • Proyecto!
Re:Reto de paginacion cortando el contenido
« Respuesta #11 en: 02 de Mayo de 2012, 00:35:32 am »
Código: [Seleccionar]
<?php
error_reporting
(0); // Para que no salga lo de undefined index, obviamente.
$text = &#39;Hola, bienvenidos a nuestro tutorial. En el aprenderemos blablabla.... Pasemos a la siguiente pagina.[--pagina--]Seguimos con nuestro tutorial.... pasamos a la siguiente y ultima pagina...[--pagina--]Esta es la ultima pagina, aki se acaba el tutorial! saludos!!&#39;;
$ex explode(&#39;[--pagina--]&#39;, $text);
$pages count($ex);
$page = (ctype_digit($_GET[&#39;page&#39;]) && $_GET[&#39;page&#39;] > 0 && $_GET[&#39;page&#39;] <= $pages ? $_GET[&#39;page&#39;] : 1);
?>

<style>
body{ margin: 10px auto; width: 400px; }
h4, .pag{ text-align: center; }
.here{ background: #555; color: #fff; padding: 1px 3px; }
</style>
<body>
    <h4>P&aacute;gina: <?=$page?></h4>
    <p style=""><?=$ex[$page-1]?></p>
    <div class="pag">
    P&aacute;ginas:
    <?for($i=1;$i<=$pages;$i++){
        echo '<a'.($page == $i ? ' class="here"' : '').' href="?page='.$i.'">'.$i.'</a> ';
    }?>
    </div>
</body>

Y listo.