Dans cette fiche... |
4 améliorations intéressantes du listing précédent :
<%@ LANGUAGE="VBSCRIPT" %> <HTML> <HEAD> <TITLE>Exemple</TITLE> </HEAD> <BODY> <% dim objConnect dim objRecordset, objRecordset2 set objConnect = Server.CreateObject("ADODB.Connection") objConnect.Open "WebDB"set objRecordset = Server.CreateObject("ADODB.Recordset") strSQL = "SELECT * FROM [rqt Sites+Catégorie] ORDER BY DateEnreg DESC;" objRecordset.Open strSQL, objConnect, 3 %> <P><FONT FACE="Verdana" COLOR="#004080"><BIG><BIG><STRONG> Liste des sites </STRONG></BIG></BIG></FONT></P> <FONT FACE="Verdana" SIZE="3"> <%=objRecordset.RecordCount %> sites... </FONT> <P> <FONT FACE="Verdana" SIZE="2"> <% intSite = 1 Do While not objRecordset.eof %> <!-- Un site --> <DIV ALIGN="center"><CENTER> <TABLE border="0" width="80%" cellspacing="1" cellpadding="2"> <tr> <td width="50%" colspan="2" bgcolor="#004080"><img src="icoTriangleRouge.gif" width="10" height="10"> <font color="#FFFFFF"><strong> <%=intSite & " - " & objRecordset("NomSite")%> </strong></font></td> <td width="50%" colspan="2" bgcolor="#ECECF4"><p align="right"> <% if objRecordset("WebMaster") <> "" then Response.Write("WebMaster : " & objRecordset("WebMaster")) end if %> </td> </tr> <tr> <td width="100%" colspan="4" bgcolor="#ECECF4"> <% ' Supprimer les dièses et les portions d'URL inutiles strURL = objRecordset("URL") i = InStr(strURL, "#") if i > 0 then strURL = mid(strURL, i) strURL = Replace(strURL, "#", "") ' Créer un lien hypertexte en HTML Response.Write("<A HREF=" & chr(34) & strURL & chr(34) & ">" & strURL & "</A>") %> </td> </tr> <tr> <td width="25%" bgcolor="#ECECF4" align="center"><%=objRecordset("Catégorie")%></td> <td width="25%" bgcolor="#ECECF4" align="center"><%=objRecordset("Langue")%></td> <td width="25%" bgcolor="#ECECF4" align="center"><%=objRecordset("DateEnreg")%></td> <td width="25%" bgcolor="#ECECF4" align="center"> <% n = objRecordset("Note") for i = 1 to n Response.Write( "<IMG SRC=" & chr(34) & "icoBouleOrange.gif" & chr(34)&">" ) next %> </td> </tr> <tr> <td width="100%" colspan="4" bgcolor="#D5EAFF"><font color="#000000"> <% if Isnull(objRecordset("Description")) then Response.Write(" ") else Response.Write(objRecordset("Description")) end if %> </font></td> </tr> </TABLE> </CENTER></DIV> <% objRecordset.MoveNext intSite = intSite + 1 loop set objRecordset=nothing set objRecordset2=nothing set objConnect=nothing %> </FONT> </P> </BODY> </HTML>
Seules les nouveautés sont commentées, et pour faciliter la compréhension, les parties de code VBScript ont été regroupées de façon logique.
objRecordset.Open strSQL, objConnect, 3 ... <%=objRecordset.RecordCount%> sites... |
Ce sont ces lignes qui gèrent l'affichage du nombre de
sites. Une première différence à l'ouverture de la requête : la valeur 3 (jamais utilisée auparavant) permet d'indiquer qu'il s'agit d'une requête statique (ou curseur statique). Sans entrer dans les détails ici, sachez que :
Une fois la requête ouverte en mode 3, on peut utiliser sa propriété RecordCount qui donne le nombre d'enregistrements (ici, le nombre de sites). Essayez de supprimer la valeur 3 et relancez la page Asp, pour voir... |
<% intSite = 1 Do While not objRecordset.eof %> ... <%=intSite & " - " & objRecordset("NomSite")%> ... <% objRecordset.MoveNext intSite = intSite + 1 loop %> |
Pour numéroter chaque site, on utilise une variable intSite,
qui est initialisée à 1 avant la boucle. Ensuite, à chaque fois qu'on affiche un nom de site, il suffit d'afficher également la valeur actuelle de intSite. En fin de boucle, lorsqu'on passe au site suivant par MoveNext, il ne faut pas oublier d'augmenter aussi la valeur de intSite. Et hop ! |
<% n = objRecordset("Note") for i = 1 to n Response.Write( "<IMG SRC=" & chr(34) & "icoBouleOrange.gif" & chr(34)&">" ) next %> |
Auparavant, la note était affichée via <% =objRecordset("Note") %> Pour attirer l'attention, nous avons décidé d'afficher une image à la place. En fait, 1 image pour une note de 1, 2 images pour une note de 2, et ainsi de suite jusqu'à 5. En HTML, l'insertion directe de l'image icoBouleOrange.gif
se ferait par : C'est ce que fait notre boucle FOR/NEXT : elle répète n fois l'insertion
d'une image, mais de façon dynamique. Comme le Response.Write comporte déjà des guillemets, il est impossible
de taper : |
<% ' Supprimer les dièses et les portions d'URL inutiles strURL = objRecordset("URL") i = InStr(strURL, "#") if i > 0 then strURL = mid(strURL, i) strURL = Replace(strURL, "#", "") ' Créer un lien hypertexte en HTML Response.Write("<A HREF=" & chr(34) & strURL & chr(34) & ">" & strURL & "</A>") %> |
Autre difficulté : comment rendre l'URL du site cliquable ?
En théorie, en combinant un lien HTML et ce que vous avez vu sur les
images (plus haut), il suffirait de produire le code HTML suivant : <A HREF="http://www.unsite.com">www.unsite.com</A> L'autre problème, vu dans les listings précédents, est que nous avons eu la mauvaise idée de gérer l'URL dans Access sous forme de champ "Lien hypertexte", et que ce #?+%& d'Access nous donne l'URL sous la forme suivante : www.unsite.com#http://www.unsite.com# On obtiendrait un lien HTML du style :
Faites comme moi, allez faire un tour, ça ira mieux après :o) ! |