esempio di paginazione proposto da questo sito + css

Ciao

Ho trovato molto interessante questo articolo su un esempio pratico di paginazione:

http://www.phpnews.it/articoli/paginazione-dei-dati/3/

L'ho provato e funziona perfettamente.

Mi chiedevo adesso come è possibile applicare una formattazione css ai link della paginazione

per ottenere una grafica dello stesso tipo o simile presente nella stessa pagina:

Grazie

inviato 5 anni fa
frankphp
X 0 X

Puoi leggere il codice html di phpnews.it e anche i css. Si tratta di indicare delle classi agli oggetti e poi formattarli :-)

ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Puoi leggere il codice html di phpnews.it e anche i css. Si tratta di indicare delle classi agli oggetti e poi formattarli :-)

ciao

ok sono riuscito ad applicare la formattazione ai link delle pagine.

Ho modificato alcune righe del file paginazione.php.

ad esempio:

..............

else {

        return '<a class="page" href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';

    }

}

..................

 // link alla pagina precedente

    if($pagina_corrente != 1) {

        $link_paginazione .= '<a class="page" href="' . crea_url($url_base, $pagina_corrente - 1) . '">prec</a> ';

Non ho capito però come formattare il numero di pagina corrente.

Potresti aiutarmi?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Inserisci un id nel tag a. Mi spiego: tu puoi sapere in che pagina si trova l'utente, bene quando devi creare quel link inserisci un id e contestualmente nel tuo CSS metti il codice per modificare l'oggetto.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Inserisci un id nel tag a. Mi spiego: tu puoi sapere in che pagina si trova l'utente, bene quando devi creare quel link inserisci un id e contestualmente nel tuo CSS metti il codice per modificare l'oggetto.

aspetta..ma questo per gli altri link l'ho già fatto, se ho capito bene.

Nella pagina paginazione.php che puoi trovare nel file allegato all'articolo citato ho aggiunto appunto la classe "page":

<a class="page"

e funziona

che sia id o class alla fine ottengo lo stesso risultato.

Il problema con pagina corrente è che non so proprio dove inserire l'id o la classe in quel codice.

Poi ho un altro problema.

Il codice della pagina index.php:

// se la pagina corrente è minore di 1

if($pagina_corrente < 1)  {

    header('location: ' . $url_base);

    exit();

}

// se la pagina corrente è maggiore dell'ultima pagina

if($pagina_corrente > $tot_pagine) {

    header('location: ' . crea_url($url_base, $tot_pagine));

    exit();

mi crea problema di output con l'header.

Ho provato a sostituire quel codice con quello che uso spesso io e che non mi da mai problemi:

// inserito ad inizio pagina

function rindirizzo($url, $seconds = FALSE){

    if (!headers_sent() && $seconds == FALSE){

        header("Refresh: ".$seconds.";URL=" . $url);

    }

    else{

        if ($seconds == FALSE){

            $seconds = "0";

        }

        echo "<meta http-equiv=\"refresh\" content=\"$seconds;url=$url\">";

    }

}

.....................

//questo al posto del codice sopra, la prima parte

rindirizzo("$url_base",0);      

    }

sembra andare bene ma ho dei dubbi sulla seconda parte dove dice:

 // se la pagina corrente è maggiore dell'ultima pagina:

 header('location: ' . crea_url($url_base, $tot_pagine));

    exit();

come dovrei sostituirlo?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Allora, id e class sono due cose differenti, anche se i valori che dai con il css a questi sono identici. L'id viene applicato ad un oggetto che compare solo 1 volta nella pagina. Class viene applicato a più oggetti nella stessa pagina.

Per il secondo problema: puoi inviare solo un header, Se hai già fatto un echo di qualcosa, prima di inviare l'header ottieni l'errore.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Allora, id e class sono due cose differenti, anche se i valori che dai con il css a questi sono identici. L'id viene applicato ad un oggetto che compare solo 1 volta nella pagina. Class viene applicato a più oggetti nella stessa pagina.

Per il secondo problema: puoi inviare solo un header, Se hai già fatto un echo di qualcosa, prima di inviare l'header ottieni l'errore.

So che id e class sono 2 cose differenti. Il problema è che non so dove fare la modifica per introdurre l'Id o la class.

(Hai dato un'occhiata al codice di paginazione.php?)

Per il secondo problema mi interessava capire se potevo fare una modifica del genere:

....

rindirizzo("crea_url($url_base, $tot_pagine)",0);  

.....
risposto 5 anni fa
frankphp
X 0 X

L'aspetto della pagina corrente viene determinato da questa funzione:

function crea_link($url_base, $pagina_corrente, $numero_pagina) {
    if($pagina_corrente == $numero_pagina) {
        return "[$numero_pagina]";
    } else {
        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';
    }
}

che nel caso di pagina corrente si limita a mostrare il numero tra parentesi quadre.

Sul sito invece ho inserito uno span per la pagina corrente, quindi la precedente funzione diventa:

function crea_link($url_base, $pagina_corrente, $numero_pagina) {
    if($pagina_corrente == $numero_pagina) {
        return '<span class="current">' . $numero_pagina . '</span>';
    } else {
        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';
    }
}

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

L'aspetto della pagina corrente viene determinato da questa funzione:

function crea_link($url_base, $pagina_corrente, $numero_pagina) {
    if($pagina_corrente == $numero_pagina) {
        return "[$numero_pagina]";
    } else {
        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';
    }
}

che nel caso di pagina corrente si limita a mostrare il numero tra parentesi quadre.

Sul sito invece ho inserito uno span per la pagina corrente, quindi la precedente funzione diventa:

function crea_link($url_base, $pagina_corrente, $numero_pagina) {
    if($pagina_corrente == $numero_pagina) {
        return '<span class="current">' . $numero_pagina . '</span>';
    } else {
        return '<a href="' . crea_url($url_base, $numero_pagina) . '">' . $numero_pagina . '</a>';
    }
}

 :bye:

ah ecco adesso va: avevo provato a modificare anche questa riga ma probabilmente avevo commesso qualche errore..grazie.

Scusami Gianni. Volevo chiederti se questo codice è indispensabile (mi crea problemi come dicevo sopra)

e se potevo modificarlo come proposto sopra:

// se la pagina corrente è minore di 1

if($pagina_corrente < 1)  {

    header('location: ' . $url_base);

    exit();

}

// se la pagina corrente è maggiore dell'ultima pagina

if($pagina_corrente > $tot_pagine) {

    header('location: ' . crea_url($url_base, $tot_pagine));

    exit();

}

ma cosa fa esattamente?

Poi,

Nel codice di paginazione che avevo prima dovevo passare a volte anche i valori di alcune variabili in quanto cambiando pagina non avevo più i risultati della query:

Per farti capire:

..........

  $pagination.="<a href=".$webpage."?page=1&task=ricerca&id_fornitori=$id_for&inizio=$inizio&fine=$fine&checkscad=$checkscad"."> indietro </a>

..........

i valori passati venivano ripresi come sempre dai vari REQUEST.

E' possibile fare una cosa del genere nel file paginazione.php ?

Grazie

risposto 5 anni fa
frankphp
X 0 X

I due blocchi IF che hai riportato servono ad evitare che un utente, manipolando l'URL, richieda delle pagine inesistenti, ovvero minori di 1 e maggiori del numero massimo di pagine disponibili.

Questi due controlli, in caso di numero pagina impossibile da visualizzare, rimandano con un redirect o alla prima pagina o all'ultima, a seconda se è stata richiesta una pagina minore di 1 o maggiore dell'ultima.

E' questo redirect che ti sta dando problemi, probabilmente perché hai già inviato al browser dell'output. In tal caso ti basta chiamare ob_start() all'inizio del primo script richiamato.

Per quanto riguarda gli altri parametri da accodare all'URL, alla funzione paginazione()  ti basta passare come secondo parametro l'URL "di base", completo dei parametri che ti interessano. La funzione aggiungerà a questi parametri il numero di pagina.

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X
E' questo redirect che ti sta dando problemi, probabilmente perché hai già inviato al browser dell'output. In tal caso ti basta chiamare ob_start() all'inizio del primo script richiamato.

..hmmm un attimo. Le 2 cose mi interessano tanto. Altrimenti devo rinunciare allo script.

Voglio capire bene

all'inizio del primo script richiamato?

Dove? Nel codice della mia pagina o è una modifica alla paginazione?

Per quanto riguarda gli altri parametri da accodare all'URL, alla funzione paginazione()  ti basta passare come secondo parametro l'URL "di base", completo dei parametri che ti interessano. La funzione aggiungerà a questi parametri il numero di pagina.

 :bye:

questo ancora  più importante.

I valori che devo passare sono questi ad esempio:

......task=ricerca&id_fornitori=$id_for&inizio=$inizio&fine=$fine&checkscad=$checkscad

Dove li devo aggiungere?

Devo fare una cosa del genere?:

.................

$url_base= $url_base?task=ricerca&id_fornitori=$id_for&inizio=$inizio&fine=$fine&checkscad=$checkscad

..........

// funzione che crea i link alle pagine dei risultati

function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine)

................

Dicevi così?

Ma solo alla funzione paginazione()?

Grazie ancora

risposto 5 anni fa
frankphp
X 0 X
E' questo redirect che ti sta dando problemi, probabilmente perché hai già inviato al browser dell'output. In tal caso ti basta chiamare ob_start() all'inizio del primo script richiamato.

..hmmm un attimo. Le 2 cose mi interessano tanto. Non voglio rinunciare a questo script ma

voglio capire bene

all'inizio del primo script richiamato?

Dove? Nel codice della mia pagina o è una modifica alla paginazione?

Per quanto riguarda gli altri parametri da accodare all'URL, alla funzione paginazione()  ti basta passare come secondo parametro l'URL "di base", completo dei parametri che ti interessano. La funzione aggiungerà a questi parametri il numero di pagina.

 :bye:

questo ancora  più importante.

I valori che devo passare sono questi ad esempio:

......task=ricerca&id_fornitori=$id_for&inizio=$inizio&fine=$fine&checkscad=$checkscad

Dove li devo aggiungere?

Devo fare una cosa del genere?:

.................

$url_base= $url_base?task=ricerca&id_fornitori=$id_for&inizio=$inizio&fine=$fine&checkscad=$checkscad

..........

// funzione che crea i link alle pagine dei risultati

function paginazione($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine)

................

Dicevi così?

Ma solo alla funzione paginazione()?

Grazie ancora

risposto 5 anni fa
frankphp
X 0 X

ob_start() deve essere la prima istruzione eseguita.

si, $url_base va impostato come hai fatto tu, devi però mettere gli apici alla stringa!

si, devi farlo solo per la funzione paginazione()

 :bye:

risposto 5 anni fa
Gianni Tomasicchio
X 0 X

ob_start() deve essere la prima istruzione eseguita.

si, $url_base va impostato come hai fatto tu, devi però mettere gli apici alla stringa!

si, devi farlo solo per la funzione paginazione()

 :bye:

quindi ob_start() ad inizio pagina,

per il resto ok.....penso di aver capito.

Faccio delle prove appena possibile e faccio sapere.

Grazie ancora

risposto 5 anni fa
frankphp
X 0 X
si, $url_base va impostato come hai fatto tu, devi però mettere gli apici alla stringa!

Ok. fatto!

Sembra che funzioni tutto per bene. Continuo a testare però.

Ho dovuto apportare delle modifiche alla funzione:

nella pagina che la richiama:

..............

$link_paginazione = paginazione_ric($total_pages, $url_base, $page, $pagine_vicine, $inizio, $fine);

echo $link_paginazione;

.............

Nel file paginazione.php ho aggiunto quindi la nuova funzione modificata:

...............

// funzione che crea i link alle pagine dei risultati

function paginazione_ric($tot_pagine, $url_base, $pagina_corrente, $pagine_vicine, $inizio, $fine) {

   $url_base= $url_base."?task=ricerca&inizio=$inizio&fine=$fine";

................

Grazie Gianni!! Sei un grande!!

Se hai qualcosa da aggiungere..................

Ciao

risposto 5 anni fa
frankphp
X 0 X

acccc.

C'è un problema

Ho svuotato le tabelle (quindi niente dati e niente paginazione degli stessi)

Il browser mi restituisce questo errore:

"Questa pagina non reindirizza in modo corretto

Firefox ha rilevato che il server sta reindirizzando la richiesta per questa pagina

in modo che non possa mai essere completata"

La parte di codice incriminata sembra questa appunto:

// se la pagina corrente è minore di 1

if($page < 1)  {

    header('location: ' . $url_base);

    exit();

}

// se la pagina corrente è maggiore dell'ultima pagina

if($page > $total_pages) {

    header('location: ' . crea_url($url_base, $total_pages));

    exit();

}

In assenza di dati da paginare va in "tilt"

Eliminando le righe sopra tutto ritorna a posto e visualizzo il messaggio che avevo preimpostato in caso di dati assenti:

ad esempio:

"Non ci sono fornitori registrati" o che so io

Che faccio?

Grazie

risposto 5 anni fa
frankphp
X 0 X

intanto ho cancellato questo:

// se la pagina corrente è minore di 1

if($page < 1)  {

    header('location: ' . $url_base);

    exit();

}

che da problemi in caso non ci siano record salvati nel db..magari lo sostituisco con un messaggio di errore.

Ciao

risposto 5 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda