Menù a briciole di pane

Il "menù a briciole di pane" prende il nome dalla fiaba di Pollicino, dove il protagonista usava le briciole di pane per ritrovare la strada, un po' come il filo di Arianna. È un menù piuttosto utile per rendersi conto sia della struttura del sito sia per non perdersi. Ecco una sua possibile realizzazione.

<?php
$address = $_SERVER['REQUEST_URI'];
$qm_pos = strpos($address,'?');
if (!($qm_pos === false)) $address = substr($address,1,$qm_pos-1);
$percorso = dirname($address);
$chars = preg_split('|/|', $percorso, -1, PREG_SPLIT_NO_EMPTY);

Prima di tutto recupero l'indirizzo della pagina attuale. Ad esempio /c/informatica/info_sito.php oppure /c/informatica/gentoo/.
Dopodichè elimino tutto quello che si trova dopo un punto interrogativo compreso il punto interrogativo stesso.
A partire dall'indirizzo completo estraggo poi il percorso a meno dell'ultimo livello. Quindi avremo in entrambi i casi /c/informatica/.
Divido la precedente variabile in tante stringhe cercando come separatore il carattere /. Memorizzo queste stringhe dentro un array. PREG_SPLIT_NO_EMPTY ignora le stringhe vuote. Continuando con il nostro esempio avremo $chars[0]="c" e $chars[1]="informatica".

$chars[0] = basename($address,".php");
$n = count($chars);
if ($chars[0] == "index" && $n > 1 ) {$chars[0] = $chars[$n-1]; $n=$n-1;};

Sostituisco il primo valore del precedente array con l'ultimo livello del percorso che avevo lasciato in precedenza. Lo assegno al primo valore dell'array perchè nel mio caso quel valore è inutile dato che contiene sempre la lettera "c" che è la cartella dove si trovano tutte le pagine del sito.
Faccio poi in modo che /c/informatica/index.php e /c/informatica/ siano equivalenti.

echo 'Sei qui: <a href="/" class="int">Home</a> » ';
$url='/c/';
for($i = 0; $i<$n; $i++) {
if ($i != 0) $url .= $chars[$i].'/';
$chars[$i] = ucwords($chars[$i]);
$chars[$i] = str_replace("Universita", "Università", $chars[$i]);
if ($i != 0) echo '<a href="'.$url.'" class="int">'.$chars[$i].'</a> » ';
}

Inizio ora a creare il menù vero e proprio. Stampo il link per la home-page dato che non può comparire nello script così come è stato realizzato.
Poi ciclando sugli elementi del nostro array ricostruisco i link incrementado di volta in volta l'URL. Uso come separatore il carattere ».
Infine eseguo delle operazioni di ripulitura ortografica sul mio array, tra cui far diventare maiuscola la prima lettera di ogni elemento. Sempre ricordando il nostro esempio: $chars[1] rimane uguale mentre $chars[0]="Info_sito" oppure $chars[0]="Informatica".
Da notare che il ciclo for esclude il primo valore dell'array proprio perchè il primo valore è la pagina corrente che non deve essere cliccabile in modo da distinguersi dalle altre e verrà stampata successivamente.
Nel nostro esempio avremo in entrambi i casi: Home » Informatica ».

if ($chars[0] != "Index") echo $chars[0];
?>

Stampo infine il nome della pagina attuale. In questo modo non sarà cliccabile e verrà riconosciuto dal navigatore come la pagina corrente.
Avremo nel primo caso: Home » Informatica » Info_sito; e nel secondo caso: Home » Informatica » Gentoo.