Bene. Siamo arrivati alla conclusione di questa discussione.
Ora vedremo come creare dinamicamente dei menù (o indici) leggendo il contenuti di una cartella e creando dei link ad essi.
Per fare questo ci facciamo aiutare da due fattori:
un prefisso che metteremo ai files da linkare
il titolo che abbiamo usato servendoci del tag
<title> ... </title>.
Per fare questo, sempre per ottimizzare il codice ho creato una seconda funzione. Quindi ci ritroviamo con 2 funzioni:
function estensione_file($string)
function leggi_titolo($file)Mentre la prima funzione l'abbiamo vista nel post precedente, la seconda funzione esegue questo lavoro:
In questa funzione:
leggiamo il contenuto del file in esame memorizzando il suo contenuto, riga per riga, in una matrice ($content)
cominciamo a cercare tra le varie righe la stringa <title>
trovata questa stringa la cancelliamo e resta la sola stringa contenuta tra <title> e </title
interrompiamo il ciclo e torniamo alla routine principale.
Nella routine principale eseguiamo questo lavoro:
ci spostiamo nella cartella da leggere
iniziamo a leggere i files
controlliamo che la estensione sia quella che cerchiamo
il file deve avere un determinato prefisso, quindi controlliamo che nel nome del file ci sia anche questo
se superiamo questi due test aggiungiamo il file nella matrice
Una volta letto tutto il contenuto della cartella e memorizzati i files desiderati nella matrice, prima di scriverli e lincarli leggeremo il contenuto del tag <title> ... </title> richiamando la funzione leggi_titolo().
Questo il codice che ho usato.
<?php
// la funzione per leggere le estensioni dei files
function estensione_file($string) {
//Controllo il file
$trova_punto = explode(".", $string);
$estensione = $trova_punto[count($trova_punto) - 1];
$estensione = strtolower($estensione);
// Se non ci sono estensioni
if (isset($trova_punto[1]) == FALSE) {
return '';
}
//Ritorno il valore dell' estensione
return $estensione;
}
[hr]
// la funzione per leggere il contenuto del tag <title>
function leggi_titolo($file) {
$content = file($file);
foreach ($content as $stringa) {
// fra gli elementi che abbiamo letto dal file cerchiamo l'esistenza del tag < title >
$substr = substr_count($stringa, '<title>');
if ($substr) {
$page_title = $stringa;
// cancelliamo i tag <title> di apertura e chiusura
$page_title = str_replace("<title>", "", $page_title);
$page_title = str_replace("</title>", "", $page_title);
// usciamo prematuramente dal ciclo
break;
}
}
return $page_title;
}
[hr]
// lettura dei files della cartella dove risiede il file con lo script
$file_trovati = array();
$path='./';
chdir($path);
$cartella = opendir($path); //../php/
// creiamo un ciclo che legga i contenuti e li metta nell'array
while ($file = readdir($cartella)) {
if (is_file($file)) {
$estensione = estensione_file($file);
$pos = substr($file, 0, 3);
if ($estensione == "php" && $pos == "php") {
$file_trovati[] = $file;
}
}
}
// chiudiamo il tag php per iniziare a disegnare, in codice HTML la tabella che conterrà i nostri link
?>
<table class="elenco" width="95%" border="1" cellspacing="0" cellpadding="0">
<tr>
<th>Argomento</th>
</tr>
<?php
// rientriamo in PHP per continuare il lavoro
foreach ($file_trovati as $file) {
$titolo = leggi_titolo($path . $file); // questo il richiamo alla funzione che legge nel tag <title>
if ($titolo != "") {
echo "<tr><td>";
echo "<a href=\"" . $path . $file . "\">" . $titolo . "</a>"; // con questo la creazione del link al file
echo "</td></tr>\n";
}
}
?>
</table>
Questo codice produce una cosa del genere:
<a href="./php007.php">matrici</a>
<a href="./php005.php">Eliminare il carattere \ dai dati inviati da un form</a>
<a href="./php003.php">e-mail con una sola pagina</a>
ecc.
Le parti sono così state scelte:
./ ........................ viene preso dala variabile $path
php007.php .......... è il nome del file che rispetta i filtri imposti: .php (estensione), php (prefisso)
matrici .................. è la stringa letta nel tag <title>
Il codice non è di difficile comprensione, mi sembra di facile letturaa e comprensione, per cui potrei anche fermarmi qui
Per ora è tutto. Tornerò presto con nuovi argomenti.
Ciao