Un menu déroulant qui liste les fichiers du répertoire coura

Eléphant du PHP | 355 Messages

21 janv. 2006, 16:27

Bonjour à tous

J’ai créé un petit script qui créer dynamiquement un menu déroulant et qui y liste les fichiers du répertoire courant, mais les liens ne fonctionnent pas quelqu’un voit-il se qui cloche dans ce code ?

Code : Tout sélectionner

<?php $directories = glob("*.*"); echo '<form name="form1"><select>'; foreach ($directories as $dir) { if ($dir != 'Objets' && $dir !='img') { echo '<option value='.$dir.'>'.$dir.'</option>'; } } echo '</select></form>'; ?>

Mammouth du PHP | 19672 Messages

21 janv. 2006, 16:32

De quels liens parles-tu au juste ? La liste fonctionne bien, mais ça reste une liste... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

HD
Mammouth du PHP | 1181 Messages

21 janv. 2006, 16:38

essaie cette compile php/html :
<p><form NAME="menu">
<div align="center"><center><p>
Menu déroulant&nbsp;&nbsp;<select NAME="popup"
onChange="change_site();" style="background-color:teal; color:yellow" size="1">
<?php 
$directories = glob("*.*");  
foreach ($directories as $dir) { 
if ($dir != 'Objets' && $dir !='img') { 
echo '<option value='.$dir.'>'.$dir.'</option>'; 
} 
}  
?>
</select> </p>
</center></div>
</form>
<script>
function change_site() {
var site = document.menu.popup.selectedIndex;
{
window.location.href =
document.menu.popup.options[site].value;
}
}
</script>
</p>
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 355 Messages

21 janv. 2006, 16:42

Je parler de ce lien:
echo '<option value='.$dir.'>'.$dir.'</option>';
Mais HD a résolu mon probléme, merci beaucoup :wink:

Mammouth du PHP | 19672 Messages

21 janv. 2006, 16:51

Ce n'est pas un lien ça, mais un élément de la liste :shock:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 355 Messages

21 janv. 2006, 16:54

Oui et value='.$dir.' s'est le lien.

Eléphant du PHP | 355 Messages

21 janv. 2006, 17:07

J'ai encore une question:

Dans le code ci-dessous je cible le dir dans un répertoire articles, les liens sont donc afficher ainsi:

Code : Tout sélectionner

articles/lien1 articles/lien2 articles/lien3
S'est possible de masquer le nom du répertoire ?
<form NAME="menu" style="margin: 0;" class="OpacityStyle">  
<select NAME="popup" onChange="change_site();" style="background-color:#313131; color:#8000FF" size="1"> 
<?php 
$directories = glob("articles\*.*");   
foreach ($directories as $dir) { 
if ($dir != 'Objets' && $dir !='img') { 
echo '<option value='.$dir.'>'.$dir.'</option>'; 
} 
}   
?> 
</select></form> 
Je voudrai aussi si possible masquer les extensions des fichiers.

Mammouth du PHP | 19672 Messages

21 janv. 2006, 17:25

Utilise la fonction strrpos() pour aire une recherche :
- dans un premier temps sur la dernière occurence du "/" pour extraire ce qui suit
- Dans un second temps sur la derni<ere occurence de "." (point)

En combinaison avec substr(), ça va très bien fonctionner.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

HD
Mammouth du PHP | 1181 Messages

21 janv. 2006, 17:27

avant le echo :
crée une variable nomdir puis :
utilise preg_replace ( http://fr3.php.net/manual/fr/function.preg-replace.php ) pour remplacer 'articles\' par '' et de meme pour l'extension
comme ca :
echo '<option value='.$dir.'>'.$nomdir.'</option>';
edit : ou alors la methode cyrano
"Si Dieu descendait sur la Terre, tous les peuples se mettraient a genoux, excepte les Français qui diraient : " Ah ! Vous êtes la ! C'est pas trop tôt ! On va pouvoir discuter un peu !" [Michel Balfour]

Eléphant du PHP | 355 Messages

21 janv. 2006, 17:32

J'ai trouver ceci:
<?php 
// Ici on masque les extenssions des fichiers 
function filename( $filename ) { 
    if (($res = strrpos($filename, '.')) !== FALSE) { 
        return substr($filename, 0, $res); 
    } else { 
        return $filename; 
    }  
} 
// 
$directories = glob("articles\*.*");   
foreach ($directories as $dir) { 
if ($dir != 'Objets' && $dir !='img') { 
echo '<option value='.$dir.'>'.filename($dir).'</option>'; 
} 
}   
?>
Mais la sa bloque le menu.

Mammouth du PHP | 19672 Messages

21 janv. 2006, 17:37

Dis phpdog, si tu te servais un peu de tes propres neurones: c'est pas dur ce type de manpulation: on t'indique des fonctions utiles: le reste, c'est de la logique et personne ne peut l'être à ta place. Si on te file du code tout fait, tu n'apprendras pas grand chose et tu seras toujours à la remorque de ceux qui savent. Sois logique, encore logique et toujours logique.

Si ça bloque, demande toi pourquoi. Fais afficher ton code source, fais afficher tes variables, trouve ce qui coince. Quand tu seras réellement bloqué, alors viens nous voir.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 355 Messages

21 janv. 2006, 17:41

Alor la s'est vraiment bizzaren tout a l'heure se bloquer tout, maitenant sa marche parfaitement, encore merci pour votre aide :wink: :wink:

Eléphant du PHP | 355 Messages

21 janv. 2006, 17:45

La je bloque, je ne voie pas comment supprimer se qu'il y a devant / pour les noms de répertoire.
// Ici on masque les noms de répertoires:
function masqureptr( $masqureptr ) { 
    if (($res = strrpos($masqureptr, '/')) !== FALSE) { 
        return substr($masqureptr, 0, $res); 
    } else { 
        return $masqureptr; 
    }  
} 

Eléphant du PHP | 355 Messages

21 janv. 2006, 18:36

Voici le code complet:
<select NAME="popup" onChange="change_site();" style="background-color:#313131; color:#8000FF" size="1"> 
<option>Mes redirections locale</option>
<?php 
// Ici on masque les extenssions des fichiers:
function filename( $filename ) { 
    if (($res = strrpos($filename, '.')) !== FALSE) { 
        return substr($filename, 0, $res); 
    } else { 
        return $filename; 
    }  
} 
// Ici on masque les noms de répertoires:
function masqureptr( $masqureptr ) { 
    if (($res = strrpos($masqureptr, '/')) !== FALSE) { 
        return substr($masqureptr, 0, $res); 
    } else { 
        return $masqureptr; 
    }  
} 
// 
$directories = glob("articles/*.*");   
foreach ($directories as $dir) { 
if ($dir != 'Objets' && $dir !='img') { 
echo '<option value='.$dir.'>'.masqureptr.filename($dir).'</option>'; 
} 
}   
?> 
</select></form><br>

Eléphant du PHP | 353 Messages

21 janv. 2006, 19:12

une erreur flagrante est déjà ceci =>

$directories = glob("articles/*.*");
foreach ($directories as $dir) {
if ($dir != 'Objets' && $dir !='img') {
echo '<option value='.$dir.'>'.masqureptr.filename($dir).'</option>';

qui doit etre plutot =>
$name = masqureptr(filename($dir)) ;
<option value='.$dir.'>'.$name.'</option>';