|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
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) :
LOCAL nTypeAffiche est un entier sFichier est une chaîne
nTypeAffiche = PageParamètre("type") sFichier = PageParamètre("fichier")
sBuffer est une chaîne
SELON nTypeAffiche
CAS CN_IMG_PERSO sBuffer=sgBuffer ChaîneAffiche(sBuffer)
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
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
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
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 ! |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|