- Home
- Categorie
- Coding e Sistemistica
- PHP
- Paginazione php
-
Paginazione php
Salve ragazzi, ho un problema con la paginazione, il codice attuale che funziona nelle mie pagine è il seguente:
<?php
$paginazione = "Pagine totali: " . "<strong>".$tot_pages . "</strong> <br />
<br />
";
for($i = 1; $i <= $tot_pages; $i++)
{
if($i == $current_page)
{
$paginazione .= "<strong>".$i . "</strong> ";
}
else {
if($page < 10)
{
$uri=$_SERVER['REQUEST_URI'];
$pagina=substr ($uri, -10, 10);
if ($pagina!='index.html'){
$uri2=substr_replace($uri, $i, -6, 1);
$paginazione .= "<a href="$uri2" title="Vai alla pagina $i">$i</a> ";
}
else{
$uri2=substr_replace($uri, $i, -12, 1);
$paginazione .= "<a href="$uri2" title="Vai alla pagina $i">$i</a> ";
}
}
else
{
$uri=$_SERVER['REQUEST_URI'];
$pagina=substr ($uri, -10, 10);
if ($pagina!='index.html'){
$uri2=substr_replace($uri, $i, -7, 2);
$paginazione .= "<a href="$uri2" title="Vai alla pagina $i">$i</a> ";
}
else{
$uri2=substr_replace($uri, $i, -13, 2);
$paginazione .= "<a href="$uri2" title="Vai alla pagina $i">$i</a> ";
}
}
}
}
$paginazione .= "";
?>In pratica il risultato è
Pagine totali: 6
1 2 3 4 5 6
mentre il cliente mi chiede di avere una cosa del genere:
** Pagine totali(6): 1 **2 3 successive >>e quando si fa click su "successive >>" dovrebbe stampare una cosa tipo
Pagine totali(6): << precedenti 2 3 4 successive >>
fino ad arrivare all'ultima pagina ed ottenere questo
Pagine totali(6): << precedenti 4 5 6
Come dovrei modificare il codice per ottenere il secondo esempio?
Grazie anticipatamente.
-
Tutto tratto da precedente post.
Paginazione php,
[PHP]<?php
// definiamo una costante per la pagina corrente
define("SELF", $_SERVER['PHP_SELF']);
// definiamo la classe
class Paging
{
// definiamo la pagina di partenza
function paginaIniziale($max_row)
{
if ((!isset($_GET['p'])) || ($_GET['p'] == "1"))
{
$parti_da = 0;
$_GET['p'] = 1;
}else{
$parti_da = ($_GET['p']-1) * $max_row;
}
return $parti_da;
}
// contiamo le pagine e stabiliamo quanti records devono essere impaginati
function contaPagine($conta, $max_row)
{
$pgg = (($conta % $max_row) == 0) ? $conta / $max_row : floor($conta / $max_row) + 1;
return $pgg;
}
// mostriamo l'elenco delle pagine
function listaPagine($p_corrente, $pgg)
{
$listapgg = "";
//tolto per fareapparire semlpre prima
// if (($p_corrente != 1) && ($p_corrente))
//{
$listapgg .= " <a href="".SELF."?p=1">Prima</a> ";
// }
if (($p_corrente-1) > 0)
{
$listapgg .= "<a href="".SELF."?p=".($p_corrente-1).""><</a> ";
}
for ($i=1; $i<=$pgg; $i++)
{
if ($i == $p_corrente)
{
$listapgg .= "<b>".$i."</b>";
}else{
$listapgg .= "<a href="".SELF."?p=".$i."">".$i."</a>";
}
$listapgg .= " ";
}
if (($p_corrente+1) <= $pgg)
{
$listapgg .= "<a href="".SELF."?p=".($p_corrente+1)."">></a> ";
}
//tolto per fareapparire semlpre ultima
// if (($p_corrente != $pgg) && ($pgg != 0))
//{
$listapgg .= "<a href="".SELF."?p=".$pgg."">Ultima</a> ";
//}
$listapgg .= "</td>\n";
return $listapgg;
}
// permettiamo la navigazione per pagine precedenti e successive
function precedenteSuccessiva($p_corrente, $pgg)
{
$impaginazione = "";
if (($p_corrente-1) <= 0)
{
$impaginazione .= "Precedente";
}else{
$impaginazione .= "<a href="".SELF."?p=".($p_corrente-1)."">Pag. precedente</a>";
}
$impaginazione .= " | ";
if (($p_corrente+1) > $pgg)
{
$impaginazione .= "Prossima";
}else{
$impaginazione .= "<a href="".SELF."?p=".($p_corrente+1)."">Prossima pag.</a>";
}
return $impaginazione;
}
}
?>[/PHP]
Pagina.php,
[PHP]<?php
//includiamo il file della classe
@require("paginazione.php");
//connettiamoci a MySQL e selezioniamo il database
class MySQL
{
function MySQL()
{
$this->host_name = "localhost";
$this->user_name = "root";
$this->password = "";
$this->data_name = "uno";
$this->link = @mysql_connect($this->host_name, $this->user_name, $this->password) or die (mysq_error());
@mysql_select_db($this->data_name) or die (mysq_error());
}
}
$data = new MySQL();// istanziamo la classe per l'impaginazione
$p = new Paging;
// numero massimo di risultati per pagina
$max = 2;
// identifichiamo la pagina da cui iniziare la numerazione
$inizio = $p->paginaIniziale($max);
// contiamo i records nel database
$query_count = @mysql_query("SELECT * FROM articolo") or die (mysql_error());
$count = @mysql_num_rows($query_count) or die (mysql_error());
// troviamo il numero delle pagine che dovrà essere contato
$pagine = $p->contaPagine($count, $max);
// limitiamo la SELECT al numero di risultati per pagina
$query = @mysql_query("SELECT * FROM articolo LIMIT ".$inizio.",".$max) or die (mysql_error());
while($row = mysql_fetch_assoc($query)){
$id=$row["id"];
$nome=$row["nome"];
echo ("
<table border="1" width="200">
<tr>
<td width="126" align="center">$id</td>
<td width="126" align="center">$nome</td>
</tr>
</table>
");}
?>
<link href="css.css" rel="stylesheet" type="text/css" /><table width="259" border="0" class="css">
<tr>
<td colspan="2" align="center"><?php $lista = $p->listaPagine($_GET['p'], $pagine);
echo $lista . "<br>"; ?></td>
</tr>
</table>
<p>
<?php
//mostriamo le pagine
//$lista = $p->listaPagine($_GET['p'], $pagine);
//echo $lista . "<br>";
//mostriamo il navigatore Precedente/Successiva
//$navigatore = $p->precedenteSuccessiva($_GET['p'], $pagine);
//echo $navigatore;
?>[/PHP]
-
[..]
Quindi sostituendo il mio codice con quello postato da te non funziona
Aiutoooooooooooooooooooooooooooo
-
Guarda che manca la connessione nello script.
-
[..]
Mi potresti aiutare gentilmente?
Oppure volendo lasciare il mio e aggiungendo quello che manca cosa dovrei fare?
Grazie
-
Questa e' la connessione:
[PHP]<?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'uno';
$db = mysql_connect($host, $user, $password)
or die ("Impossibile connettersi al server $host");
mysql_select_db($database, $db)
or die ("Impossibile connettersi al database $database");
?>[/PHP]
-
Ciao patatrac, la cosa che non capisco è che nel codice che ho attualmente non devo mettere i dati relativi a
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'uno'
ma funziona ugualmente, il secondo problema sono i link
che lo script che mi consigli mi genera, vorrei lasciare quelli attuali che sono tipo:
/tipologia-2.html
/tipologia-3.html
/tipologia-4.html
/tipologia-5.html
Ora per semplificarew il tutto ci sarebbe la possibilità di modificare il mio per avere lo stesso risultato.
Grazie per l'aiuto dato.