Maison  >  Article  >  développement back-end  >  Gestion universelle des données et service en utilisant du HTML pur

Gestion universelle des données et service en utilisant du HTML pur

黄舟
黄舟original
2017-03-03 17:03:061699parcourir

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(.)=&#39;" &
oCollection(sKey)(n) & "&#39;]")
                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)
    &#39;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[.=&#39;first name&#39;]">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[.=&#39;mi&#39;]">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[.=&#39;last_name&#39;]">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 1f8d794be57c83e2004988471599675b 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) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn