PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2024 → Page AWP et image en mémo : la solution !
Page AWP et image en mémo : la solution !
Débuté par Leplaideur Damien, 01 juin 2010 12:43 - 2 réponses
Posté le 01 juin 2010 - 12:43
Suite au passage de notre site de dynamique à dynamique AWP,
nous avons eu quelques problèmes pour la gestion des images
liées à une rubrique mémo.

Et bien j'ai fini par trouver, en allant faire un tour sur
l'exemple Catalogue_Inernet de WebDev (dans le guide tapez AWP).

L'astuce :
passer par une page awp intermédiaire qui va aller chercher la
valeur mémo (binaire) de l'image, et l afficher dans le navigateur.
Il suffit ensuite d'affecter cette page au champ image.

Réalisation :
Pour notre exemple, déclarez les variables suivantes dans le
code de déclaration des procedures globales du site (serveur) :
ConfigureContexteAWP(ctxDisque,ctxIDCookieURL)

GLOBAL
sgBuffer est un Buffer

CONSTANT
CN_IMG_PERSO= 1
CN_IMG_PDT = 2
CN_IMG_PLAN= 4
CN_IMG_LISTEPDT=8
FIN

DéclareContexteAWP(sgBuffer)


Le contexte est ici sur disque dur, et les variables serviront dans la page
de chargement de l'image.
A savoir : les constantes permettent de typer les images à aller chercher
(l'image grand format d'un produit, sa vignette, sa pettite vignette...),
et le buffer permettra de passer directement une image par prog.


Créez ensuite une page que vous nommerez flash.awp .
Elle ne contient aucun champ.
Voici un exemple de code (à adapter selon vos besoins) :
//Page qui permet d'envoyer au navigateur la valeur d'une image (c est pour afficher les images enregistrées en mémo dans la BDD)

LOCAL
nTypeAffiche est un entier
sFichier est une chaîne


// La page flash.awp est appelée avec ses paramètres en ligne de commande
nTypeAffiche = PageParamètre("type")// Type à afficher
sFichier = PageParamètre("fichier")// Fichier à afficher


sBuffer est une chaîne


// Selon le type à afficher
SELON nTypeAffiche
// Image personnelle
CAS CN_IMG_PERSO
sBuffer=sgBuffer
ChaîneAffiche(sBuffer)


// Image d'un produit
CAS CN_IMG_PDT
IF NOT SQLExec("SELECT IMG_VP FROM WEB_Produit WHERE RefProduit="+sFichier,"REQFLASH") THEN RETOUR
IF SQLAvance("REQFLASH")=0 THEN
sBuffer=SQLLitMémo("REQFLASH",1)
SQLFerme("REQFLASH")
ChaîneAffiche(sBuffer)
ELSE
SQLFerme("REQFLASH")
ChaîneAffiche("")
END


//Image d'un plan
CAS CN_IMG_PLAN
IF NOT SQLExec("SELECT IMG_V FROM WEB_Produit_IMG WHERE Ref="+sFichier,"REQFLASH") THEN RETOUR
IF SQLAvance("REQFLASH")=0 THEN
sBuffer=SQLLitMémo("REQFLASH",1)
SQLFerme("REQFLASH")
ChaîneAffiche(sBuffer)
ELSE
SQLFerme("REQFLASH")
ChaîneAffiche("")
END

//Image liste d'un produit
CAS CN_IMG_LISTEPDT
IF NOT SQLExec("SELECT IMG_VL FROM WEB_Produit WHERE RefProduit="+sFichier,"REQFLASH") THEN RETOUR
IF SQLAvance("REQFLASH")=0 THEN
sBuffer=SQLLitMémo("REQFLASH",1)
SQLFerme("REQFLASH")
ChaîneAffiche(sBuffer)
ELSE
SQLFerme("REQFLASH")
ChaîneAffiche("")
END

AUTRES CAS
// ne rien faire
FIN


Vous remarquez que j'accède à la BDD via les requetes SQLXXX,
ca marcherait avec du Hxx aussi !
L'astuce est ici dans le chaineaffiche, qui envoye la page dans
le navigateur (donc point de probleme de cession).

Ensuite, lorsque vous voulez charger une image dans une page,
il suffit de "lier" le champ image a notre page flash.
ATTENTION : le champ image ne doit pas être en mode généré (donc
préféré le mode dynamique).

Pour afficher une vignette produit, le code sera alors :
MonChampImage="flash.awp?type=" + CN_IMG_LISTEPDT + "&fichier="+iLocRef

avec iLocRef la référence du produit.

Pour afficher directement une image que l'on a déjà en memoire,
il suffit de remplir sgBuffer et ensuite :
MonChampImage="flash.awp?type=" + CN_IMG_PERSO


Dans l'exemple de WB, il y avait aussi la possibilité d'aller chercher
un fichier sur le serveur, et bien d'autres choses encore
(redimensionnement de l'image, couleur de fond ...)

Voila, c'est pati merveilleux ???
Enjoy,
Dam's
Posté le 01 juin 2010 - 13:20
J'ai eu le même type de soucis et j'ai envoyé une requête au ST.

J'ai eu la réponse ce matin.
La voici :
*************************************************************************
Le mode AWP est particulier car il n'a pas de contexte.
L'autre particularité est que pour afficher l'image, la page est appelée une deuxième fois, mais alors que la valeur du paramètre a été perdue. C'est pourquoi l'image est vide.
Cette partie théorique étant posée, voici le code à mettre dans votre page pour obtenir le bon fonctionnement.
gsREF est une chaîne = ""

DéclareContexteAWP(gsREF)

SI PageParamètre("REF") <> "" ALORS
gsREF = PageParamètre("REF")
FIN

SI HLitRecherchePremier(ARTICLE,ARREFD,gsREF,hIdentique) ALORS
FichierVersPage()
FIN
*************************************************************************

Je n'ai pas testé car du coup je ne gère plus les images
avec des mémos mais je pense que cela devrait régler le
problème.
Posté le 01 juin 2010 - 15:05
Effectivement j'avais bien reussi à afficher les images dans une ZR
en ayant fait un declarecontexte sur toutes les variables de la page.

Mais l'affichage etait super long, et sur d'autres pages ca ne marchait
pas (il devait manquer un declare contexte pour une des variables).

Le fonctionnement avec une page "flash.awp" a le mérite d'être
très rapide en execution !