Si tu veux le code en entier :
<?php
$rep = 'heberg/';
$dir = opendir($rep);
$liste = array();
$origine = array('__-', '__e', '_-e', '__c', '_');
$remplace = array('--- ', 'é', 'è', 'ç', ' ');
while ($f = readdir($dir)) {
if(is_dir($rep.$f)) {
if(($f != '.') && ($f != '..') && (substr($f,-3) != '_tn')) {
if (($f{12} == '+') || ($f{6} == '+') || ($f{1} == '+')) {$f_court = str_replace('--- ','\'',ucwords(str_replace($origine,$remplace,substr(strrchr($f,'+'),1))));}
else $f_court=str_replace('_',' ',$f);
array_push($liste,$f.'|'.$f_court);
}
}
}
closedir($dir);
usort($liste,'strcasecmp');
// 1e occurrence de ma fonction :
$titre = 'vacances';
echo '<h1>'.ucfirst($titre).' :</h1><ul>';
$cle = substr($titre,0,1);
for($i=0;$i<sizeof($liste);$i++){
if ((($liste[$i]{12} == '+') && ($liste[$i]{11} == $cle)) || (($liste[$i]{6} == '+') && ($liste[$i]{5} == $cle)) || (($liste[$i]{1} == '+') && ($liste[$i]{0} == $cle))) {
list($f,$f_court)=explode('|',$liste[$i]);
$f_long = str_replace('+','---',$f);
if ($f{12} == '+') {echo '<li><a href="dossiers.php?dossier='.$f_long.'">'.$f_court.' ('.substr($f_long,8,2).'/'.substr($f_long,5,2).'/'.substr($f_long,0,4).')</a></li>';}
elseif ($f{6} == '+') {echo '<li><a href="dossiers.php?dossier='.$f_long.'">'.$f_court.' ('.substr($f_long,0,4).')</a></li>';}
else {echo '<li><a href="dossiers.php?dossier='.$f_long.'">'.$f_court.'</a></li>';}
}
}
echo '</ul><br /><br />';
// 2e occurrence de ma fonction :
$titre = 'famille';
echo '<h1>'.ucfirst($titre).' :</h1><ul>';
$cle = substr($titre,0,1);
for($i=0;$i<sizeof($liste);$i++){
if ((($liste[$i]{12} == '+') && ($liste[$i]{11} == $cle)) || (($liste[$i]{6} == '+') && ($liste[$i]{5} == $cle)) || (($liste[$i]{1} == '+') && ($liste[$i]{0} == $cle))) {
list($f,$f_court)=explode('|',$liste[$i]);
$f_long = str_replace('+','---',$f);
if ($f{12} == '+') {echo '<li><a href="dossiers.php?dossier='.$f_long.'">'.$f_court.' ('.substr($f_long,8,2).'/'.substr($f_long,5,2).'/'.substr($f_long,0,4).')</a></li>';}
elseif ($f{6} == '+') {echo '<li><a href="dossiers.php?dossier='.$f_long.'">'.$f_court.' ('.substr($f_long,0,4).')</a></li>';}
else {echo '<li><a href="dossiers.php?dossier='.$f_long.'">'.$f_court.'</a></li>';}
}
}
echo '</ul><br /><br />';
// comment placer le tout dans une fonction et l'appeler 2 fois au lieu de ces 2 paragraphes identiques ?
echo '<h1>.</h1><ul>';
for($i=0;$i<sizeof($liste);$i++){
if (($liste[$i]{12} != '+') && ($liste[$i]{6} != '+') && ($liste[$i]{1} != '+')) {
list($f,$f_court)=explode('|',$liste[$i]);
echo '<li><a href="dossiers.php?dossier='.$f.'">'.$f_court.'</a></li>';
}
}
echo '</ul><br /><br />';
?>
Voilà l'essentiel de la page, c'est-à-dire tout sauf la présentation (HTML-CSS). Comme je le disais $liste est un array créé avant. Cette partie n'est pas importante, le résultat est que j'ai juste un array $liste('','','',...).
Donc simplement le script crée une liste à partir des dossiers présents pour faire un site de photos et vidéos personnelles (pour la famille).
Pour l'indentation je suis désolé, elle est faite correctement dans mon fichier mais lorsque je poste le code ici le site la retranscrit très mal, à cause de ma lignes longues qui sont ici retournées à la ligne.
Vous voyez que j'utilise exactement 2 fois les même lignes en assignant juste une fois $titre = 'vacances'; et l'autre $titre = 'famille';. A terme il devrait y avoir d'autres catégories donc se serait nettement plus élégant de passer par une fonction.
Mais comme je l'expliquais je en vois pas mon erreur : là ça marche parfaitement, mais je crée la "function listage($titre) {CODE}" et que je l'appelle par listage('vacances'); et listage('famille');, j'obtiens les titres mais pas les listes des dossiers. Le code source retourné par le serveur est par exemple :
<h1>Vacances :</h1><ul></ul><br /><br />
Le soucis n'est pas le code lui-même. Il peut je n'en doute pas être amélioré mais dans l'état il marche ! Mon problème est le passage en forme de fonction pour ne pas le recopier à chaque catégorie, qui lui me pose problème.