Skip to main content Help Control Panel

 

Communauté «   Blogs «   L'espace perso de Jmarc «   La gestion des images dans Yacs «  

Le stockage des images

Grace au code yacs [image=<id>], il est facile et pratique de réutiliser une image d'une page dans une autre page.

Cependant, la gestion actuelle du stockage des images connait plusieurs limitations :

  • Lorsque l'on supprime un article avec des images, ces images disparaissent des autres articles qui y feraient appel sans que l'on puisse le savoir ni le corriger
  • impossible de définir des options différente pour une même image utilisée dans plusieurs pages (par exemple : affichage en taille réelle sur une page et en vignette réduite dans une autre)
  • pas évident de retrouver la page d'origine de l'image pour pouvoir la modifier. Et impossible de savoir quelles pages vont être impactées par cette modification.
  • lorsqu'une image est ajoutée à une page, elle vient écraser l'éventuelle image qui porterait le même nom, sans qu'on en soit averti.

Voici quelques propositions pour pallier à ces limitations. Sans être une révolution, il s'agit d'une évolution "en profondeur" de la façon dont Yacs gère le stockage des images.

Stockage physique des images

Il faudrait que les images soient enregistrées dans des dossiers sans rapport avec leur page d'origine.

Plutôt qu'avoir un dossier unique avec des dizaines de milliers d'images dedans (ce qui rend fastidieux, voir impossible, son parcours via des outils comme filezilla), on peut adopter un regroupement des images par millier dans des sous-dossier :

  • dossier 0 : images dont l'id va de 1 à 999
  • dossier 1 : images dont l'id va de 1000 à 1999
  • dossier 2 : images dont l'id va de 2000 à 2999
  • etc.

En php, le calcul du chemin d'une image (dont le n° id est stocké dans $id_image) est alors obtenu par : $dossier_image = intval($id_image / 1000);

Pour chaque image dont la taille dépasse celle définie pour les vignette, une réduction à la taille "vignette" est sauvegardée dans le sous-dossier thumbs du dossier où est stockée l'image à sa taille normale.

Nommage des images

Actuellement, le nom de l'image d'origine est conservé, moyennant le remplacement de certains caractères indésirables (comme l'underscore ou l'espace) par un tiret.

En cas de chargement d'une image dont le nom "retouché" correspond à une image déjà présente dans cette page alors l'image n'est pas ajoutée comme une nouvelle image. Elle vient remplacer l'image existante.

Ce fonctionnement est problématique dans le cadre d'une galerie de nombreuses images sur un sujet (par exemple : Elvis). Il n'est pas improbable que des contributeurs y ajoutent des images "elvis.jpg" qui viennent s'écraser involontairement entre elles...

Pour éviter cela, il faudrait préfixer chaque nouvelle image avec son n° id (par exemple : 12345-elvis.jpg).

Il n'est pas rare que le nom d'un fichier image soit peu parlant (par exemple : IMG01234.JPG). En terme de référencement par les moteurs de recherche, il serait alors préférable que l'image soit renommée avec le titre de la page où elle est ajoutée plutôt qu'avec son nom d'origine.

On peut également imaginer de concaténer le titre de la page avec le nom d'origine du fichier : 12345-titre-de la-page-nom-du-fichier.jpg (on peut fixer une limite maximale au-delà de laquelle le nom est tronqué).

Stockage des infos dans la table images

Lorsqu'une page est éditée puis enregistrée, il faudrait que le programme regarde s'il n'y a pas de nouvelles images qui ont été ajoutées avec un code Yacs [image=...] :

  • on recherche la présence de codes Yacs [image=...]
  • on regarde dans la table images s'il y a un enregistrement concernant cet id d'image et l'id de la page. Si ce n'est pas le cas, c'est une image nouvellement insérée dans la page.
  • Un enregistrement est ajouté à la table images pour les images nouvellement insérées. Les options (titre, description, source, choix d'affichage en vignette) sont recopiées à partir du premier enregistrement de la table image concernant cette image.

Affichage des images

Les options de l'image étant définies et mémorisées séparément pour chaque page où l'image est insérée, les images peuvent s'afficher différemment selon les pages.

Lorsqu'une image est affichée en taille réduite dans une page, la taille de l'image réduite peut être définie indépendamment de la taille définie "en standard" pour les vignettes. L'image réduite est générée et stockée dans le dossier /images/article/<id>/ et garde le nom de l'image d'origine.

Suppression d'une page avec des images

S'il n'existe pas d'autres enregistrements avec le même id image dans la table image, alors l'image peut être effacé du serveur.

Dans tous les cas, l'image réduite (stockée dans le dossier /images/article/<id>/) qui a été éventuellement générée pour la page supprimée est également supprimée (une image réduite est générée pour chaque page afin de permettre des tailles différentes selon les pages).

Suppression d'une image d'une page

S'il n'existe pas d'autres enregistrements avec le même id image dans la table image, alors l'image peut être effacé du serveur.

Dans tous les cas, l'image réduite (stockée dans le dossier /images/article/<id>/ ) qui a été éventuellement générée pour l'image supprimée est également supprimée.

Modification d'une image

Concernant les options, on a vu que chaque page pouvait définir les siennes et donc les modifier sans impacter les autres pages utilisatrices de l'image.

Par contre, quand il s'agit de modifier le fichier de l'image, toutes les autres pages sont impactées (une liste des autres pages utilisant cette image peut être facilement affichée).

Une case à cochée permet à l'utilisateur de décider si :

  • la modification est à répercuter sur toutes les pages utilisant cette image. Dans ce cas, le fichier de l'image est écrasé par le nouveau. Son nom et sa taille sont mis à jour dans la table image et les images réduites dans les pages ainsi que la vignette sont regénérées.
  • La modification ne concerne que cette page . Dans ce cas, c'est une nouvelle image qui est chargé et enregistrée et les options de l'image antérieure sont recopiées pour l'image de remplacement. Une nouvelle image réduite est générée et l'ancienne est supprimée (dans le dossier /images/article/<id>/).

Comments


Jmarcfrom Cannes
821 posts

on Jan. 29 2010


Alexis :

"

Jmarc tu dois pouvoir dans les options de tes pages permettre les commentaires aux membres.

En tout cas il y a des erreurs importantes dans ta description, comme :

"Les images sont enregistrées dans des dossiers sans rapport avec leur page d'origine."

et d'autres commentaires à faire (l'id doit être unique dans la table, donc dans ton système tu ne peux pas recopier un code yacs car il faudra un nouvel enregistrement donc un nouvel id)

