Newsgroup: it.comp.www.php
Titolo: [HELP] Next e previous

Ciao a tutti,
posto una richiesta d'aiuto per un problema forse già discusso, ma che anche
dopo un bel pò di lurking du 
deja.com
 non sono riuscito a trovare una
soluzione.
Stò realizzando un guestbook ed il mio problema è limitare le pagine a 10
commenti alla volta e quindi inserire le solite freccettine "next" e
"previous". Come faccio ? Proprio non sò da dove iniziare.
grazie in anticipo
--
Togli NOSPAM e .invalid dal mio indirizzo
e-mail per scrivermi in privato

function next_prev($lim)
{
$lim = 10 + $lim;
$query= "select * from tabella where cond = 'cond' LIMIT $lim;
....
$link_next = $PHP_SELF.?$lim='$lim+10';
$link_prev = $PHP_SELF.?$lim='$lim-10';
.....
}
"Michele Rosa" <miche...@NOSPAMtiscali.it.invalid> ha scritto nel
messaggio news:b1lh3q$52t$1...@lacerta.tiscalinet.it...


Ciao, ti posto la mia classe di paginazione, più un piccolo esempio di 
come utilizzarla.
/////////////////////
IMPORTANTE:
devi cambiare il codice di questo metodo
function _Numero_Di_risultati(){
    global $ckernel;
       $ckernel->db->ExecQuery($this->_sql_num_risultati);
       return $ckernel->db->NumRows();
  }
e riscriverlo, in modo tabe che possa eseguire la query, adesso
è settato per utilizzare la mia classe $db. Per esempio fai cosi:
function _Numero_Di_risultati(){
$global $puntatore_mysql;
$result=mysql_query($this->_sql_num_risultati);
 return mysql_num_rows($result);
//non ricordo bene le funzioni di mysql, controlla tu
 
  }
/////////////////////
Bene dopo aver fatto questa modifica dovrebbe funzionare.
Adesso ti faccio un esempio di utilizzo
<?
include "ris_ricerca.inc";
//ricordati questo se sei in una funzione global $start,$pg;
if(!isset($start)) $start=0;
//la tua query da eseguire
$sql="select * from pippo where campo='cicco'  ";
$risRicerca= new ris_ricerca(8,2,$sql);
$sql .= " limit $start ".$risRicerca->GetLimit()." ";
ti esegui la $sql;
ti fai il while dei risultati , e adesso per stampare il paginatore
//il link è necessario per il rientro corretto.
$link="index.php?para1=2&param2=3";
$risRicerca->print_avanti_indietro($link);
ok tutto qua.
Piccola nota sui parametri di ingresso:
$risRicerca= new ris_ricerca(8,2,$sql);
Il primo parametro 8 indica che tu vuoi 8 numeri 1 2 3 4 5 6 7 8
 immagina di avere 10.000 risultati e di volerne 4 per pagina
i numeri sarebbero parecchi, questo funziona un po come google.
il secondo parametro 2 indica quanti risultati vuoi per pagina.
il terzo parametro è la sql capace di capire quanto risultati ci sono
.
Ok questo è il codice della classe.
Se dovessi avere problemi dimmelo.
Ciao
<?php
// Copyright (c) 2002-2003  Pio Clemente
// 
http://www.phpio.com
// ZAS   ---- Zone Administrator System - 
http://zas.sf.net
//
// ----------------------------------------------------------------------------
// LICENSE
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License (GPL)
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// To read the license please read the docs/license.txt or visit
// 
http://www.gnu.org/copyleft/gpl.html
//
// ----------------------------------------------------------------------------
// Filename:          Asmin  ris_ricerca.inc
// Author:              Pio Clemente
// Purpose:            Page Sliding
// ----------------------------------------------------------------------------
//
// ----------------------------------------------------------------------------
class ris_ricerca {
   var $_limit  = 1; //numero di link da visualizzare
   var $_numero_pagine  = 10; //numero pagine da visualizzare in avanti indietro
   var $_sql_num_risultati;    // la sql per calcolare quanti elementi ci sono
   var $_nrisultati;
   function Set_limit($limit){
      $this->_limit = $limit;
         }
   function Get_limit(){
      return $this->_limit;
    }
   function Set_n_pagine($n_pagine){
      $this->_numero_pagine = $n_pagine;
       }
   function Get_n_pagine(){
      return $this->_numero_pagine;
    }
   function Set_sql($sql){
      $this->_sql_num_risultati = $sql;
       }
   function Get_sql(){
      return $this->_sql_num_risultati;
    }
   function Set_nrisultati($nris){
      $this->_nrisultati = $nris;
       }
   function Get_nrisultati(){
      return $this->_nrisultati;
    }
  function _Numero_Di_risultati(){
    global $ckernel;
       $ckernel->db->ExecQuery($this->_sql_num_risultati);
       return $ckernel->db->NumRows();
  }
  function punto_di_partenza(){
   global $start,$pg,$npag;
    if (!$start) $i=1;
     else if($pg>3)
     $i=$pg-3;
     else if($pg<=3)
    $i=1;
     else if($pg<=3)
     $i=1;
   else
    $i=$pg;
    //echo "il punto di partenza $i<br>";
   return $i;
  }
   function punto_di_arrivo($i,$npag){
     $for_limit =$this->Get_n_pagine() +$i;
     if($for_limit>=$npag) $for_limit=$npag;
    return  $for_limit;
  }
  function print_avanti_indietro($url){
    global $start,$pg,$id,$scat,$op;
    $urlo = $url;
     //echo "l' url $url <br><br>";
      //il numero di risultati
    $this->Set_nrisultati($this->_Numero_Di_risultati());
     if (!isset($start)) $start = 0;
     if (!isset($pg)) $pg = 1;
    $npag=ceil($this->Get_nrisultati()/$this->Get_limit());
     $pcorrente = $pg;
     if($pcorrente>1){
                    $url = $urlo;
                    $url .="&pg=1";
                    $url .= "&start=0";
                    echo  "<a href=". $url.">Inizio</a> | ";
                    $url = $urlo;
                    $url .="&pg=";
                    $url .= ($pg-1);
                    $url .= "&start=";
                    $St= ($start-$this->Get_limit());
                    $url .= $St;
                    echo  "<a href=". $url."><<<</a> ";
       }
       if ($npag>1)
         {
           $i=$this->punto_di_partenza();
           $for_limit=$this->punto_di_arrivo($i,$npag);
            for($i; $i<=$for_limit; $i++)
               if( $pcorrente== $i  )
                 echo " <b>$i</b> ";
               else
                    {
                    $url = $urlo;
                    $url .="&pg=$i&start=";
                    $St= (($i-1)*$this->Get_limit());
                    $url .= $St;
                    echo  "<a href=". $url.">".$i. "</a> ";
                }
               }
        if(($start+$this->Get_limit())<$this->Get_nrisultati()) {
                    $url = $urlo;
                    $url .="&pg=";
                    $url .= ($pg+1);
                    $url .= "&start=";
                    $St= ($start+$this->Get_limit());
                    $url .= $St;
                   echo  "<a href=". $url.">>>></a> ";
                    $url = $urlo;
                    $url .="&pg=".$npag;
                    $url .= "&start=".($this->Get_nrisultati()-1);
                   echo  "| <a href=". $url.">Fine</a> ";
          }
            return $str;
  }
  ///////COSTUTTORE
  function  ris_ricerca($limit=4,$npagine=10,$sql=""){
      $this->Set_limit($limit);
      $this->Set_n_pagine($npagine);
      $this->Set_sql($sql);
  }
 }
?>