[Résolu]Balise utilisateur avec fonction récursive - Yvan - 26/04/2010
Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS : 1.7.0
#~ Version du MLE si existante : Nope
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.7
#~ Installed Modules:
#~ * CMSMailer: 1.73.14
#~ * FileManager: 1.0.2
#~ * MenuManager: 1.6.2
#~ * ModuleManager: 1.3.3
#~ * News: 2.10.4
#~ * nuSOAP: 1.0.1
#~ * Printing: 1.0.4
#~ * Search: 1.6.2
#~ * ThemeManager: 1.1.1
#~ * TinyMCE: 2.6.5
#~ * FrontEndUsers: 1.8.2
#~ * CustomContent: 1.5.3
#~ * CGExtensions: 1.18.3
#~ * CGCalendar: 1.5.2
#~ * GCS: 0.0.1
#~ Config Information:
#~ * php_memory_limit:
#~ * process_whole_template: false
#~ * max_upload_size: 48000000
#~ * default_upload_permission: 664
#~ * assume_mod_rewrite: true
#~ * page_extension: /
#~ * internal_pretty_urls: false
#~ * use_hierarchy: true
#~ Php Information:
#~ * phpversion: 5.2.11
#~ * md5_function: On (Vrai)
#~ * gd_version: 2
#~ * tempnam_function: On (Vrai)
#~ * magic_quotes_runtime: Off (Faux)
#~ * E_STRICT: 0
#~ * memory_limit: 64M
#~ * max_execution_time: 10
#~ * safe_mode: Off (Faux)
#~ * session_save_path: Aucune vérification à cause de la restriction spécifiée par PHP open_basedir
#~ * session_use_cookies: On (Vrai)
#~ Server Information:
#~ * Server Api: apache2handler
#~ * Server Db Type: MySQL (mysql)
#~ * Server Db Version: 5.0.84
#~ ----------------------------------------------
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
Bonjour,
J'essaie d'avoir une balise qui me permet d'afficher tous les fichiers et sous dossiers d'un répertoire donné.
J'ai essayé avec ce code, que j'ai testé et qui fonctionne:
$path = $params['repertoire'];
$dir_handle = @opendir($path) or die("Unable to open $path");
list_dir($dir_handle,$path);
function list_dir($dir_handle,$path){
echo "<ul>";
while (false !== ($file = readdir($dir_handle))) {
$dir =$path.'/'.$file;
if(is_dir($dir) && $file != '.' && $file !='..' )
{
$handle = @opendir($dir) or die("undable to open file $file");
echo "<li><a href='$file'>$file</a></li>";
list_dir($handle, $dir);
}elseif($file != '.' && $file !='..')
{
echo "<li><a href='$file'>$file</a></li>";
}
}
echo "</ul>";
closedir($dir_handle);
}
Je ne comprends pas, avec cette balise, j'obtiens l'erreur :
Fatal error: Call to undefined function list_dir()
On ne peut pas avoir de fonction récursive dans une balise ? Je m'excuse d'avance au cas où j'ai manqué une évidence, mais je suis pas bien doué en php...
En fait, il me faut rien de très compliqué, mais je me dis que c'est quand même plus robuste avec une fonction récursive.
Merci !
[Résolu]Balise utilisateur avec fonction récursive -
Jean le Chauve - 26/04/2010
Il y a un plugin pour ça :
http://dev.cmsmadesimple.org/projects/filelist
Il y en a peut-être encore d'autres.
Sinon, tu peux te baser sur ce code qui liste les images d'un répertoire :
Code :
global $gCms;
$dir = $gCms->config['root_path'] . DIRECTORY_SEPARATOR .'uploads/images/';
$url = './uploads/images/';
echo '<ul>';
// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if ('file' == filetype($dir . $file)) {
echo "<li><a href=".$url.$file.'" rel="lightbox"><img src="'.$url.'thumb_'.$file.'" /></a>'."</li>\n";
}
}
closedir($dh);
}
}
echo '</ul>';
(il vient du wiki)
while($file = readdir($dh)) {
me paraît nettement plus propre que
while (($file = readdir($dh)) !== false) {
idem pour while (false !== ($file = readdir($dir_handle))) {
meilleur : while ($file = readdir($dir_handle)) {
[Résolu]Balise utilisateur avec fonction récursive -
bess - 26/04/2010
déclare ta fonction AVANT de l'appeler
Code :
function list_dir($dir_handle,$path){
echo "<ul>";
while (false !== ($file = readdir($dir_handle))) {
$dir =$path.'/'.$file;
if(is_dir($dir) && $file != '.' && $file !='..' )
{
$handle = @opendir($dir) or die("undable to open file $file");
echo "<li><a href='$file'>$file</a></li>";
list_dir($handle, $dir);
}elseif($file != '.' && $file !='..')
{
echo "<li><a href='$file'>$file</a></li>";
}
}
echo "</ul>";
closedir($dir_handle);
}
$path = $params['repertoire'];
$dir_handle = @opendir($path) or die("Unable to open $path");
list_dir($dir_handle,$path);
[Résolu]Balise utilisateur avec fonction récursive -
bess - 26/04/2010
je cite
Citation :Contrairement à de nombreux autres langages, PHP nécessite que l'on définisse une fonction avant que celle-ci puisse être utilisée, car pour l'appeler dans le corps du programme il faut que l'interpréteur la connaisse, soit qu'il connaisse son nom, ses arguments et les instructions qu'elle contient.
[Résolu]Balise utilisateur avec fonction récursive - Yvan - 27/04/2010
Merci ! j'ai mis la journée (ou presque) pour faire un code comme je voulais. Il fait une liste des fichiers et des dossiers depuis un point donné, avec les fichiers triés alphabétiquement.
Je vous le mets, au cas où. Si vous avez des remarques par rapport à la syntaxe, elles sont les bienvenues :
$dir = "./uploads/";
$depth = 0;
function iterate($dir, $depth) {
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
if ($handle = opendir($dir)) {
$arrayfile = array();
$arraydir = array();
while ($file = readdir($handle)) {
if ($file != '.' && $file !='..') {
$fullpath = $dir.'/'.$file;
if(is_dir($fullpath))
$arraydir[] = $file;
else
$arrayfile[] = $file;
}
}
if($arrayfile || $arraydir) {
echo '<ul class="file_list'.$depth.'">';
$depth=$depth+1;
if($arrayfile){
sort($arrayfile);
foreach ($arrayfile as $value) {
echo '<li class="file'.$depth.'"><a href="'.$dir.'/'.$value.'" target="_blank">'.$value.'</a></li>';
}
}
if($arraydir){
sort($arraydir);
foreach ($arraydir as $value) {
echo '<li class="directory'.$depth.'">'.$value.'</li>';
iterate($dir.'/'.$value, $depth);
}
}
}
echo '</ul>';
$depth=$depth-1;
}
}
}
}
iterate($dir, $depth);
[Résolu]Balise utilisateur avec fonction récursive -
Jean le Chauve - 27/04/2010
Un plus complet
http://cyberzoide.developpez.com/php4/file/
résultat :
http://cyberzoide.developpez.com/php4/file/test9.php3
Tu aurais aussi pu reprendre le code du gestionnaire de fichiers cmsms, quand j'y pense :lol: