begin process at 2010 03 17 00:13:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > XML DE DESCRIPTION DE DOSSIERS NAUTILUS

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%2520li bre.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

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec une capture IMAGES GENETIQUES
Source avec Zip Source avec une capture RUBIX CUBE
Source avec Zip INTERPRETEUR BRAINFUCK
Source avec Zip PROXY HTTP : SAUVEZ VOS VIDEOS PREFEREES.
Source avec une capture ECRIRE UN TEXTE EN CERCLE SUR UNE IMAGE

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip AJOUT D'UN RENDEZ-VOUS DANS UN CALENDRIER EXCHANGE 2003 par SachaWolf
Source avec Zip Source avec une capture MINI-PROCESSEUR XPROC (PIPELINE XML) par ordiman85
Source avec Zip Source avec une capture XML MAPPING TO CLASS OBJECTS / CHARGEMENT / PARSING / MODIFI... par aKheNathOn
Source avec Zip GESTION DE FICHIERS AVEC LA SPL par alphanono
Source avec Zip [PHP5] GESTIONNAIRE DE CONFIGURATIONS par neigedhiver

Commentaires et avis

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.

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.

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.

Commentaire de depression le 11/04/2008 09:00:10

Merci pour cette source :-)

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 :)

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"

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

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales