Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

XML DE DESCRIPTION DE DOSSIERS NAUTILUS




Description

Cliquez pour voir la capture en taille normale
cette source d'adresse aux utilisateurs de gnome.

nautilus permet de personaliser l'affichage des dossiers, mettre une image a la place de l'icone par exemple. Pour ceux qui telechargent de la musique libre sur jamendo, vous pouvez constater qu'une fois que vous avez telecharge 100 albums, il devient difficile de changer chaque image de chaque album...

ce script automatise la tache, il va chercher dans le dossier, la premiere image vennue (recursivement), et il la place comme icone.

dans la source, j'ai mis ces deux lignes :

$dir='/media/Yakumo/Musique/musique libre';
$dest='/home/max/.nautilus/metafiles/file:%2F%2F%2Fmedia%2FYakumo%2FMusique%2Fmusique%2520libre.xml';

il faut les remplacer par le dossier du dossier qui contient les sous-dossiers a "colorier", et le chemin du fichier de conf qui correspond.

pour lancer, il suffit de taper en ligne de commande :
$php iconize.php
 

Source

  • <?php
  • /**
  • * @file iconize.php
  • * @brief le fichier qui permet d'afficher dans un dossier, une icone par sous dossier, en prennant la premiere image vennue :)
  • * @test php iconize.php
  • */
  • include('top.php');
  • function first_icon($path){
  • $a=opendir($path);
  • while ($b=readdir($a)){
  • if ($b{0}!='.'){
  • if (is_dir($path.$b)){
  • if ($c=first_icon($path.$b.'/')) return $c;
  • }else if (substr($b, strlen($b)-3)=='jpg'){
  • return $path.$b;
  • }
  • }
  • }
  • return false;
  • }
  • function encode($str, $a=true){
  • $b=array(' ', 'é', ']', '[', ',', 'î');
  • $c=array('%20', '%C3%A9', '%5D', '%5B', '%2C', '%C3%A');
  • if ($a) {$b[]='/'; $c[]='%2F';}
  • return str_replace( $b, $c, $str );
  • }
  • $dir='/media/Yakumo/Musique/musique libre';
  • $dest='/home/max/.nautilus/metafiles/file:%2F%2F%2Fmedia%2FYakumo%2FMusique%2Fmusique%2520libre.xml';
  • $a=new GnomeDirXml();
  • $b=opendir($dir);
  • while ($c=readdir($b)){
  • if ($c{0}!=='.'){
  • $a->appendChild($d=new TemplateXML('file'));
  • $d->setAttribute('name', encode($c));
  • $d->setAttribute('timestamp', time()+10000);
  • $d->setAttribute('custom_icon', encode(substr(first_icon($dir.'/'.$c.'/'), strlen($dir)+2+strlen($c)), false));
  • }
  • }
  • $fd=fopen($dest, 'w');
  • fputs($fd, $a->show());
  • fclose($fd);
  • ?>
<?php
/**
* @file iconize.php
* @brief le fichier qui permet d'afficher dans un dossier, une icone par sous dossier, en prennant la premiere image vennue :)
* @test php iconize.php
*/
include('top.php');

function first_icon($path){
	$a=opendir($path);
	while ($b=readdir($a)){
		if ($b{0}!='.'){
			if (is_dir($path.$b)){
				if ($c=first_icon($path.$b.'/')) return $c;
			}else if (substr($b, strlen($b)-3)=='jpg'){
				return $path.$b;
			}
		}
	}
	return false;
}

function encode($str, $a=true){
	$b=array(' ',	'é',		']',	'[',	',', 'î');
	$c=array('%20',	'%C3%A9',	'%5D',	'%5B',	'%2C', '%C3%A');
	if ($a) {$b[]='/'; $c[]='%2F';}
	return str_replace( $b, $c, $str );
}

