Comment localiser ces images en dehors du répertoire Web ?
E. Roumegou

 

Je voulais utiliser et partager un répertoire d'images d'un catalogue produits (image jpeg au format vignette et zoom). Très vite, j'ai constaté que pour afficher ces images, il fallait que ces dernières se trouvent dans le répertoire web du projet WebDev, à savoir monprojet_WEB.
Pa vraiment acceptable comme contraintes. Tout d'abord, ces images me servent sur d'autres applications Clients/Serveur développées en WinDev 7.5 et je veux qu'elles soient utilisées par des sites développés en PHP ou tout autre technologie. De plus, je ne vais pas à chaque nouveaux sites WebDev qui utilise ce catalogue produit multiplier ces images.

Donc, je voulais absolument exploiter Une et une seule version de ces images.

Facile, normalement ? Que nenni !!!
Alors comme je ne suis pas mesquin, je vais vous éviter toutes mes galères.
Je tiens à remercier ici Gilles Balp qui m'a apporté la majeure partie des solutions.

1 - Créer un alias

Tout d'abord, vous devez partager votre répertoire image. Pour cela, vous allez créer un alias, de la mème façon que WebDev en crée un pour votre répertoire Web.
Je travaille avec Apache 2.0; cela revient donc à modifier le fichier httpd.conf qui se trouve généralement dans
C:\Program Files\Apache Group\Apache2\conf et rajouter une ligne de ce type :

Alias /SERVIMAGE/ "C:/VotreRep/Image/"

Si vous tapez depuis un navigateur http://monip/SERVIMAGE/monimage.jpg vous devez visualiser votre image.
(bien sûr monip est votre adresse IP fixe de votre serveur Web ou le nom de votre domaine.)

2 - le mode Fiche

Notre page permet d'afficher la fiche produit avec une image. On utilisera la vignette en mode zoom que l'on retrouvera sous la dénomination LARGE_nn.jpg; nn étant l'Id du produit.

l'image

Pour décrire l'image, ce qu'il est important de préciser :

- choisir statique, car ce sera une image gérée en code navigateur.

- décocher Localiser image dans le répertoire _Web

le code maintenant :

Déclarer une variable Globale à la page. C'est elle qui contiendra l'adresse de votre image

 

Initialisation de FicheGift (serveur)

CHEM_IMG est chaîne
CHEM_IMG=Rtv_Para("IMAGE","CHEM_IMGW")+"LARGE_"
// je récupère le chemin d'accès de mon image dans une table paramètre. Celui-ci est de type
http://mondomaine/SERVIMAGE/IMAGE/LARGE_ ou
//monsvr/SERVIMAGE/IMAGE/LARGE_ ou
//67.122.220.15/SERVIMAGE/IMAGE/LARGE_

URL=CHEM_IMG+GIF_ID+".jpg"

 

WL Chargement (onload) de FicheGift (navigateur)

Image1=URL

3 - Le mode Liste avec une zone répétée

Plus compliqué maintenant car il n'y a pas de codes navigateur avec le chargement d'une ligne d'une ZR.
Il va donc falloir passer par un champs de type HTML.

Champs HTML

dans votre ZR, en lieu et place d'un champs Image, vous allez créer un champs HTML que l'on appelera HTML_IMAGE et rattachez lui un attribut de type valeur. (ZImgHTML)


le code maintenant :

En initialisation de la page, vous pouvez allez rechercher votre chemin d'accès et voici maintenant le code de chargement de la zone répétée.
Rmq : j'utilise une base mySQL et les classes d'accès alternatifs. Vous n'aurez qu'à adapter à d'autre types de lectures (fichiers HF) ou bases de données.

FONCTION Load_ZR(pCde)
MaZoneRep est chaîne="ZRGift"
retCode est un booléen
commande est chaîne
CHEM_IMG est chaîne
commande=pCde
Numcol,pI,nbrech est un entier
lCurReq est un entier
wGIF_ID est un entier
PresentePts est chaîne="<div align=""center""><font color=""#FF0000"">%1<br>%2 </font></div>"
wcode est chaîne="<a href=""javascript:_PAGE_."+ZRGift..Alias+".value = '%3';_PAGE_."+ZRGift..Alias+".value = '%3';_JSL(_PAGE_,'"+zGIF_DESC_FR..Alias+"','_self','','')"">"+...
"<img src=""%1"" alt=""%2"" width=""65"" height=""49"" border=""0""> </a>"

lCurReq=1
CHEM_IMG=Rtv_Para("IMAGE","CHEM_IMGW")+"SMALL_"
//CHEM_IMG="CRM4US/SMALL_"
retCode=fSQL:mySQLExec(commande,lCurReq)
IF retCode THEN
ZoneRépétéeSupprimeTout(MaZoneRep) //Vide la table mémoire
fSQL:mySQLPremier(lCurReq)
TANTQUE PAS fSQL:mySQLEnDehors
ZoneRépétéeAjoute(MaZoneRep)
pI=ZoneRépétéeOccurrence(MaZoneRep)
Numcol=0
Numcol++;GDE_ID[pI]=fSQL:mySQLCol(lCurReq,Numcol)
Numcol++;wGIF_ID=fSQL:mySQLCol(lCurReq,Numcol)
Numcol++;GIF_DESC_FR[pI]=fSQL:mySQLCol(lCurReq,Numcol)
Numcol++;GIF_COMM_FR[pI]=fSQL:mySQLColLong(lCurReq,Numcol)
Numcol++;GDE_REFEXT[pI]=fSQL:mySQLCol(lCurReq,Numcol)
Numcol++;GDE_VALPTS[pI]=ChaîneConstruit(PresentePts,fSQL:mySQLCol(lCurReq,Numcol),gOPE_LIBPTS)
url=CHEM_IMG+wGIF_ID+".jpg"
ZImgHTML[pI]=ChaîneConstruit(wcode,CHEM_IMG+wGIF_ID+".jpg",...
"Voir en détail : "+GIF_DESC_FR[pI]+" Ref :"+GDE_REFEXT[pI],...
pI)

fSQL:mySQLSuivant(lCurReq)

FIN //TANTQUE pas fSQL:mySQLEnDehors

END
fSQL:mySQLFerme(lCurReq)
nbrech=ZoneRépétéeOccurrence(ZRGift)
SELON Vrai
CAS nbrech=0
NBSEL="Il n'y a pas de dotation répondant à votre selection : "+libRech

CAS nbrech=1
NBSEL="Il y a 1 dotation répondant à votre selection : "+libRech

CAS nbrech>1
NBSEL="Il y a "+nbrech+" dotations répondant à votre selection : "+libRech
FIN

RENVOYER Vrai

en rouge, les éléments du code importants pour le cas qui nous interresse.

Dans wcode, on retrouve le code HTML, où l'on subtituera les paramètres %1, %2, %3 avec nos données variables de la ZR.
Comme je voulais gérer un lien sur l'image (pour afficher la fiche), j'ai analysé le code produit par le lien texte javascript:_PAGE_.A12. etc ...et rajouté celui ci en lien sur l'image avec des balises <a href et </a>.

Pour améliorer la chose et la rendre plus souple à vos diverses modifications, vous pouvez à la place des A12, A13 les remplacer par les alias de la Zone Répétée ZRGift..Alias ou les alias des liens.zGIF_DESC_FR..Alias


Voilà le tour est joué et vos images peuvent être maintenant à n'importe quel endroit accessible de vos serveurs, voire sur un autre site distant.