... "

Quand j'écrivais "Les images sont enregistrées dans des dossiers sans rapport avec leur page d'origine", c'est ce que je voudrais obtenir, pas la situation actuelle dans yacs.

Avec mon système, l'id de la table image ne serait plus une clé primaire (unique). C'est la combinaison "id image" et "id page" (anchor) qui servirait de clé primaire. Cela change pas mal de choses, c'est pourquoi je parle d'évolution "en profondeur".

Une autre solution consisterait à laisser la table image telle quelle avec son id unique et ajouter (et gérer) un table supplémentaire qui fait le lien avec les pages où est utilisée l'image.

Enfin, une troisième approche consisterait à dupliquer systématiquement les images et leur enregistrement dans la table image à chaque fois que l'on détecte l'insertion d'une image en dehors de sa page d'origine. C'est plus simple à implémenter mais consomme plus d'espace disque pour le stockages des images dupliquées en x exemplaires (mais pourquoi pas). Et l'on ne peut plus modifier le fichier d'une image en une seule opération, pour toutes les pages qui l'utilise (mais est-ce indispensable ?).


Alexis Raimbaultfrom Mulhouse
Associate, 1900 posts

on Jan. 29 2010


Pour les droits, ça fonctionne ! super.

Ok pour le stockage des fichiers images. Je croyais que tu citais un défaut du fonctionnement actuel (le fait que tout serait en vrac dans un même répertoire).

Pour le reste, je comprends les évolutions que tu souhaites.

un truc con : comment j'utilise plusieurs fois la même image dans la page ? (avec ta solution)

Au fait, est-ce que tu connais l'url "/images" des installations yacs ? (associates only)




Alexis Raimbault webmaster free-lance

Alexis Raimbaultfrom Mulhouse
Associate, 1900 posts

on Jan. 29 2010


tu peux aussi ajouter with_comments sur tes deux autres sections ?

(en fait c'est pas une question de droits, c'est que de base il n'y a pas de commentaires sur des sections)




Alexis Raimbault webmaster free-lance

Jmarcfrom Cannes
821 posts

inspired from Alexis Raimbault on Jan. 29 2010


Alexis :

" tu peux aussi ajouter with_comments sur tes deux autres sections ? "

c'est fait.

" (en fait c'est pas une question de droits, c'est que de base il n'y a pas de commentaires sur des sections) "

Avec mon habitude d'utiliser des sections à la place des articles... (au cas où j'aurais d'autres pages à ajouter en dessous...)


Alain Lesagefrom Montréal ou Chambly, Québec
1365 posts

on Feb. 5 2010


Moi aussi, Jmarc, j'utilise régulièrement des sections plutôt que des articles sur mes sites, pour la même raison que toi.

J'ai déjà suggéré de faire disparaître complètement cette distinction entre article et section, pour ne conserver que la notion de page. J'essaie de retrouver l'article où je dévelloppais mon argumentation, mais je n'y parviens pas. Si j'étais paranoïaque, je dirais qu'il a été supprimé paranoid

Je te le souligne, parce que tu voudras peut-être reprendre le flambeau et que, articulé comme tu l'es, tu auras peut-être plus de succès que moi.

Il y a des choses que les articles peuvent faire, qui ne sont pas permises aux sections, et vice-versa. À mon avis, ce devraient tous être des pages, un "article" n'étant en définitive qu'une "section" en cul-de-sac.

Je te passe le témoin !

-----
On a si peu d'idée de ce qui est possible...

Jmarcfrom Cannes
821 posts

inspired from Alexis Raimbault on Feb. 6 2010


Alexis :

" un truc con : comment j'utilise plusieurs fois la même image dans la page ? (avec ta solution) "

De la même manière qu'aujourd'hui, sachant que pour cette page, la même image aura les même options.

Si l'on veut utiliser la même image sur la même page mais avec des options différente, on est alors contraint de dupliquer l'image avec un autre nom.

" Au fait, est-ce que tu connais l'url "/images" des installations yacs ? (associates only) "

Je ne connaissais pas. C'est intéressant... pour un petit site. Avec plus de 20000 images sur le mien, je n'ose pas imaginer utiliser cette page pour rechercher une image...


J.Juraverfrom Entre chaise et clavier...
3710 posts

inspired from Jmarc on Feb. 6 2010


"

C'est intéressant... pour un petit site. Avec plus de 20000 images sur le mien, je n'ose pas imaginer utiliser cette page pour rechercher une image...

"

Tu seras donc d'accord avec Gestion centralisée des images côté utilisateur si tu votes pour

Ca va avec la taggage des images, etc.




Je ne m'attarde pas, j'ai mon yacs en double file...

Yacs on my blog | Suivez le blog Yacs | Yacs Showroom | Plugin Firefox de recherche dans Yetanoz |