Page 1 sur 2

Panel admin => gestion d'images...

Posté : 06 mai 2008, 19:24
par chrislabricole
Bonjour,

Mon problème est simple, mais surement assez dur à résoudre :?

Je vous explique...
C'est des catégories de photos... c'est dans la programmation d'un panel admin de la gestion du contenu des catégories qui me gène...
Les images de chaque catégories sont situées dans un dossier précis, elle sont nommées sous la forme :
01.jpg, 02.jpg, 03.jpg, 04.jpg, 05.jpg ......etc..... etc......
imaginons que l'image 03.jpg, vous la détester...
Si vous supprimez 03.jpg, ça fera :
01.jpg, 02.jpg, 04.jpg, 05jpg .....etc..... etc......
donc, le fait qu'il manque 03.jpg dans les fichiers, ça va faire un bug quand le client voudras voir les images...... car le script liste les images avec glob().... (afin, c'est un peu complexe, je vais pas rentré la dedans ^^ en tout cas, il me faut sûr cette "structure" (01.jpg, 02.jpg etc..) pour que mon script de listing des images fonctionne...)
l'idée serait donc que dans la liste
01.jpg, 02.jpg, 04.jpg, 05.jpg .....etc.... etc......
que 04.jpg, 05.jpg ....etc.... etc......
soit renommées de façon à combler le trou...
pour que ça donne
01.jpg, 02.jpg, 03.jpg, 04.jpg .....etc...

Mais si l'image 03 ne vous plait pas... et qu'il y a 40 images dans la catégorie ben faudras pratiquement toute les renommées :roll: :roll:
Cela n'est pas un peu lourd pour PHP de renommer 38 fichiers ? :roll:

Voilà, j'espère que vous avez tout compris....

Merci de votre aide ! :)

Posté : 06 mai 2008, 19:50
par caroube
La limite "standard" maximale d'exécution d'un script PHP, c'est 30 secondes. Renommer 1 image, ça doit demander au grand maximum 1/100e de seconde. Fais le ratio.

Autre ordre de grandeur : j'ai des scripts qui -à certains moments-, ont en mémoire les noms des 36.000 communes de France. Et ça ne pose aucun problème.

Ton répertoire contiendrait 10.000 fichiers, ça commencerait à être problématique : et encore ce n'est même pas sûr.

Alors, pour 40, 50 ou même 500 fichiers, vas-y !

Posté : 06 mai 2008, 20:20
par chrislabricole
ok, donc maintenant, reste la réalisation de ce renommage... :roll:


Je suppose qu'il va faloir faire :
$image_a_supprimer = "03";
unlink('../images/categorie/sous_categorie/'.$image_a_supprimer.'.jpg');
Je ne sais pas trop commence faire la while pour pas qu'elle "supprime" le fichier 60.jpg par exemple, puisqu'il n'existe pas... donc là je sais pas trop...

Merci à vous :)

Posté : 06 mai 2008, 21:44
par b.jerome
Plutôt que de renommé toutes les images qui suivent l'image que tu as supprimé pourquoi ne pas renommé la derniere image ?

exemple tu as img_01, 02, 04,05....0125

tu renommerais la 0125 en 03... ca éviterait de décalé toutes les images à chaque fois. Enfin c'est une idée.

Posté : 06 mai 2008, 22:08
par chrislabricole
Ouais j'y est pensé mais bon, après ça inverse tout et c'est pas super :?

Sinon je cherche toujours une idée pour faire cette while (ou for) particulière :x


Merci à vous :)

Posté : 06 mai 2008, 22:37
par AB
Bon je répond pas à ta question, mais pas sûr que tu emploies la meilleure méthode.

Si tu veux une galerie photo facilement administrable, c'est mieux d'utiliser une bdd (ou à défaut un fichier texte) pour stocker l'adresse de tes images, leur numéro d'apparition dans la liste, éventuellement des titres etc. Après l'administration est presque un jeu d'enfant et c'est très souple d'utilisation...

Posté : 06 mai 2008, 22:44
par chrislabricole
Ahh oui, j'avais pas pensé à la BdD...


Mais... je pense que ça serais pas mieux avec un fichier non ?
afin je sais pas....

Merci à vous

Posté : 06 mai 2008, 23:04
par b.jerome
Je suis de l'avis de AB en ce qui concerne la méthode. Je ne comprends pas non plus en quoi le fait de renomé la derniere image inverseré tout ? Surtout que tu es pret à déplacer toutes les images qui se trouve après celle que tu veux effacé... c'est contradictoire ... mais bon c'est ton choix :)

Sinon pour apporté un élément de réponse... tu récupéres le nombre de la derniére image.
$i = 3;
$max = 10;

while ($max > $i) {  
$new = $i;
$i++;   
echo (' image '. $i .' nouveau nom image '. $new.' <br />');
}
ca donne ce résultat...

image 4 nouveau nom image 3
image 5 nouveau nom image 4
image 6 nouveau nom image 5
image 7 nouveau nom image 6
image 8 nouveau nom image 7
image 9 nouveau nom image 8
image 10 nouveau nom image 9

Posté : 06 mai 2008, 23:13
par AB
Ahh oui, j'avais pas pensé à la BdD...


Mais... je pense que ça serais pas mieux avec un fichier non ?
afin je sais pas....

Merci à vous
J'peux pas te donner de réponse catégorique entre les deux. Cela dépend de ce que tu veux faire et des possibilités d'évolution.
Une ou deux tables bien construites t'offriront beaucoup de souplesse et facilité d'évolution.

Maintenant si tes besoins sont bien définis, un fichier texte peut être largement suffisant et sera plus rapide à charger. Un peu plus difficile à faire évoluer cependant si tu souhaites par la suite faire des tris sur différents champs etc.

