Ajax+asp unbegrenzte Klassifizierungsbaumstruktur mit Datenbank, gute Sache, nicht verpassen, IE-Test bestanden, FF hat einen kleinen Fehler
Cls_Leibie.asp
Kopieren Sie den Codecode wie folgt:
<%
„Datenbankfelder sind Klassenattribute und Funktionen wie das Hinzufügen, Löschen, Ändern und Überprüfen von Vorgängen sind Klassenmethoden.“
Klasse Cls_Leibie
Private nClassID,sClassName,nParentID,sParentPath,nDepth,nRootID,nChild,nOrderID,sFilePath 'Private Variablen definieren (Attribute der Klasse, also Variablen, die Datenbankfeldern entsprechen)
Private rs,sql,ErrorStr
Private Sub Class_Initialize()
ErrorStr= 'Initialisierungsfehlermeldung ist leer
Sub beenden
Private Sub Class_Terminate() 'Schließen Sie die Datenbankverbindung, wenn Sie die Klasse zerstören
Wenn IsObject(Conn) Dann
Verbind.Schließen
SetConn=Nichts
Ende wenn
Sub beenden
'***********************Verschiedene Eigenschaften festlegen************************* ******** ***************************
Öffentliche Eigenschaft Let ClassID(str) 'Kategorie-ID abrufen (Primärschlüssel)
nClassID=str
call ClassProperty() 'Rufen Sie diese Funktion auf, um beim Erhalten der Kategorie-ID alle Eigenschaften der Klasse auszulesen
End-Eigenschaft
Öffentliche Eigenschaft Let ClassName(str) 'Den Klassennamen abrufen
sClassName=str
End-Eigenschaft
Öffentliche Eigenschaft Klassenname abrufen
Klassenname=sKlassenname
End-Eigenschaft
Öffentliche Eigenschaft Let ParentID(str) 'Ruft die übergeordnete ID der Kategorie ab
nParentID=str
End-Eigenschaft
Öffentliches Eigentum ParentID abrufen
ParentID=nParentID
End-Eigenschaft
Öffentliche Eigenschaft Let ParentPath(str) 'Ruft die übergeordnete Pfad-ID ab
sParentPath=str
End-Eigenschaft
Öffentliche Eigenschaft ParentPath abrufen
ParentPath=sParentPath
End-Eigenschaft
Öffentliche Eigenschaft Let Depth(str) 'Kategorietiefe abrufen
nDepth=str
End-Eigenschaft
Öffentliches Eigentum erhält Tiefe
Tiefe=nDepth
End-Eigenschaft
Öffentliche Eigenschaft Let RootID(str) 'Ruft die Kategorie-Stamm-ID ab
nRootID=str
End-Eigenschaft
Öffentliches Eigentum RootID abrufen
RootID=nRootID
End-Eigenschaft
Öffentliches Eigentum Let Child(str) 'Anzahl der Unterkategorien
nChild=str
End-Eigenschaft
Öffentliches Eigentum bekommt Kind
Kind=nKind
End-Eigenschaft
Öffentliche Eigenschaft Let OrderID(str) 'Bestell-ID
nOrderID=str
End-Eigenschaft
Öffentliches Eigentum Bestell-ID abrufen
OrderID=nOrderID
End-Eigenschaft
Öffentliche Eigenschaft Let FilePath(str) 'Kategorie-Dateistammverzeichnis (statischer Dateipfad generieren, Xiaozhan Laoyang Web Technology Blog verwendet statische Dateigenerierung, also legen Sie dieses Feld fest)
sFilePath=str
End-Eigenschaft
Öffentliche Eigenschaft FilePath abrufen
FilePath=sFilePath
End-Eigenschaft
'************************************************** * ******************************
Private Sub ClassProperty() 'Alle Eigenschaften der Klasse lesen
sql=select * from ArticleClass, wobei ClassID=& nClassID
set rs=conn.execute(sql)
wenn nicht rs.eof dann
sClassName=trim(rs(ClassName))
nParentID=trim(rs(ParentID))
sParentPath=trim(rs(ParentPath))
nDepth=trim(rs(Depth))
nRootID=trim(rs(RootID))
nChild=trim(rs(Child))
nOrderID=trim(rs(OrderID))
sFilePath=trim(rs(FilePath))
Ende wenn
setze rs=nichts
Sub beenden
Öffentliche Funktion FAddCheck() 'Eine Prüffunktion zur Kategorie hinzufügen. Ein Ergebnis von 0 bedeutet, dass die Prüfung bestanden wurde, und ein Ergebnis von 1 bedeutet, dass ein Fehler auftritt. Beenden Sie die Funktion und schreiben Sie die Fehlerinformationen in den Fehler Variable ErrorStr
gedämpfte Temperaturen
FAddCheck=0
if sClassName= then 'Der Klassenname ist leer
FAddCheck=1
ErrorStr=Klassenname darf nicht leer sein!
Exit-Funktion
anders
wenn nParentID= dann 'Eltern-ID ist leer
FAddCheck=1
ErrorStr=Eltern-ID darf nicht leer sein!
Exit-Funktion
anders
wenn nParentID<>0 dann
set temprs=conn.execute(select ClassID From ArticleClass where ClassID= & nParentID) 'Die übergeordnete Kategorie existiert nicht
wenn temprs.eof dann
FAddCheck=1
ErrorStr=Die Kategorie existiert nicht oder wurde gelöscht!
Exit-Funktion
anders
sql=select ClassID from ArticleClass where ClassName='& sClassName &' and ParentID=& nParentID 'Duplicate class name
set rs=conn.execute(sql)
wenn nicht rs.eof dann
FAddCheck=1
ErrorStr=Doppelter Klassenname!
Exit-Funktion
Ende wenn
setze rs=nichts
Ende wenn
settemprs=nichts
anders
sql=classID aus ArticleClass auswählen, wobei ClassName='& sClassName &' und ParentID=& nParentID 'Doppelter Klassenname
set rs=conn.execute(sql)
wenn nicht rs.eof dann
FAddCheck=1
ErrorStr=Doppelter Klassenname!
Exit-Funktion
Ende wenn
setze rs=nichts
Ende wenn
Ende wenn
Ende wenn
Funktion beenden
Öffentliches Sub SAdd()
dimmen Sie maxClassID, maxRootID
set rs = conn.execute(select Max(ClassID) from ArticleClass) 'Suchen Sie die größte Kategorie-ID in der aktuellen Datenbank. Wenn keine Daten vorhanden sind, setzen Sie sie auf 0. Die einzufügende Kategorie-ID ist die aktuell größte ID plus 1
maxClassID=rs(0)
if isnull(maxClassID) dann
maxClassID=0
Ende wenn
setze rs=nichts
nClassID=maxClassID+1
set rs=conn.execute(select max(rootid) From ArticleClass) 'Finden Sie die größte Root-ID in der aktuellen Datenbank. Wenn keine Daten vorhanden sind, setzen Sie sie auf 0. Die einzufügende Root-ID ist die aktuell größte Root-ID plus 1
maxRootID=rs(0)
if isnull(maxRootID) then
maxRootID=0
Ende wenn
nRootID=maxRootID+1
set rs=conn.execute(select RootID,Depth,ParentPath,Child,OrderID From ArticleClass where ClassID= & nParentID) 'Finden Sie die entsprechenden Informationen der übergeordneten Kategorie
wenn nicht rs.eof dann
nRootID=trim(rs(Rootid)) 'Die Root-ID ist dieselbe wie die Root-ID der übergeordneten Kategorie
sParentPath=trim(rs(ParentPath))& , &nParentID
if cint(trim(nParentID))>0 then 'Wenn die übergeordnete ID größer als 0 ist, gibt es eine übergeordnete Kategorie, daher wird die Tiefe der einzufügenden Kategorie um 1 zur Tiefe der übergeordneten Kategorie addiert. Wenn die Die übergeordnete ID ist nicht größer als 0. Die aktuell einzufügende Kategorie ist die Stammkategorie. Dann ist die Tiefe 0
nDepth=cint(trim(rs(Depth)))+1
anders
nDepth=0
Ende wenn
wenn cint(trim(rs(Child)))>0 dann
dimrsPrevOrderID
'Holen Sie sich die OrderID der letzten Spalte auf derselben Ebene wie diese Spalte
set rsPrevOrderID=conn.execute(select Max(OrderID) From ArticleClass where ParentID= & ParentID)
prevOrderID=rsPrevOrderID(0)
'Ermitteln Sie die maximale Bestell-ID der Unterspalte derselben übergeordneten Spalte, die jedoch größer als diese Spalte ist. Wenn sie größer als der vorherige Wert ist, verwenden Sie stattdessen diesen Wert.
set rsPrevOrderID=conn.execute(select Max(OrderID) From ArticleClass where ParentPath like ' & ParentPath & ,%')
if (not(rsPrevOrderID.bof und rsPrevOrderID.eof)) then
wenn nicht IsNull(rsPrevOrderID(0)) dann
wenn rsPrevOrderID(0)>prevOrderID dann
prevOrderID=rsPrevOrderID(0)
Ende wenn
Ende wenn
Ende wenn
setze rsPrevOrderID=nichts
Ende wenn
nOrderID=prevOrderID+1
anders
nOrderID=0
sParentPath=0
nDepth=0
Ende wenn
setze rs=nichts
nChild=0
sql=insert into ArticleClass (ClassID,ClassName,ParentID,ParentPath,Depth,RootID,Child,OrderID,FilePath) Werte (& nClassID &,'& sClassName &',& nParentID &,'& sParentPath &',& nDepth &, & nRootID &,& nChild &,& nOrderID &,'& sFilePath &')
conn.execute(sql)
wenn ParentID>0 dann
'Aktualisieren Sie die Anzahl der Unterspalten der übergeordneten Klasse
conn.execute(Update ArticleClass set child=child+1 where ClassID=& nParentID)
'Aktualisieren Sie die Sortierung dieser Spalte und die Sortierreihenfolgenummern der Spalten, die größer als dieser Bedarf sind und unter dieser Kategorie liegen
if prevOrderID<> then
conn.execute(update ArticleClass set OrderID=OrderID+1 where rootid= & nRootid & and OrderID>& prevOrderID & and ClassID<>& nClassID)
Ende wenn
Ende wenn
Sub beenden
Öffentliche Funktion FEditCheck() 'Kategorieänderungsprüffunktion, das Ergebnis ist 0, was bedeutet, dass die Prüfung bestanden wurde, und 1 bedeutet, dass ein Fehler aufgetreten ist. Wenn ein Fehler auftritt, beenden Sie die Funktion und schreiben Sie die Fehlerinformationen in die Fehlervariable ErrorStr
gedämpfte Temperaturen
FEditCheck=0
Wenn nClassID=, dann ist die Kategorie-ID leer
FEditCheck=1
ErrorStr=Kategorie-ID darf nicht leer sein!
Exit-Funktion
anders
if sClassName= then 'Der Klassenname ist leer
FEditCheck=1
ErrorStr=Klassenname darf nicht leer sein!
Exit-Funktion
anders
wenn nParentID<>0 dann
set temprs=conn.execute(select ClassID From ArticleClass where ClassID= & nParentID) 'Die übergeordnete Kategorie existiert nicht
wenn temprs.eof dann
FAddCheck=1
ErrorStr=Die Kategorie existiert nicht oder wurde gelöscht!
Exit-Funktion
anders
set rs=conn.execute (wählen Sie ClassID aus ArticleClass aus, wobei ClassName='& sClassName &' und ClassID<>& nClassID &und ParentID=& nParentID)
Wenn nicht rs.eof, dann 'Doppelter Klassenname
FEditCheck=1
ErrorStr=Doppelter Klassenname!
Exit-Funktion
Ende wenn
setze rs=nichts
Ende wenn
settemprs=nichts
Ende wenn
Ende wenn
Ende wenn
Funktion beenden
Public Sub SEdit() 'Kategorieänderung
sql=update ArticleClass set ClassName='& sClassName &',FilePath='& sFilePath &' wobei ClassID=& nClassID
conn.execute(sql)
Sub beenden
Öffentliche Funktion FDeleteCheck() 'Kategorielöschungsprüffunktion, das Ergebnis ist 0, was bedeutet, dass die Prüfung bestanden wurde, und 1 bedeutet, dass ein Fehler aufgetreten ist. Wenn ein Fehler auftritt, beenden Sie die Funktion und schreiben Sie die Fehlerinformationen in die Fehlervariable ErrorStr
FDeleteCheck=0 'Löschen Sie den Code hier, ohne den kaskadierten Löschteil des Artikels zu schreiben. Beim Löschen sollten Sie ihn kaskadieren.
wenn nClassID= dann
FDeleteCheck=1
ErrorStr=Die zu löschende Kategorie-ID darf nicht leer sein!
Exit-Funktion
anders
set rs=conn.execute (wählen Sie Child aus ArticleClass aus, wobei ClassID=& nClassID)
wenn rs.bof und rs.eof dann
FDeleteCheck=1
ErrorStr=Die Kategorie existiert nicht oder wurde gelöscht!
Exit-Funktion
anders
wenn trim(rs(Child))>0 dann
FDeleteCheck=1
ErrorStr=Diese Kategorie enthält Unterkategorien, bitte löschen Sie ihre Unterkategorien, bevor Sie diese Kategorie löschen!
Exit-Funktion
Ende wenn
Ende wenn
Ende wenn
Funktion beenden
Öffentliches Sub SDelete()
wenn nDepth>0 dann 'Ändern Sie die Anzahl der untergeordneten Elemente der übergeordneten ID
conn.execute(Update ArticleClass set child=child-1, wobei child>0 und ClassID= & nParentID)
Ende wenn
sql=aus ArticleClass löschen, wobei ClassID=& nClassID
conn.execute(sql)
Sub beenden
Öffentliche FunktionFErrStr()
FErrStr=FehlerStr
Funktion beenden
Unterricht beenden
%>
index.asp
<%@LANGUAGE=VBSCRIPT CODEPAGE=65001%>
<%
'Autorenseite: www.guaishi.org
„E-Mail: [email protected]
'QQ:514777880
Session.CodePage=65001
Response.Charset = utf-8
%>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>
<html xmlns=http://www.w3.org/1999/xhtml>
<Kopf>
<meta http-equiv=Content-Type content=text/html;
<title></title>
<style type=text/css>
body{margin:0;padding:0;font-size:12px;background-color:#FFFFFF;}
ul{ list-style-type:none; margin:0 0 0 20px padding:0;}
li{ white-space:nowrap; padding:0;}
.childdiv{background:url(images/dot.gif);background-repeat:repeat-y;}
span { Cursor:Zeiger;}
</style>
<script type=text/javascript>
var xmlHttp; //Eine globale Variable definieren
var currentID=1;//Legen Sie die aktuell ausgewählte ID fest. Wenn diese ID nicht vorhanden ist, tritt ein js-Fehler auf.
//Hauptfunktion der Kategorieanzeige
//cid – die Ebenen-ID der Unterkategorie
//id --category id
//pid--[+] und [-] Symbol-ID
//fid--category icon id
Funktion DivDisplay(cid,id,pid,fid)
{
if (GetId(cid).style.display=='') //Symbolanzeigesteuerung, wenn die Unterkategorie nicht angezeigt wird
{
GetId(cid).style.display='none';
GetId(pid).src = 'images/closed.gif';
GetId(fid).src = 'images/folder.gif';
}
else //Vorgänge beim Erweitern von Unterkategorien
{
GetId(cid).style.display='';
GetId(pid).src = 'images/opened.gif';
GetId(fid).src = 'images/folderopen.gif';
if (GetId(cid).innerHTML==''||GetId(cid).innerHTML=='Daten werden übermittelt...')
{
GetId(cid).innerHTML='';
ShowChild(cid,id); //Funktion zur Anzeige der Unterkategorie aufrufen
}
}
}
//Gleicher Effekt wie die vorherige Funktion, funktioniert nur für die letzte Kategorie
Funktion DivDisplay2(cid,id,pid,fid)
{
if (GetId(cid).style.display=='')
{
GetId(cid).style.display='none';
GetId(pid).src = 'images/lastclosed.gif';
GetId(fid).src = 'images/folder.gif';
}
anders
{
GetId(cid).style.display='';
GetId(pid).src = 'images/lastopen.gif';
GetId(fid).src = 'images/folderopen.gif';
if (GetId(cid).innerHTML==''||GetId(cid).innerHTML=='Daten werden übermittelt...')
{
GetId(cid).innerHTML='';
ShowChild(cid,id);
}
}
}
//Funktion zum Hinzufügen einer Kategorie
//id--category id
Funktion ClassAdd(id){
if (GetId(p+id).src.indexOf(last)>0){ //Operation für die letzte Kategorie hinzufügen
if (!GetId(p+id).onclick){
GetId(p+id).onclick=function (){DivDisplay2(c+id,id,p+id,f+id);} //Klickereignisse für [+] und [-] hinzufügen
GetId(s+id).ondblclick=function (){DivDisplay2(c+id,id,p+id,f+id);}; //Ein Doppelklick-Ereignis für den Bereich hinzufügen, der Kategorietext anzeigt
GetId(p+id).src = 'images/lastopen.gif';
}
}
anders{
if (!GetId(p+id).onclick){ //Die letzte Kategorie nicht hinzufügen
GetId(p+id).onclick=function (){DivDisplay(c+id,id,p+id,f+id);};
GetId(s+id).ondblclick=function (){DivDisplay(c+id,id,p+id,f+id);};
GetId(p+id).src = 'images/opened.gif';
}
}
GetId(c+id).style.display='';
ShowChild(c+id,id);
}
//Kategorieänderungsfunktion
Funktion ClassEdit(id,classname){
GetId(s+id).innerHTML=classname;
}
//Löschfunktion für Kategorien mit mehreren Unterkategorien
Funktion ClassDel(id){
ShowChild(c+id,id);
CurrentSelect(currentID,id)
BrowseRight(id);
}
//Löschfunktion für Kategorien mit nur einer Unterkategorie
Funktion ClassDel1(id){
if (GetId(p+id).src.indexOf(last)>0){ //Wenn die Kategorie die letzte Kategorie der aktuellen Kategorie ist
GetId(p+id).style.cursor=cursor; //Legen Sie den Mausbewegungsstil des Symbols fest
GetId(p+id).onclick=function (){}; //Da es nach dem Löschen nur eine Unterkategorie gibt, gibt es keine weiteren Unterkategorien, also ändern Sie das Symbolklickereignis in eine leere Funktion
GetId(s+id).ondblclick=function (){}; //Wie oben
GetId(p+id).src = 'images/lastnochild.gif'; //Symboleinstellungen
}
anders{
GetId(p+id).style.cursor=cursor; //Löschvorgang der nicht letzten Kategorie
GetId(p+id).onclick=function (){};
GetId(s+id).ondblclick=function (){};
GetId(p+id).src = 'images/nofollow2.gif'; //Die Symboleinstellung hier unterscheidet sich von der vorherigen
}
ShowChild(c+id,id);
CurrentSelect(currentID,id);
BrowseRight(id);
}
// Parameter an den rechten Frame übergeben
Funktion BrowseRight(id){
CurrentSelect(currentID,id);
top.ContentFrame.location=../ArticleMain.asp?ClassID=+ id;
}
//Funktion zum Festlegen des ausgewählten Status der Kategorie
Funktion CurrentSelect(oldid,newid){
currentID=newid;
document.getElementById(s+oldid).style.backgroundColor=white;
document.getElementById(s+currentID).style.backgroundColor=#C0C0E9;
}
//XMLHttpRequest-Objekt erstellen
Funktion CreateXMLHttpRequest()
{
if (window.ActiveXObject)
{
xmlHttp = neues ActiveXObject(Microsoft.XMLHTTP);
}
anders
{
xmlHttp = new XMLHttpRequest();
}
}
//Ajax-Verarbeitungsfunktion
//id, Layer-ID
//rid, die ID der Daten in der Tabelle
Funktion ShowChild(cid,id)
{
CreateXMLHttpRequest();
if(xmlHttp)
{
xmlHttp.open('POST','child.asp',true);
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
var SendData = 'id='+id;
xmlHttp.send(SendData);
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
GetId(cid).innerHTML = xmlHttp.responseText;
}
anders
{
GetId(cid).innerHTML='Fehler:'+xmlHttp.statusText;
}
}
anders
{
GetId(cid).innerHTML=Daten werden übermittelt...;
}
}
}
anders
{
GetId(cid).innerHTML='Leider unterstützt Ihr Browser XMLHttpRequest nicht, bitte verwenden Sie IE6 oder höher! ';
}
}
//Das Seitenobjekt abrufen
//id, Layer-ID
Funktion GetId(id)
{
return document.getElementById(id);
}
</script>
</head>
<Körper>
<!--#include file=../conn.asp-->
<%
'Stammverzeichnis anzeigen
sql=select *,(wählen Sie die erste Klassen-ID aus ArticleClass aus, wobei Tiefe=0, sortiert nach Klassen-ID, absteigend) als letzte ID aus ArtikelKlasse, wobei Tiefe=0, sortiert nach Klassen-ID
set rs=conn.execute(sql)
wenn nicht rs.eof dann
Antwort.Write <ul>&vbcr
tun, während nicht rs.eof
wenn cint(trim(rs(ClassID)))=cint(trim(rs(lastid))) dann
wenn rs(Child)>0 dann
Response.Write <li><img id='p&rs(ClassID)&' src=images/lastclosed.gif onclick=DivDisplay2('c&rs(ClassID)&','&rs(ClassID)&','p&rs(ClassID)& ','f& rs(ClassID) &') style=cursor : hand align=absmiddle>
Response.Write <img src=images/folder.gif align=absmiddle id='f& rs(ClassID) &' /> <span id='s& trim(rs(ClassID)) &' onclick=BrowseRight(& trim(rs (Klassen-ID)) &) ondblclick=DivDisplay2('c&rs(ClassID)&','&rs(ClassID)&','p&rs(ClassID)&','f& rs(ClassID) &')>& rs(ClassName) &</span>
anders
Antwort.Write <li><img id='p& rs(ClassID) &' src=images/lastnochild.gif align=absmiddle />
Response.Write <img src=images/folder.gif align=absmiddle id='f& rs(ClassID) &' /> <span id='s& trim(rs(ClassID)) &' onclick=BrowseRight(& trim(rs (ClassID)) &)>& rs(ClassName) &</span>
Ende wenn
anders
wenn rs(Child)>0 dann
Response.Write <li><img id='p&rs(ClassID)&' src=images/closed.gif onclick=DivDisplay('c&rs(ClassID)&','&rs(ClassID)&','p&rs(ClassID)& ','f& rs(ClassID) &') style=cursor : hand align=absmiddle>
Response.Write <img src=images/folder.gif align=absmiddle id='f& rs(ClassID) &' /> <span id='s& trim(rs(ClassID)) &' onclick=BrowseRight(& trim(rs (Klassen-ID)) &) ondblclick=DivDisplay('c&rs(ClassID)&','&rs(ClassID)&','p&rs(ClassID)&','f& rs(ClassID) &')>& rs(ClassName) &</span>
anders
Antwort.Write <li><img id='p& rs(ClassID) &' src=images/nofollow2.gif align=absmiddle />
Response.Write <img src=images/folder.gif align=absmiddle id='f& rs(ClassID) &' /> <span id='s& trim(rs(ClassID)) &' onclick=BrowseRight(& trim(rs (ClassID)) &)>& rs(ClassName) &</span>
Ende wenn
Ende wenn
wenn cint(trim(rs(ClassID)))=cint(trim(rs(lastid))) dann
Antwort.Write <div id='c&rs(ClassID)&' style='display:none;'></div>
anders
Antwort.Write <div id='c&rs(ClassID)&' style='display:none;'
Ende wenn
Antwort.Write </li>&vbcr
rs.movenext
Schleife
Antwort.Write </ul>&vbcr
Ende wenn
rs.close
setze rs=nichts
Verbindung schließen
Setze conn = Nothing
%>
</body>
</html>