• User

    Paginazione su righe e colonne

    Salve a tutti
    Avrei bisogno di un impaginazione di dati su righe ecolonne, tipo una fotogallery...
    Attualmente recupero i dati dal db ma li impagino semplicemente uno sotto l'altro!

    Come poter decidere su quante righe e su quante colonne impaginare i miei dati?

    Attualmente uso queso codice per estrarre e impaginare:
    [PHP]
    <?php
    require_once("config.php");
    ?>
    <?php
    if(!isset($_SESSION['login']))
    {
    echo 'Accesso riservato a soli utenti registrati.<br>';
    echo '<a href="index.php">Effettua il login </a>';
    exit;
    // header('Location: index.php');
    // exit;
    }

    // esecuzione prima query
    $count = mysql_query("SELECT COUNT(id) FROM foto_gallery");
    $res_count = mysql_fetch_row($count);

    // numero totale di records
    $tot_records = $res_count[0];

    // risultati per pagina(secondo parametro di LIMIT)
    $per_page = 10;

    // numero totale di pagine
    $tot_pages = ceil($tot_records / $per_page);

    // pagina corrente
    $current_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];

    // primo parametro di LIMIT
    $primo = ($current_page - 1) * $per_page;

    require_once("header.php");

    echo "<div align='center'>\n<table width='400' border='0' cellspacing='2' cellpadding='2'>\n";

    // esecuzione seconda query con LIMIT
    $query_limit = mysql_query("SELECT id, titolo_foto, categoria, urlimmagine FROM foto_gallery order by categoria ASC LIMIT $primo, $per_page ");
    //echo $query_limit;
    //exit();

    echo " <tr>\n ";
    echo "<td bgcolor='black' width='100' height='22'><p>Azione</p></td>\n ";
    echo "<td bgcolor='black' width='250' height='22'><p>Nome immaggine</p></td>\n ";
    echo "<td bgcolor='black' width='300' height='22'><p>Categoria</p></td>\n ";
    echo "</tr>\n";

    while($results = mysql_fetch_array($query_limit)) {
    echo " <tr>\n ";
    echo "<td width='70'><center><a title='Elimina' href='query_gallery.php?action=delete&id=" . $results['id'] . "&image=" . $results['urlimmagine'] . "'><img src='images/remove.jpg' alt='Elimina menu' border='0'></a></center></td>\n ";
    echo "<td width='250'><p>" . $results['titolo_foto'] . "</p></td>\n ";
    echo "<td width='300'><p>" . $results['categoria'] . "</p></td>\n ";
    echo "</tr>\n";
    }

    // includiamo uno dei files contenenti la paginazione, commentate l'altro ovviamente
    //include("paginazione_1.php");
    include("paginazione_2.php");

    // in questa cella inseriamo la paginazione
    echo " <tr>\n <td colspan='5' height='50' valign='bottom' align='center'><a title='Aggiungi' href='upload_gallery.php'>Aggiungi immaggine</a><br>$paginazione</td>\n";

    echo " </tr>\n</table>\n</div>";

    mysql_close();

    ?><br><br>
    <center><a href="logout.php">Logout</a></center><br />

    [/PHP]

    il file paginazione_2.php //serve solo a mostrare in che modo visulaizzare il tasto >>next e <<prew
    [PHP]
    <?php

    $paginazione = "Pagine totali: " . $tot_pages . "
    [";
    for($i = 1; $i <= $tot_pages; $i++) {
    if($i == $current_page) {
    $paginazione .= $i . " ";
    } else {
    $paginazione .= "<a href="?page=$i" title="Vai alla pagina $i">$i</a> ";
    }
    }
    $paginazione .= "]";

    ?>
    [/PHP]

    Spero sia stato chiaro e che mi possiate aiutare...
    Grazie


  • User Attivo

    Ciao ora non riesco a passarti il codice ( se vuoi lo faccio questa sera) ma il procedimento è semplice:
    Prima cosa decidi il numero di colonne.
    Entri nel ciclo while e metti un contatore che vada da 1 al numero di colonne che hai scelto.
    Dove hai il tag tr metti un controllo if, che controlli se il contatore è uguale al numero delle colonne da te deciso in tal caso devi creare una nuova riga e azzerare il contatore altrimenti incrementi solo il contatore senza creare la nuova riga.
    Spero di essere stato chiaro.


  • User

    Ciao christian82 e grazie per la risposta..
    La funzione mi è chiara ma il codice nn tanto!
    Con l'ASP me la cavo un po meglio, ma vorrei capire anche il php.

    Ora comunque provo a smanettare, ho trovato uno script che a differenza del mio non ha la gestione delle pagine ma ha l'impaginazione che forse serve a me!
    Provo a fondere i 2...

    Vi posto il codice per srupolosità, se riesci cmq e hai un po di tempo ti aspetto!

    A dopo per maggiori sviluppi!


  • User

    @mcmmultimedia said:


    Ops.. il codice
    [php]
    <?php
    require_once("config.php");
    //$albumId = $_GET['album'];
    $albumId = "gallery";

    $query = "SELECT im_id, im_title, im_thumbnail FROM tbl_image WHERE im_album_id = $albumId ORDER BY im_title";

    $result = mysql_query($query) or die('Error, list image failed. ' . mysql_error());

    if (mysql_num_rows($result) == 0) {
    echo "Nessuna immaggine";
    } else {

    echo '<table width="700" border="0" cellspacing="1" cellpadding="2" align="center">';
    
    // the image is listed in a table
    // here we specify how many columns
    // we want to show on each row
    $colsPerRow = 4;
    
    // width of each column in percent
    $colWidth   = (int)(100/$colsPerRow);
    $i = 0;
    while ($row = mysql_fetch_assoc($result)) {
        if ($i % $colsPerRow == 0) {
            // start a new row
            echo '<tr>';
        }
    
        echo '<td width="' . $colWidth . '%">' .
             '<a href="?page=image-detail&album=' . $albumId . '&image=' . $row['im_id'] . '">' .
             '<img src="viewImage.php?type=glthumbnail&name=' . $row['im_thumbnail'] . '" border="0">' .
             '<br>' . $row['im_title'] . '</a></td>';
    
        if ($i % $colsPerRow == $colsPerRow - 1) {
            // start a new row
            echo '</tr>';
        }
    
        $i += 1;
    }
    
    // print blank columns
    if ($i % $colsPerRow != 0) {
        while ($i++ % $colsPerRow != 0) {
            echo '<td width="' . $colWidth . '%">&nbsp;</td>';
        }
        echo '</tr>';
    }
    
    echo '</table>';
    

    }
    ?>

    [/php]Si potrebbe integrare con il mio ?


  • User Attivo

    Ciao si il codice che ti serve è proprio questo.
    [php]
    <?php
    require_once("config.php");
    //$albumId = $_GET['album'];
    $albumId = "gallery";

    $query = "SELECT im_id, im_title, im_thumbnail FROM tbl_image WHERE im_album_id = $albumId ORDER BY im_title";

    $result = mysql_query($query) or die('Error, list image failed. ' . mysql_error());

    if (mysql_num_rows($result) == 0) {
    echo "Nessuna immaggine";
    } else {
    [/php]Fino qui c'è il codice sql che serve a estrarre le informazioni dal db.
    [php]
    echo '<table width="700" border="0" cellspacing="1" cellpadding="2" align="center">';

    // the image is listed in a table
    // here we specify how many columns
    // we want to show on each row
    $colsPerRow = 4;
    
    // width of each column in percent
    $colWidth   = (int)(100/$colsPerRow);
    $i = 0;
    

    [/php]Imposti delle variabili per il numero di colonne e in questo caso anche la larghezza.
    [php]
    while ($row = mysql_fetch_assoc($result)) {
    if ($i % $colsPerRow == 0) {
    // start a new row
    echo '<tr>';
    }
    [/php]Qui ha eseguito il controllo per decidere se c'è bisogno di una nuova riga.
    [php]
    echo '<td width="' . $colWidth . '%">' .
    '<a href="?page=image-detail&album=' . $albumId . '&image=' . $row['im_id'] . '">' .
    '<img src="viewImage.php?type=glthumbnail&name=' . $row['im_thumbnail'] . '" border="0">' .
    '<br>' . $row['im_title'] . '</a></td>';

        if ($i % $colsPerRow == $colsPerRow - 1) {
            // start a new row
            echo '</tr>';
        }
        $i += 1;
    }
    

    [/php]Inserisce il dato e alla fine esegue il comando per sapere se deve chiudere la riga. In più incrementa il contatore.
    [php]
    // print blank columns
    if ($i % $colsPerRow != 0) {
    while ($i++ % $colsPerRow != 0) {
    echo '<td width="' . $colWidth . '%"> </td>';
    }
    echo '</tr>';
    }

    echo '</table>';
    

    }
    ?>
    [/php]e qui finito l'inserimento di tutti i dati controlla se c'è bisogno di inserire delle colonne vuote per completare la riga.
    Spero di essere stato utile, ciao.


  • User

    Il problema di questo script e che non ha paginazione, ovvero la funzione che ti calcoli il numero delle immaggini e delle pagine da creare per la navigazione!

    Il mio invece al contrario aveva la funzione dele pagine ma ordinava i record uno sotto l'altro semplicemente.

    La mia domanda era:
    Si possono fondere i 2 prendendo l'impaginazione delle immaggini dall'ultimo script postato e integrarci una paginazione del tipo:

    <<Prev 1,2,3,4 Next>>

    ??


  • ModSenior

    Ciao mcmmultimedia,

    Per la paginazione puoi prendere spunto da questo messaggio.