[SPIP Zone] [#10491] Smileys dans Tweak-Spip : bug sur |image_reduire - http://zone.spip.org/trac/spip-zone/changeset/10491

Un petit bug (de Spip?) semble être apparu avec ce commit.
Le remplacement de la classe no_image_filtrer par format_png crée un soucis dans le cache des vignettes.

- $smileys2[1][] = $espace."<img alt=\"$alt\" title=\"$alt\" class=\"no_image_filtrer\" src=\"".$path2."/$val\" $size/>";

+ $smileys2[1][] = $espace."<img alt=\"$alt\" title=\"$alt\" class=\"format_png\" src=\"".$path2."/$val\" $size/>";

Tweak-Spip met d'abord en cache les images sous la forme :

<img width="19" height="19" src="/svn/plugins/tweak_spip/img/smileys/sourire.png" class="format_png" title=":-)" alt=":-)"/>

Le chemin de l'image est donc stocké de façon html absolue pour que les parties privées et publiques bénéficient toutes les deux de cette mise en cache (fonction âprement rédigée dans tweak_spip.php : tweak_htmlpath($relative_path))

Les smileys dans les titres : ras, code originel
Les smileys dans les forums : ras, code originel
Les smileys dans les articles : oups...
Voici le résultat :

<img class="format_png" width="19" height="19" style="height: 19px; width: 19px;" src="local/cache-vignettes/L19xH19/en_colere.png" title=":-((" alt=":-(("/>

Mais local/cache-vignettes/L19xH19/en_colere.png n'existe pas !
Vu que les tailles sont renseignées, il ne s'agit pas d'un bug du plugin.

On recherche dans la dist, et on trouve :
[<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{520,0})</div>]

image_reduire est le fautif et ne semble pas bien traiter les chemins absolus.

Tests :
------
$toto='<img class="format_png" src="plugins/tweak_spip/img/smileys/pleure_de_rire.png" />'
include_spip("inc/filtres_images");
echo image_reduire($toto, 520, 0);

on obtient (partie publique !) :

<img class=’format_png’ src="local/cache-vignettes/L19xH19/pleure_de_rire.png" width=’19’ height=’19’ style=’height:19px ;width:19px ;’ />

c'est ok, mais avec :

$toto='<img class="format_png" src="/svn/plugins/tweak_spip/img/smileys/pleure_de_rire.png" />'
include_spip("inc/filtres_images");
echo image_reduire($toto, 520, 0);

on obtient :

<img class=’format_png’ src="local/cache-vignettes/L0xH0/pleure_de_rire.png" width=’’ height=’’ style=’height:px ;width:px ;’ />

Le chemin absolu était bien un chemin html, mais mal interprété.
Que faire ?

Merci d'avance
Pat

Pat a écrit :

Le chemin absolu était bien un chemin html, mais mal interprété.
Que faire ?
  

oui toujours cette histoire de confusion des chemins html et chemins disques dans spip.
Il y en a partout !
En l'occurrence, on attend ici un chemin html relatif que l'on identifie a un chemin disque relatif.
spip ne connait pas le document_root de ton serveur, et il ne peut pas transformer un chemin http absolu en chemin disque absolu
si tu veux passer un chemin abolu html, il faut que ca commence par http://…
il y a une fonction url_absolue pour ca, ou url_de_base ...
Mais ca n'est pas tres performant, car l'image sera considéree comme distante, et spip fera une requette http pour recuperer l'image.
Il serait plus pertinent de renvoyer un chemin relatif construit par un find_in_path ou un _DIR_PLUGIN_TRUC qui fonctionneront cote privé comme coté publique.

les fonctions images pourraient neanmoins traiter ce cas plus pertinemment.
Tu peux faire un ticket pour qu'on oublie pas svp ?
Cedric

Pat a écrit :

Tests :
------
$toto='<img class="format_png" src="plugins/tweak_spip/img/smileys/pleure_de_rire.png" />'
include_spip("inc/filtres_images");
echo image_reduire($toto, 520, 0);

on obtient (partie publique) :

<img class=’format_png’ src="local/cache-vignettes/L19xH19/pleure_de_rire.png" width=’19’ height=’19’ style=’height:19px ;width:19px ;’ />

juste un petit truc... pkoi dans le premier test cette petite image doit-elle obligatoirement se retrouver dans un cache? ça fait du double emploi, non ... ici ya clairement aucune transformation de faite...

c'est peut-être dû à ma config de Spip ?

Pat