Gestion universelle des données et services utilisant du HTML pur. Cependant, pour collecter des données, vous avez besoin d’un référentiel de données. Pour éviter de nombreux problèmes liés à l'utilisation d'un serveur de base de données, vous pouvez collecter ces données au format XML. Voici la structure de base de notre projet :
<user> <first_name/> <last_name/> <mi/> </user>
J'ai initialement limité les données au prénom, au nom et au deuxième prénom. L'idée de base derrière cette page est que les informations utilisateur sont obtenues dans cette page. Une fois les besoins d’informations de l’utilisateur satisfaits, le processus doit passer à l’étape logique suivante de collecte. Pour garder les choses simples, je vais envelopper les fonctionnalités utilisateur dans une classe asp.
Function Coalesce(vVar, vAlt) If vVal = "" Or VarType(vVal) = 1 Or VarType(vVal) = 0 Then Coalesce = vAlt Else Coalesce = vVal End If End Function Class CUser PRivate m_SQL, m_DOM Public Property Get DOM() Set DOM = m_DOM End Property Public Sub saveUser() m_SQL.save "save_user", m_DOM End Sub Public Function validate() m_DOM.loadXML "<root>" & m_SQL.validateUser(m_DOM) & "</root>" If Not m_DOM.selectSingleNode("//error") Is Nothing Then validate = False Else validate = True End If End Function Private Sub collectData(dom, oCollection) Dim nItem, node, parent_node, n, sKey For nItem = 1 To oCollection.Count sKey = oCollection.Key(nItem) Set parent_node = dom.selectSingleNode("//" & sKey & "s") If Not parent_node Is Nothing Then For n = 1 To oCollection(sKey).Count Set node = parent_node.selectSingleNode(sKey & _ "[string(.)='" & oCollection(sKey)(n) & "']") If node Is Nothing Then Set node = dom.createNode(1, sKey, "") Set node = parent_node.appendChild(node) End If node.text = Coalesce(oCollection(sKey)(n), "") Next Else Set node = dom.selectSingleNode("//" & sKey) If Not node Is Nothing Then _ node.text = Coalesce(oCollection(sKey), "") End If Next End Sub Private Sub Class_Initialize() Set m_SQL = New CSQL Set m_DOM = Server.CreateObject("MSXML2.DOMDocument") m_DOM.async = False If VarType(Request ("txtUserXML")) = 0 Or Request ("txtUserXML") = "" Then m_DOM.loadXML Request("txtUserXML") Else m_DOM.load "<root>" & Server.MapPath("user.xml") & "</root>" End If collectData m_DOM, Request.Form collectData m_DOM, Request.QueryString End Sub Private Sub Class_Terminate() Set m_SQL = Nothing Set m_DOM = Nothing End Sub End Class Class CSQL Private m_DAL, m_Stream Public Function save(sStoredProc, oDOM) 'adVarChar = 200 m_DAL.RunSP Array(m_DAL.mp("@xml_param", 200, 8000, oDOM.xml)) End Function Public Function validateUser(oDOM) Set m_Stream = m_DAL.RunSPReturnStream("validate_user", Array(_ m_DAL.mp("@xml_param", 200, 8000, oDOM.xml))) validateUser = m_Stream.ReadText(-1) m_Stream.Close End Function Private Sub Class_Initialize() Set m_DAL = Server.CreateObject("MyPkg.MyDAL") m_DAL.GetConnection "some connection string" Set m_Stream = Server.CreateObject("ADODB.Stream") End Sub Private Sub Class_Terminate() Set m_DAL = Nothing Set m_Stream = Nothing End Sub End Class
La classe CSQL est construite sur la base d'un composant de couche d'accès aux données (m_DAL) MyPkg.MyDAL. Ce composant est construit sur la base des composants Fitch et Mather DAL, disponibles sur MSDN. De cette façon, nous construisons un pont entre SQL Server et votre code.
Lorsque l'objet CUser est initialisé, il collecte les données de requête et utilise la sous-fonction collectData() pour placer les données collectées dans un nœud correspondant dans le UserDOM. (Je n'expliquerai pas le code car il est assez facile à comprendre en soi.) Après avoir collecté les données (ou non), nous utiliserons XSL pour transformer le contenu des données en mise en page.
<?xml version="1.0"?> <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform version="1.0"> <xsl:output method="html"/> <xsl:template match="/"> <xsl:if test="//error"> <font color="red">*Information in red is required<br/></font> </xsl:if> <xsl:apply-templates select="//user"/> </xsl:template> <xsl:template match="user"> <font> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="//error[.='first name']">red</xsl:when> <xsl:otherwise>black</xsl:otherwise> </xsl:choose> </xsl:attribute> First Name: </font> <input type="text" name="first_name"> <xsl:attribute name="value"><xsl:value-of select="first_name"/></xsl:attribute> </input><br/> <font> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="//error[.='mi']">red</xsl:when> <xsl:otherwise>black</xsl:otherwise> </xsl:choose> </xsl:attribute> MI: </font> <input type="text" name="mi"> <xsl:attribute name="value"><xsl:value-of select="mi"/></xsl:attribute> </input><br/> <font> <xsl:attribute name="color"> <xsl:choose> <xsl:when test="//error[.='last_name']">red</xsl:when> <xsl:otherwise>black</xsl:otherwise> </xsl:choose> </xsl:attribute> Last Name: </font> <input type="text" name="last_name"> <xsl:attribute name="value"><xsl:value-of select="last_name"/></xsl:attribute> </input><br/> </xsl:template> </xsl:stylesheet>
Cette feuille de style convertira le contenu en mise en page. La vérification des erreurs est importante et les procédures stockées vérifient les données en déterminant si elles doivent être traitées. Renvoie un nœud « erreurs » pour chaque champ qui ne peut pas être vide mais dont les données ne sont pas renseignées. Le résultat de ce XML est à peu près le suivant :
<user>. . .</user><errors><error>first_name</error>. . .</errors>
Cette feuille de style convertira le contenu en mise en page. La vérification des erreurs est importante et les procédures stockées vérifient les données en déterminant si elles doivent être traitées. Renvoie un nœud « erreurs » pour chaque champ qui ne peut pas être vide mais dont les données ne sont pas renseignées. La sortie de ce XML est à peu près la suivante :
<user>. . .</user><errors><error>first_name</error>. . .</errors>
Notez que s'il y a une erreur dans la correspondance du nom du nœud, la sortie résultante sera rouge. Nous avons besoin de l'ASP suivant pour combiner toutes les choses précédentes.
<%@ Language=VBScript %> <% Option Explicit Dim oUser Set oUser = New CUser If oUser.validate() Then Set oUser = Nothing Server.Transfer "NextPage.asp" End If %> <html> <body> <form method="POST" action="GetUser.asp" name="thisForm" id="thisForm"> <% Response.Write xslTransform(oUser.DOM, "user.xsl") %> <input type="hidden" name="txtUserXML" id="txtUserXML" value="<%=oUser.DOM.xml%>"> <input type="submit" value="Submit"> </form> </body> </html> <% Set oUser = Nothing Function xslTransform(vXML, XSLFileName) Dim m_xml, m_xsl If VarType(vXML) = 8 Then Set m_xml = m_dom m_xml.loadXML vXML ElseIf VarType(vXML) = 9 Then Set m_xml = vXML End If If m_xml.parseError.errorCode <> 0 Then _ Err.Raise vbObjectError, "XMLTransform(...)", m_xml.parseError.reason Set m_xsl = Server.CreateObject("MSXML2.DOMDocument") m_xsl.async = False m_xsl.load Server.MapPath(XSLFileName) If m_xsl.parseError.errorCode <> 0 Then _ Err.Raise vbObjectError, "XMLTransform(...)", m_xsl.parseError.reason xslTransform = m_xml.transformNode(m_xsl) Set m_xsl = Nothing End Function %> <!--#include file="CUser.asp"-->
Le code ASP crée un objet CUser et remplit les données s'il y a des données. Le code HTML résultant est ensuite créé via une transformation XSL à l'aide du DOM de CUser. La transformation est enveloppée dans une fonction appelée xslTransform. N'oubliez pas non plus de stocker le DOM CUser résultant dans un élément Ou vous pouvez stocker le DOM CUser dans une variable de session et le récupérer lors de l'initialisation.
Après avoir complété cette page, vous pouvez créer d'autres pages basées sur le code squelette précédent. Vous avez maintenant créé un scénario de copier-coller pour la collecte de données. La plus belle partie de cette solution est que toutes les sorties sont du HTML pur, sans propriétés ni feuilles de style spécifiques au navigateur. Et comme la fonctionnalité est regroupée dans des classes, vous pouvez utiliser XSLT pour générer des mises en page et le code s'exécute assez rapidement.
Ce qui précède est le contenu de la gestion générale des données et des services utilisant du HTML pur. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !