Page 1 sur 1

Comment associer des images à des attachements en web

MessagePublié: 21 Jan 2010 à 16:04
par jcvaillant
J'ai plusieurs attachements par document et je veux associer une image correspondant au type de l'attachement sur une page web pour permettre à l'utilisateur d'afficher le fichier.
Par exemple : dans un document, un attachement correspondant à un document word et un attachement correspondant à un document acrobat. Je veux afficher l'icone word avec un lien vers le document word et pareil pour le document acrobat.
J'avais pensé à la formule suivante, mais ça ne marche pas...
Le test sur @attachmentNames ne fonctionne pas !
L'icone qui s'affiche est toujours l'icône word alors que le nom du fichier lui s'affiche correctement
Avez -vous une idée ?

Code : Tout sélectionner
@Implode(@If(@UpperCase(@Right(@AttachmentNames;3))="DOC";"<a href=\"../vuetous/"+@Text(@DocumentUniqueID)+"/$file/"+@AttachmentNames+"?OpenElement\" alt=\"Lire la revue de presse\"><img src=\"../IconeWord.gif\"> "+@Right(@AttachmentNames;3)+"</a> ";"<a href=\"../vuetous/"+@Text(@DocumentUniqueID)+"/$file/"+@AttachmentNames+"?OpenElement\" alt=\"Lire la revue de presse\"><img src=\"../IconeAcrobat.gif\"> "+@Right(@AttachmentNames;3)+"</a> "))

MessagePublié: 22 Jan 2010 à 10:35
par stloje
quelle est la version de Notes que tu utilises?

MessagePublié: 22 Jan 2010 à 11:03
par Michael DELIQUE
salut

la croix veux dire que notes ne trouve pas l'image. ou se trouve tel ? l'utilisateur a t'il bien le droit de la voir ?

MessagePublié: 22 Jan 2010 à 23:56
par roubech
vérifier le code html généré et le chemin de l'image
ensuite je suis pas sur que ta formule passe si tu as plusieurs fichiers je doute que le @if s'applique individuellement sur les plusieurs valeurs retournée par @AttachmentNames
je serai tenté de travailler avec des replace sur les listes
à la louche, qch du genre :

[syntax="Formula"]tLstFileName := @AttachmentNames;
tLstExt := @UpperCase(@Right(tLstFileName;3));
tLstIcone := @Replace( tLstExt; "DOC":"PDF"; "../IconeWord.gif":"../IconeAcrobat.gif" );
tLstLink := "<a href=\"../vuetous/" + @Text(@DocumentUniqueID) + "/$file/" + tLstFileName + "?OpenElement\" alt=\"Lire la revue de presse\"><img src=\"" + tLstIcone + "\"></a>";
@Implode( tLstLink; " " );[/syntax]

Et pour simplifier, si tu t'arranges pour renommer des icones directement avec l'extension du fichier, tu remplaces le replace par :
[syntax="Formula"]tLstIcone := "../Icone" + tLstExt + ".gif"[/syntax]

ou, si tu as une icone générique au cas où d'autres types de fichiers serait attachés :
[syntax="Formula"]tLstExt2 := @Right( @Replace( tLstExt; "DOC":"PDF"; "DOC|DOC":"PDF|PDF" ); "|" );
tLstIcone := "../Icone" + tLstExt2 + ".gif"[/syntax]

MessagePublié: 24 Jan 2010 à 20:51
par stloje
roubech a écrit:je suis pas sur que ta formule passe si tu as plusieurs fichiers je doute que le @if s'applique individuellement sur les plusieurs valeurs retournée par @AttachmentNames


C'est une des raisons pourquoi je demandais la version utilisée, parce qu'à partir de la V6, on peut faire des boucles en formule.

MessagePublié: 26 Jan 2010 à 11:34
par jcvaillant
roubech a écrit:vérifier le code html généré et le chemin de l'image
ensuite je suis pas sur que ta formule passe si tu as plusieurs fichiers je doute que le @if s'applique individuellement sur les plusieurs valeurs retournée par @AttachmentNames
je serai tenté de travailler avec des replace sur les listes
à la louche, qch du genre :

[syntax="Formula"]tLstFileName := @AttachmentNames;
tLstExt := @UpperCase(@Right(tLstFileName;3));
tLstIcone := @Replace( tLstExt; "DOC":"PDF"; "../IconeWord.gif":"../IconeAcrobat.gif" );
tLstLink := "<a><img></a>";
@Implode( tLstLink; " " );[/syntax]

Et pour simplifier, si tu t'arranges pour renommer des icones directement avec l'extension du fichier, tu remplaces le replace par :
[syntax="Formula"]tLstIcone := "../Icone" + tLstExt + ".gif"[/syntax]

ou, si tu as une icone générique au cas où d'autres types de fichiers serait attachés :
[syntax="Formula"]tLstExt2 := @Right( @Replace( tLstExt; "DOC":"PDF"; "DOC|DOC":"PDF|PDF" ); "|" );
tLstIcone := "../Icone" + tLstExt2 + ".gif"[/syntax]


