Breadcrumbs, menù a briciole di pane

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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 = basename( filter_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 = ucwords( substr( $url, 0, -4 ));  //  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:
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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 = basename( filter_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 = ucwords( substr( $url, 0, -4 ));  //  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:

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
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 = ucwords( substr( $url, 0, -4 ));
Certo si può fare facilmente, per esempio rilevando l'ultima posizione del punto prima dell'estensione:
PHP:
$text = ucwords( substr( $url, 0, strripos( $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 = ucwords( substr( $url, 0, strripos( $url, '.' )));
$text = strtr( $text, array( '-' => ': ' ));
E avremo una formattazione come quella proposta.
 
Discussioni simili
Autore Titolo Forum Risposte Data
otto9due breadcrumbs con microformat o RDF piccolo aiutino.. PHP 2
G Elementi Menù orizzontali HTML e CSS 2
psikolele Dropdown menù HTML e CSS 2
G Menù a tendina di ricerca con query PHP 1
F menù select dinamico da db in php PHP 3
L Menù con switch case C/C++ 1
J Richiama descrizione da menù PHP 11
Z Menù di navigazione responsivo HTML e CSS 0
R Barra del menù principale decentrata Joomla 4
M Stringa con spazi nel menù a tendina PHP 4
A Menù a tendina collegato a database PHP 13
D Aumentare i sublevel del menù del theme Webdesign e Grafica 1
Tommy03 Contenitore non si nasconde dietro al menù HTML e CSS 1
Tommy03 Due menù nella stessa app Sviluppo app per Android 0
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
C [PHP] Form inserimento più menù a discesa PHP 9
V Menù CSS da file in cartella esterna HTML e CSS 4
W [Javascript] [HTML] menù responsive fisso Javascript 2
S [PHP] menù a tendina che stampi voce scelta in precedenza PHP 1
F [HTML] Responsive menù CMS (Content Management System) 0
A [PHP] menù con links esterni PHP 6
D Come inserire opzioni menù prelevandole dal database con PHP ? PHP 12
F [HTML] li menù width HTML e CSS 3
T [Javascript] un form con select dinamica che funzioni da menù... Javascript 2
ecosito [Wordpress] La barra del menù mi nasconde la parte alta delle pagine WordPress 0
greven [WordPress] [CSS3] Inserire Hover Effect sul menù WordPress 10
F Problema hover voce di menù Javascript 2
F Nascondere menù onclick sottovoce jQuery 0
F Active menù HTML e CSS 2
A menù a tendina aiuto PHP 1
M Menù a tendina editabile HTML e CSS 0
P problema con tendina del menù, scompare sotto i contenuti HTML e CSS 7
F Link menù attivo categoria PHP 2
I nav menù HTML e CSS 13
LuigiDonato Problema Visualizzazione Menù HTML e CSS 17
C Menù scomparso WordPress 2
V Posizionare Iframe e menù a discesa HTML e CSS 1
F z-index menù HTML e CSS 4
Tommi Script per menù Javascript 16
Licantropo esportare tags e menù Joomla 0
F Menù a tendina Joomla 4
L [PHP] 3 menù Select OPTION consecutivi PHP 1
Carlito's Menù jQuery 1
E Menù da modificare HTML e CSS 2
H Menù a discesa contenente dati db, la scelta dal menù deve essere inviata in un altro db. PHP 1
andreaco Problema menù a scomparsa laterale HTML e CSS 10
L Inserisco 2 menù e vedo sempre il primo PHP 0
E Problemi con menù a cascata HTML e CSS 0
N Problemi chiusura menù laterale Javascript 5
S iframe e link da menù HTML e CSS 0

Discussioni simili