$dir='/media/Yakumo/Musique/musique libre';
$dest='/home/max/.nautilus/metafiles/file:%2F%2F%2Fmedia%2FYakumo%2FMusique%2Fmusique%2520libre.xml';
$a=new GnomeDirXml();
$b=opendir($dir);
while ($c=readdir($b)){
	if ($c{0}!=='.'){
		$a->appendChild($d=new TemplateXML('file'));
		$d->setAttribute('name', encode($c));
		$d->setAttribute('timestamp', time()+10000);
		$d->setAttribute('custom_icon', encode(substr(first_icon($dir.'/'.$c.'/'), strlen($dir)+2+strlen($c)), false));
	}
}
$fd=fopen($dest, 'w');
fputs($fd, $a->show());
fclose($fd);

?>

Conclusion

la fonction encode ne fonctionne pas parfaitement bien, mais ca reste utilisable.
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de webdeb le 10/04/2008 14:09:59

A titre d'information tu aurais pu gérer la récupération de l'extension du fichier à partir de la fonction pathinfo() et sa constante PATHINFO_EXTENSION.

signaler à un administrateur
Commentaire de yoman64 le 11/04/2008 01:23:39

Salut coucou747,

Bon j'ai (étonnament) quelques remarques. Les mêmes que l'usuel et je suis certain que tu vas trouvé à me contredire, mais je les signales quand même :P

Bon déja substr($b, strlen($b)-3) peut être remplacé par substr($b,-3) (au passage, si l'image a une extension .jpeg ton script le voit pas alors que c'est valide, c'est donc mieu d'isoler l'extension)

Ensuite {0}, il serait judicieux d'utiliser les [ ] plutot. Pour la compatibilité éventuelle avec php6 qui ne les auras pu (entre autre) mais je sais que cet argument la vaut rien, c'était une remarque au passage.

Il y a aussi les comparaison === lorsque tu compare un même type. Si je le signale c'est parce que des fois tu l'utilises et des fois non, donc manque de constance.

Ta fonction encode à quel intêret sachant que urlencode remplace tous les chars spéciaux d'une chaine alors que la tiennes en fait juste quelques uns ?  Je crois comprendre que c'est à cause des slash que urlencode convertirait ? Mais du coup certains caractères que tu ne remplace pas (comme ; à ç ^ @=? " ' , la plupart des car ASCII passe dans le nom d'un fichier unix je crois) vont nuire au bon fonctionnement non ?

Dernière chose: tes variables a, b, c, et compagnie: Ça serait mieu de leurs donner un noms représentatif de leur valeur. Il me semble que c'est une des premières règles à respecter quand on développe sinon on s'y perd...


Bon c'était juste des petits trucs comme ça parce que ton code dans l'ensemble ya rien à redire... Code original même si moi je préfère xfce, ça fait changement des codes récurrent sur ce site.

signaler à un administrateur
Commentaire de coucou747 le 11/04/2008 08:54:51

:) merci.
pour urlencode, ouais, je sais pas pourquoi, mais ca passait mal...
pour $a, $b, $c, c'est un de mes gros defauts en prog...
c'est un simple utilitaire pas forcement tres bien code, je l'ai mis comme ca parce-que meme imparfait, il ne presente pas de grosses erreurs, et conserve son utilite :)

j'utilise en general fvwm ou gnome, mais toujours nautilus (sauf pour le sftp ou j'utilise alors konqueror), ca depend des periodes en fait, faudrait que je prenne le temps de scripter (un peu plus) pour fvwm.

signaler à un administrateur
Commentaire de depression le 11/04/2008 09:00:10

Merci pour cette source :-)

signaler à un administrateur
Commentaire de codefalse le 11/04/2008 10:14:23 administrateur CS

@Coucou : Tu utilse quelle version de php ? car php5, avec la classe DirectoryIterator, te permet de parcourir un dossier très facilement et plus agréablement qu'avec opendir et readdir :)

signaler à un administrateur
Commentaire de coucou747 le 11/04/2008 10:37:41

sisi, je pourrais, j'utilise regulierement la spl, mais plus pour des choses genre countable, arrayacces, itterator, ce genre de choses...
http://www.php.net/~helly/php/ext/spl/