Chapeau bas, je n'aurais pas trouvé car j'ai du mal avec les listes...
La première formule fonctionne très bien, merci (je n'ai pas essayé la seconde, car j'ai du mal à saisir...).
Par contre, maintenant, comment afficher par exemple que les icones qui correspondent à des fichiers pdf (en sachant attachmentnames contient aussi des fichiers doc et qu'il n'y a pas raison pour que le doc ou le pdf soit dans une position précise).
Je pensais utiliser @member et @subset sur @attachmentnames pour partir sur une liste épurée des liens vers les .doc ; mais là encore, j'ai du mal...
Si vous avez une idée...

MessagePublié: 26 Jan 2010 à 14:17
par roubech
si tu ne veut générer que les liens vers les PDF, tu peux t'inspirer de la dernière formule.
Si tu as du mal à comprendre la formule, prenons un exemple.
Admettons que ton doc contient plusieurs fichiers dont la liste est retournée par
[syntax="Formula"]tLstFileName := @AttachmentNames;[/syntax]
De cette liste, tu veux ne garder que les chaines de texte qui se terminent par ".PDF". Un @Left sur la liste va te donner une liste de même taille avec le nom des fichiers PDF et des chaines vide pour les autres. Ensuite, un @Trim va épurer ces éléments vide. Le petit truc en plus, pour essayer d'éviter de prendre des fichiers dont le nom contient.pdf au milieu, c'est d'ajouter un caractère peu probable en fin de chaine "@" par exemple
Reste ensuite à ajouter l'extension des fichiers qu'on a perdu avec le @Left
[syntax="Formula"]tLstPDF := @Trim( @Left( tLstFileName+"§§"; ".PDF§§" ) ) + ".PDF"; [/syntax]

Le seul pb, c'est que là, on ne peut pas faire un @Uppercase sur tLstFileName sinon on risque modifier des noms de fichiers qui comporteraient des accents ??

Donc, avant de faire le @Left, tu peux faire un @ReplaceSubstring
si tu as des tordus qui mettent des majuscule n'ilmporte où dans l'extension, faut voir pour les variantes .pDf .pdF .Pdf .PDf .PdF ....
[syntax="Formula"]tLstFileName2 := @ReplaceSubstring( tLstFileName+"§§"; ".pdf§§"; ".PDF§§" );[/syntax]

MessagePublié: 26 Jan 2010 à 14:45
par jcvaillant
roubech a écrit:si tu ne veut générer que les liens vers les PDF, tu peux t'inspirer de la dernière formule.
Si tu as du mal à comprendre la formule, prenons un exemple.
Admettons que ton doc contient plusieurs fichiers dont la liste est retournée par
[syntax="Formula"]tLstFileName := @AttachmentNames;[/syntax]
De cette liste, tu veux ne garder que les chaines de texte qui se terminent par ".PDF". Un @Left sur la liste va te donner une liste de même taille avec le nom des fichiers PDF et des chaines vide pour les autres. Ensuite, un @Trim va épurer ces éléments vide. Le petit truc en plus, pour essayer d'éviter de prendre des fichiers dont le nom contient.pdf au milieu, c'est d'ajouter un caractère peu probable en fin de chaine "@" par exemple
Reste ensuite à ajouter l'extension des fichiers qu'on a perdu avec le @Left
[syntax="Formula"]tLstPDF := @Trim( @Left( tLstFileName+"§§"; ".PDF§§" ) ) + ".PDF"; [/syntax]

Le seul pb, c'est que là, on ne peut pas faire un @Uppercase sur tLstFileName sinon on risque modifier des noms de fichiers qui comporteraient des accents ??

Donc, avant de faire le @Left, tu peux faire un @ReplaceSubstring
si tu as des tordus qui mettent des majuscule n'ilmporte où dans l'extension, faut voir pour les variantes .pDf .pdF .Pdf .PDf .PdF ....
[syntax="Formula"]tLstFileName2 := @ReplaceSubstring( tLstFileName+"§§"; ".pdf§§"; ".PDF§§" );[/syntax]


Merci pour toutes ces explications.
En fait, j'ai opté pour la formule suivante qui a l'air de fonctionner
[syntax="Formula"]
fichier:=@AttachmentNames;
chaine:="";
@For(n := 1; n <= @Elements(fichier); n := n + 1;@If(@UpperCase(@Right(fichier[n];3))="PDF";
chaine:=chaine+"<a href="../vuetous/" + @Text(@DocumentUniqueID) + "/$file/"+fichier[n]+ "?OpenElement" alt="Lire la revue de presse"><img src="../IconeAcrobatReader.gif"></a> ";
""));

@If(@Contains(@UpperCase(fichier);"PDF")=1;"<div class="EncadreCouleur" style="text-align:center">"+chaine+"</div>";"")
[/syntax]