Enfin quelque soit l'outil retenu, la méthode reste la même : enregistrer le chemin de ses images dans un tableau :wink:

Posté : 06 mai 2008, 23:34
par caroube
Si jamais tu veux renuméroter, ne t'embêtes pas à te demander "quelle est l'image qui est supprimée, donc à partir d'où il faut partir, ...".

Tu établis une liste des fichiers ordonnée et ensuite, avec une simple boucle tu renommes tous les fichiers en partant de 1.
Le 01.jpg va être renommé en 01.jpg
Le 02.jpg va être renommé en 02.jpg
Le 04.jpg va être renommé en 03.jpg
Le 05.jpg va être renommé en 04.jpg
...

Quant à une base de données : oui, pourquoi pas ? Mais que vas-tu y stocker d'autre ? Si c'est juste pour indiquer que le fichier /dossier/dossier/01.jpg est présent et que son chemin est /dossier/dossier/01.jpg, cela n'a aucun intérêt.

Posté : 06 mai 2008, 23:48
par AB
Je termine par là où j'aurais dû commencer.

En fait ta méthode initiale est suffisante pour un usage courant, statique. Mais dès lors qu'il s'agit d'administrer ta galerie photo depuis le web, ça va devenir vite galère sans compter que tu te prive de tout un tas de fonctionnalités par rapport à la méthode d'enregistrement des adresses dans un tableau.

Exemple :
- Tu dois supprimer une image du serveur pour qu'elle ne s'affiche plus. Dommage si tu t'es trompé ou que tu change d'avis deux jours plus tard. Il faudra remettre l'image sur le serveur.
Par contre si c'est simplement son adresse dans un tableau qui est effacée, il te suffira de remettre son adresse et pas besoin de reloader l'image sur le serveur.

- Rien ne t'empêche cependant de faire du ménage en temps voulu. Tu peux faire un script qui supprime tes images du serveur une par une (ou toutes d'un coup) en vérifiant au préalable qu'elle ne sont pas utilisées dans ton tableau d'adresse pour l'affichage en cour.

- Suivant ton humeur ou éventuellement suivant des choix utilisateur, tu peux faire des galeries différentes, etc.

Posté : 07 mai 2008, 00:43
par chrislabricole
Oui, t'as bien raison AB après réflexion... :)

J'ai fais un truc simple, j'ai fais une table par "grande" catégorie :
images_pro (professionnels)
images_par (particuliers)

ces 2 table son composé de 3 champs :
valide INT(1) => sois 1 ou 0, si c'est 1 elle s'affiche, si c'est 0, non...
categorie VARCHAR => le nom de la (sous-)catégorie
nom VARCHAR => le nom de la photo...

après, j'arrive à recomposé le chemin de la photo facilement...
./photos/[pro]ou[par]/[le nom de la (sous-)catégorie]/[nom de la photo].jpg

et voila... :D

la requete qui liste les photo est donc :
SELECT * FROM images_'.$categorie.' WHERE cat="'.$nom_dossier.'" AND valide=1 ORDER BY nom ASC
$categorie contient "pro" ou "par"
$nom_dossier contient le nom de la sous catégorie...
et prend juste les valide qui sont égal à 1...
comme ça dans le panel, l'admin peut "désactiver" une image, su qui aura pour action de mettre 0 ....

Autre chose avant que je mette résolu ? xD

Posté : 07 mai 2008, 04:15
par AB
Ah bien c'est pas mal avancé !

Je fais un peu pareil à quelques variantes près :

1/ Ma liste ne comprend que les photos à afficher. Les autres je peux les rajouter (niveau admin) à l'aide du listing du répertoire et il suffit de cliquer sur le nom d'une image (que l'on peut prévisualiser) pour l'ajouter au bon endroit dans ma liste avec son numéro d'ordre.

2/ Dans ma table j'ai un champ "ordre" - que je réactualise automatiquement à chaque modification - qui défini l'ordre d'apparition des photos. Ainsi cela me permet de pouvoir afficher les photos dans l'ordre que je souhaite indépendamment de leur nom. Ma requête se fait donc avec un ORDER BY ordre ASC

Voilà pour le gros du principe.

Tu es sur la bonne voie :wink:

Note que ma solution notamment le 1/ demande pas mal de boulot supplémentaire en php + js. A étudier peut-être quand tu auras du temps, mais pas indispensable, ta solution est déjà fonctionnelle.

Posté : 07 mai 2008, 11:54
par chrislabricole
:D

Ok, bon, maintenant, reste le problème de l'upload de l'image... :?
Lors de l'upload, il faudra enregistrer l'image dans un dossier précis et l'enregistrer une 2ème fois dans un autre dossier, sous le même nom, mais, qui à pour largeur 100 px , pour la hauteur, on s'en fou... le tout c'est que ça sois proportionnel évidament...
Et, je ne suis jamais arrivé à faire un recardrage proportionnel :roll:
De plus, je me rappel plus si il y a vraiment besoin de la library GD... :?

Mierci à vous, je vais chercher aussi de mon côté :)

Posté : 07 mai 2008, 12:40
par AB
Ok tu peux donc mettre résolu pour ton pb initial.

Concernant le redimensionnement et l'upload de l'image il y a ce topic :
http://www.phpfrance.com/forums/voir_su ... -asc-0.php

Tu peux t'en inspirer largement, ça répond presque entièrement à ta question. Si tu as des questions complémentaires ensuite, poses les plutôt à la suite du topic mentionné ou ouvres en un autre puisqu'on à l'habitude de ne traiter qu'une question par topic pour faciliter la recherche des visiteurs :)