en fait, c'est une partie que je trouve mal concue...
meme pour les itterateurs, le typage de php fait que c'est bordelique, comme on a pas les generiques en php (normal vu le style du langage), bah tu fais un itterator sur n'importe quoi, t'as toujours un n'importe qui comme type de retour, tu ne peux pas faire comme la STL du Cpp genre vector<int>, ou des choses du genre... ca en php, c'est pas possible...

faire un itterator<MonObjetPerso> ca peut sembler useless... mais par contre, quand j'avais teste la directoryitterator, j'avais pas vu un langage oriente objet... j'y avais vu un namespace...
pourquoi ?
parce-que tu ne peux pas dire a ton directoryitterator de creer des objets de ton propre type...
personellement, j'avais besoin d'un truc qui me sorte plus d'infos sur les fichiers que la splFileInfo en donnait pour faire mon projet....
class MonFichier extends SplFileInfo
mais en fait, le probleme, c'est que le directoryitterator, lui il ne fait pas de classes personalises, il se contente d'un simple SplFileInfo...

autant mettre ces classes avec un attribut final, et dire "si tu veux faire semblant de faire de l'objet, utilise moi"

signaler à un administrateur
Commentaire de codefalse le 14/04/2008 17:20:27 administrateur CS

je vois ce que tu veux dire, mais le fait que la spl soit là t'évite les tracas de faire un readdir ($resource) === false etc
tu fait juste un
foreach ($oDirectoryIt as $sKey=>$sValue) { // et hop ! }

de plus tu a les fonctions isDot, bien sympa pour éviter les "." et ".." et quelques autres avatanges. Ca relève peut-etre plus du namespace, mais au final en quoi c'est genant ? la classe sert pour ce à quoi elle doit servir, c'est parfait.

Apres c'est vrai que dans ton cas, pour l'attente que tu en as, c'est peut-etre d'un autre niveau que la spl ne te permet pas, mais la désolé j'ai pas les compétences nécéssaires pour comparer à du c++.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

XML ou MySQL ?? [ par Garno ] Salut,J'aimerais savoir s'il est plus rapide d'utilise le XML ou le MySQL pour conserver la configuration de mon site web. Comme je prévois beaucoup d [PHP 5][DOM XML] Suppression du noeud courant [ par javajavajava ] Bonjour, voici comment se présente mon fichier xml&lt;?xml version="1.0" encoding="utf-8" ?&gt; &lt;menu&gt;&lt;nbelements&gt;5&lt;/nbelements&gt; &lt XML insérer un élément tout au dessus [ par Straw ] Bonjour &#224; tous, je pose cette question dans le cadre de mon m&#233;moire... que je dois rendre dans 12jours Je d&#233;veloppe un site flash-x configuration [ par khaldounaouar ] ma page (configurer le reseau.php contient (@ip,masque,DNS,et,deux boutons valider,Annuler)je veut faire une connexion entre le bouton valider et le f configuration réseau [ par walidospikkos ] salut &#224; tous, j'ai con&#231;u une interface avec php qui m'offre la possibilit&#233; de modifier l'IP, l'@ DNS et le masque de ma machine. mon in Timeout flux XML [ par FhX ] Bon, petit problème avec les flux XML récupéré via simpleXML en PHP5. Comment on défini un timeout sur ce machin ? Parce que j'ai beau essayer avec le pb creation repertoire [ par nacer_1954 ] bonjour; j'ai un proble avec mkdir quand je fais mkdir ("dossiers/affaires/encours/nom_fichier",0700); &#231;a marche normalement mais si je f administration réseau sous linux via PHP [ par khaldounaouar ] Salut tout le monde; bref j'ai conçu une page php "outil.php" dans le but d'administrer mon réseau(configuration des hôtes, serveurs...) qui doit fon configuration réseau via php [ par khaldounaouar ] salut tous le monde j'ai conçu une page .php que j'envisage configurer mon reseau local à travers je travaille avec php4 et apache le corps de ma p générer un fichier XML à partir de mySQL [ par Migs ] Bonjour, je voudrais savoir s'il est possible de créer un fichier XML directement à partir de mySQL par le biais de procédures stockées. Je ne souhait


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,546 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.