Page 1 sur 3

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

Posté : 21 janv. 2006, 16:27
par phpdog
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>'; ?>

Posté : 21 janv. 2006, 16:32
par Cyrano
De quels liens parles-tu au juste ? La liste fonctionne bien, mais ça reste une liste... :-k

Posté : 21 janv. 2006, 16:38
par HD
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>

Posté : 21 janv. 2006, 16:42
par phpdog
Je parler de ce lien:
echo '<option value='.$dir.'>'.$dir.'</option>';
Mais HD a résolu mon probléme, merci beaucoup :wink:

Posté : 21 janv. 2006, 16:51
par Cyrano
Ce n'est pas un lien ça, mais un élément de la liste :shock:

Posté : 21 janv. 2006, 16:54
par phpdog
Oui et value='.$dir.' s'est le lien.

Posté : 21 janv. 2006, 17:07
par phpdog
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.

Posté : 21 janv. 2006, 17:25
par Cyrano
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.

Posté : 21 janv. 2006, 17:27
par HD
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

Posté : 21 janv. 2006, 17:32
par phpdog
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.

Posté : 21 janv. 2006, 17:37
par Cyrano
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.

Posté : 21 janv. 2006, 17:41
par phpdog
Alor la s'est vraiment bizzaren tout a l'heure se bloquer tout, maitenant sa marche parfaitement, encore merci pour votre aide :wink: :wink:

Posté : 21 janv. 2006, 17:45
par phpdog
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; 
    }  
} 

Posté : 21 janv. 2006, 18:36
par phpdog
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>

Posté : 21 janv. 2006, 19:12
par Tictac
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>';