Breadcrumbs, menù a briciole di pane

Discussione in 'Snippet PHP' iniziata da MarcoGrazia, 20 Novembre 2015.

  1. MarcoGrazia

    MarcoGrazia Utente Attivo

    Registrato:
    15 Dicembre 2009
    Messaggi:
    676
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Sviluppare web design (Studiare)
    Località:
    Udine
    Home Page:
    Ciao,
    ecco un semplice script in PHP che genera le cosiddette "briciole di pane" ovvero il breadcrumbs per un sito.

    Premesse: per funzionare usa le sessioni,

    Script da mettere in ogni pagina che si vuole monitorare per generare le breadcrumbs
    PHP:
    <?php
    session_start
    ();  //  Senza questo le sessioni non funzionano.
    //    Genera il nome del file in esecuzione ( la pagina che stiamo guardando )
    $paginaCorrente basenamefilter_var$_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING ));
    //    Inserisco la pagina corrente nell'array di sessione
    $_SESSION['breadcrumb'][] = $paginaCorrente;
    ?><!DOCTYPE html>
    <html lang="it">
            <head>
    ...........
            </head>
    <body>
    .......
    <?php
    //      Immagino che qui va il nostro menù a briciole di pane.
    //      Ovviamente il layout della pagina è affar vostro ;-)
    $links "<ol>\n";
    //      Elimino i dati ripetuti ( in una pagina si può entrare più volte, ma a noi interessa solo la prima volta che uno ci passa )
    $_SESSION['breadcrumb'] = array_unique$_SESSION['breadcrumb'] );
    foreach ( 
    $_SESSION['breadcrumb'] AS $url ) {
        
    $text ucwordssubstr$url0, -));  //  Rendo in maiuscoletto la stringa, ovvero il nome della pagina, senza l'estenzione finale ( supposto che sia sempre un punto più tre lettere - da rivedere! )
        
    if ( $url == $paginaCorrente ) {  //  Verifico se siamo sulla pagina, in questo caso la scrivo in un altro colore per marcarla
            
    $link .= "  <li><a href=\"$url\" style=\"color: red;\">$text</a></li>\n";  //  Link Rosso
        
    } else {
            
    $link .= "  <li><a href=\"$url\" style=\"color: green;\">$text</a></li>\n";  // Link Verde
        
    }
    }
    //    Stampo il risultato a video e chiudo la lista
    echo "$link</ol>\n";
    ?>

    .......
    </body>
    </html>
    Ovviamente la formattazione ognuno si fa la sua, magari usando i CSS, così com'è stampa una lista ordinata di link in verde, uno sotto l'altro, con un unico in rosso, quello della pagina su cui state la momento.
    :byebye:
     
  2. MarcoGrazia

    MarcoGrazia Utente Attivo

    Registrato:
    15 Dicembre 2009
    Messaggi:
    676
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Sviluppare web design (Studiare)
    Località:
    Udine
    Home Page:
    Correzione bugs!

    Nello script c'è un errore: prima faccio menzione di uan variabile chiamata $links ( con la S finale ) e poi quella esse la tolgo.
    PEr farlo funzionare bene, togliete la esse finale al nome della variabile $links qui:
    PHP:
    $links "<ol>\n";
    che diventa:
    PHP:
    $link "<ol>\n";
    Fatelo o vi darà errore!
    Ho messo online un sito per farvelo provare: Breadcrumbs

    Tanto per esser chiari ecco le pagine del sitozzarello
    file-1.php / file-2.php / file-3.php
    PHP:
    <?php
    session_start
    ();  //  Senza questo le sessioni non funzionano.
    //    Genera il nome del file in esecuzione ( la pagina che stiamo guardando )
    $paginaCorrente basenamefilter_var$_SERVER['PHP_SELF'], FILTER_SANITIZE_STRING ));
    //    Inserisco la pagina corrente nell'array di sessione
    $_SESSION['breadcrumb'][] = $paginaCorrente;
    ?><!DOCTYPE html>
    <html lang="it">
            <head>
            <title>File 1</title>
            <meta charset="utf-8">
            <style>
                body {
                    color: #000;
                    background-color: #F5F5F5;
                    margin: 0;
                    z-index: 1;
                }
                ul,
                .breadcrumbs {
                    list-style: none;
                    margin: 0 auto;
                    padding: 0;
                    width: 90%;
                    height: auto;
                }
                ul li,
                .breadcrumbs li {
                    float: left;
                    display: inline-block;
                }
                ul li a,
                .breadcrumbs li a {
                    display: left;
                    margin: 0 10px;
                    padding: 5px;
                    height: 2em;
                    line-height: 2em;
                    color: green;
                }
                ul li a {
                    background-color: #D3D7CF;
                    color: #26528F;
                }
                ul li a:hover {text-decoration: none;}
            </style>
            </head>
    <body>
        <h1>Prova per un breadcrumbs</h1>
        <ul>
            <li><a href="file-1.php">Link 1</a></li>
            <li><a href="file-2.php">Link 2</a></li>
            <li><a href="file-3.php">Link 3</a></li>
        </ul>
        <p>&nbsp;</p>
    <?php
    //      Immagino che qui va il nostro menù a briciole di pane.
    //      Ovviamente il layout della pagina è affar vostro ;-)
    $link "<ol class=\"breadcrumbs\">\n";
    //      Elimino i dati ripetuti ( in una pagina si può entrare più volte, ma a noi interessa solo la prima volta che uno ci passa )
    $_SESSION['breadcrumb'] = array_unique$_SESSION['breadcrumb'] );
    foreach ( 
    $_SESSION['breadcrumb'] AS $url ) {
        
    $text ucwordssubstr$url0, -));  //  Rendo in maiuscoletto la stringa, ovvero il nome della pagina, senza l'estenzione finale ( supposto che sia sempre un punto più tre lettere - da rivedere! )
        
    if ( $url == $paginaCorrente ) {  //  Verifico se siamo sulla pagina, in questo caso la scrivo in un altro colore per marcarla
            
    $link .= "  <li><a href=\"$url\" style=\"color: red;\">$text</a> &raquo; </li>\n";  //  Link Rosso
        
    } else {
            
    $link .= "  <li><a href=\"$url\">$text</a> &raquo; </li>\n";  // Link Verde
        
    }
    }
    //    Stampo il risultato a video e chiudo la lista
    echo "$link</ol>\n";
    ?>

    </body>
    </html>
    Ovviamente le pagine sono tutte identiche, cambiano solo i nomi.
     
    Ultima modifica: 20 Novembre 2015
  3. MarcoGrazia

    MarcoGrazia Utente Attivo

    Registrato:
    15 Dicembre 2009
    Messaggi:
    676
    Mi Piace Ricevuti:
    7
    Punteggio:
    18
    Sesso:
    Maschio
    Occupazione:
    Sviluppare web design (Studiare)
    Località:
    Udine
    Home Page:
    Considerazioni personali:
    ovviamente si può modificare lo script, per esempio volendo aggiungere il query string all'url del file.
    Immagino una pagina utente che si identifichi tramite una GET del tipo ... pagina_utente.php?id=123456 usando lo script così com'è la querystring si perde e con essa l'utente; se pagina_utente.php ha un warning tramite il quale chiunque passi di lì senza il querystring viene reindirizzato che so all'homepage, diventa inutile il breadcrumbs per quella pagina, dato che, ogni volta che proviamo a passare da lì veniamo reindirizzati altrove.
    Ed è solo un esempio!

    Altra cosa: nel mio primo post scrivo che
    PHP:
    //  Rendo in maiuscoletto la stringa, ovvero il nome della pagina, senza l'estenzione finale
    //  ( supposto che sia sempre un punto più tre lettere - da rivedere! ) 
    $text ucwordssubstr$url0, -));
    Certo si può fare facilmente, per esempio rilevando l'ultima posizione del punto prima dell'estensione:
    PHP:
    $text ucwordssubstr$url0strripos$url'.' )));
    Ma è davvero necessario?
    Voglio dire: se qualcuno ha un server per far lavorare file con estensione diversa da PHP o addiruttura senza estensione, sì certo può servire, altrimenti è inutile e crea un lavoro in più alla macchina ( il server ).

    Quello che invece si può fare è la modifica del nome del file, il testo dell'url per capirci, File-1 non è il massimo, File 1 è più umanamente accettabile, File: 1 è perfetto!
    Se po' ffà :)
    PHP:
    $text ucwordssubstr$url0strripos$url'.' )));
    $text strtr$text, array( '-' => ': ' ));
    E avremo una formattazione come quella proposta.
     
Sto caricando...

Condividi questa Pagina