Gestion des medias: tri des répertoires

rockyhorrorrockyhorror Member
février 2014 modifié dans Modifications
Bonjour,

Il semble que dans la gestion des médias, la liste des dossiers ne soit pas triée correctement (probablement du à l'utilisation de la fonction readdir). Quand il y à beaucoup de dossier, ça peut vite faire mal aux yeux.
Je propose de modifier la fonction "_getAllDirs" dans le fichier class.plx.medias.php
par:
[== PHP ==]
private function _getAllDirs($dir,$level=0) {
	# Initialisation
	$folders = array();
		
	$alldirs = scandir($dir);
	natsort($alldirs);
		
	foreach($alldirs as $folder) {
		if($folder[0] != '.') {
			if(is_dir(($dir!=''?$dir.'/':$dir).$folder)) {
				$dir = (substr($dir, -1)!='/' AND $dir!='') ? $dir.'/' : $dir;
				$path = str_replace($this->path, '',$dir.$folder.'/');
				$folders[] = array(
						'level' => $level,
						'name' => $folder,
						'path' => $path
					);

				$folders = array_merge($folders, $this->_getAllDirs($dir.$folder, $level+1) );
			}
		}
	}
		
	return $folders;
}

Cela permettra d'avoir un affichage des dossiers avec un tri naturel

Réponses

  • Ha ; les dossiers pour chercher les médias ; c'est ma bête noir. 8.(
    Je range par sous dossier <YYYY> // <MM> ; et ça donne par exemple :
    http://www.davidrevoy.com/data/images/blog/2014/01/2014_by-David-Revoy.jpg
    Sauf que l'affichage jusqu'a présent ; me mets tout en desordre ; et de 2009 a 2014 avec tous les mois ; c'est un vrai casse tête.
    Autant dire qu'une proposition de modifications est bienvenue. Je vais tester. Merci.
  • J'ai testé et j'aime beaucoup. J'ai fait la petite modification suivante juste la ligne après natsort($alldirs);
    $alldirs = array_reverse($alldirs, true);
    
    Ca me permet de commencer en inverse , par les dates les plus récente ( dans mon cas en haut de la liste par 2014 , 02 , 01 , 2013 , 12 , 11 , 10 etc... ).
    Bien pratique ! 8)
  • Hello,

    Une petite correction à faire, il manque un "/":

    Remplacer:
    [== PHP ==]
    $path = str_replace($this->path, '',$dir.$folder);
    

    par
    [== PHP ==]
    $path = str_replace($this->path, '',$dir.$folder.'/');
    

    Sinon ça va faire bizarre lors de la création de dossier.

    J'ai corrigé dans le post du début.
  • :) merci
  • @rockyhorror, Le / est le séparateur de dossier sur Linux mais sur Windows c'est un autre et il arrive de croiser des serveurs en Windows donc mettre le / en dur est délicat.

    J'ai un string de l'array

  • Jerry WhamJerry Wham Member
    février 2014 modifié
    Il vaut mieux utiliser DIRECTORY_SEPARATOR qui est une constante déjà définie par php. Si on veut faire plus court, on peut en créer une nouvelle que l'on nommera DS. Ainsi, quel que soit le système d'exploitation utilisé sur le serveur, les chemins seront toujours bien écrits.
  • je découvre le post :)
    la dernière modif que tu m'as envoyée, Rocky, tourne nickel en local sous windows, en ligne sous Linux, si cela peut te servir à quelques chose ;)
  • Bonjour,

    Concernant le /, j'ai repris ce qui existe déjà dans la fonction initiale. Je ne pense pas que ce soit un problème pour window, sinon tout le core pluxml est à revoir :/
  • En poussant un peu plus loin, il semble que dans la fonction "contentFolder()" (toujours dans class.plx.medias.php), l'utilisation de "ksort($this->aDirs);" soit inutile. En effet le tableau aDirs n'a pas de clé utile pour le tri des répertoires.

    Stéphane pourras peut etre nous confirmer ça.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Bug confirmé et pris en compte
    issue #57

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • StéphaneStéphane Member, Former PluXml Project Manager
    rockyhorror a écrit:
    En poussant un peu plus loin, il semble que dans la fonction "contentFolder()" (toujours dans class.plx.medias.php), l'utilisation de "ksort($this->aDirs);" soit inutile. En effet le tableau aDirs n'a pas de clé utile pour le tri des répertoires.

    Stéphane pourras peut etre nous confirmer ça.

    Je confirme le ksort ne sert pas

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

Connectez-vous ou Inscrivez-vous pour répondre.