29. november 2003 - 22:07Der er
51 kommentarer og 1 løsning
Sideskift på en mærkelig måde..
Hejsa..
Jeg har i øjeblikket sådan en sideskift her:
<% pageid=lcase(request.querystring("page"))
if pageid = "" THEN pageid = "forside" End if Set oFS = Server.CreateObject("Scripting.FileSystemObject")
if oFS.FileExists(Server.MapPath("page/" & pageid & ".asp")) = True Then server.execute "page/" & pageid & ".asp" else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Som går ind i page biblioteket og henter siderne der.. når jeg skal linke til det, så hedder linket <a href="default.asp?page=profil">Profil</a>
Jeg vil gerne have en mappe der hedder Gæstebog, hvor jeg skal kunne kalde filerne i gæstebog ud med et link.
f.eks. default.asp?guest=skriv eller noget i den stil.. hvordan kan jeg klare dette problem?
<a href="default.asp?page=guest&mode=skriv">Skriv i gæstebogen</a>
Du finder siden med request.querystring("page"). Hvis siden er "guest" Hvis "mode" = "skriv", vis en form. ellers vis indholdet af gæstebogen slut_hvis slut_hvis
Ved dette link.. så skal der ligge en guest.asp side i mit page bibliotek.. Men det er sådan jeg vil have et bibliotek der hedder guest. Så jeg har page bibliotek, pictures bibliotek og guest bibliotek
Du har helt misforstået det.. Jeg har min mappe: Hjemmeside.. I den mappe ligger der: default.asp, style.css, biblioteket Page, biblioteket Pictures, Biblioketet GUest.
I min default.asp har jeg den sideskift jeg har skrevet oven over.
Jeg vil have den til at kunne gøre sådan at man i et link kunne kalde filer fra guest mappen i stedet for page mappen..?
Det er kun gæstebog-linket der er anderledes end de andre: <a href="default.asp?page=guest&mode=skriv">Skriv i gæstebogen</a>
Hvis du skal kunne hente fra "guest", "pictures", og andet, ville det være nemmere at bruge: --- <a href="default.asp?page=page/enside">en side <a href="default.asp?page=guest/skriv">Skriv i gæstebogen</a> <a href="default.asp?page=pictures/london">Billeder fra London</a>
pageid=lcase(request.querystring("page"))
Set oFS = Server.CreateObject("Scripting.FileSystemObject")
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp" ... ---
if pageid = "" THEN pageid = "forside" End if pageid=lcase(request.querystring("page"))
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp"
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Så siger den:
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a01a8'
<a href="default.asp?page=page/enside">en side <a href="default.asp?page=guest/skriv">Skriv i gæstebogen</a> <a href="default.asp?page=pictures/london">Billeder fra London</a>
asp kode:
<% pageid=lcase(request.querystring("page"))
if pageid = "" THEN pageid = "forside" End if
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp"
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Gæstebog-linket skulle så gerne blive til: server.execute "guest/skriv.asp"
Når du får en fejlmelding skal du skrive: - fejlmeldingen - linie nr - hvad der står på linien - evt "hjemmelavede" funktioner du brugte da der opstod fejl - variablers indhold, hvis du brugte variabler ved fejlen
side.inc som den siger der er fejl i ser sådan ud: <% pageid=lcase(request.querystring("page"))
if pageid = "" THEN pageid = "forside" End if
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp"
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Den siger i linje 8 at et objekt er obligatorisk.. :)
Den referer til "oFS" objektet. Hvor bliver den sat? dvs, "set oFS = ...". Den skulle gerne sættes enten i samme fil, eller ved at inkludere en fil med koden i..
så har du indsat min kode før "set oFS = ..."-koden.. det skal være omvendt. "oFS" objektet skal sættes/oprettes før du kan bruge "oFS.FileExists..."-koden.
- Jeg kan ikke se hvad du har i side.inc. - Du bruger et FileSystemObject, kaldet "oFS", til at checke om en fil eksisterer. - "oFS" skal sættes/oprettes før du kan bruge/afvikle "oFS.FileExists..."-koden i default.asp filen.
Hvis "set oFS =..." linien ligger i side.inc, skal side.inc inkluderes før du kan bruger "oFS.FileExists..."-koden i default.asp filen.
Eksempel: -- default.asp start -- <!-- #include file="side.inc" //--> .. en masse kode her.. if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then .. en masse kode her.. -- default.asp slut --
Hvis "set oFS =..." ligger i default.asp filen, skal denne linie ligge før "oFS.FileExists..."-koden.
Eksempel: -- default.asp start -- ..en masse kode.. "set oFS = ..."-koden if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then ..en masse kode.. -- default.asp slut --
nej.. grunden til at jeg siger side.inc er at jeg der hvor koden skal indsættes i min default.asp har lagt en include file, så jeg nemt kan redigere i mine koder.
Men hvad skal der stå hvis jeg skal kunne lave sådan et sideskift? altså den kode der skal være i min indholdsboks..=?
1) "nej.. grunden til at jeg siger side.inc er at jeg der hvor koden skal indsættes i min default.asp har lagt en include file, så jeg nemt kan redigere i mine koder."
Er du gået over til at bruger include i stedet for server.execute?
2) "Men hvad skal der stå hvis jeg skal kunne lave sådan et sideskift? altså den kode der skal være i min indholdsboks..=?"
Den forstod jeg ikke.. Hvad er denne "indholdsboks"? en iframe/tabel/hvad?
Husk lige på at Chilli!ASP ikke understøtter server.execute og server.transfer. Jeg mener at B-One bruger Chilli!ASP.. eller også var det Cliche..
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Plough familien</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="inklude/opbygning.css"> <link rel="stylesheet" type="text/css" href="inklude/tekst.css"> </head>
<body> <table class="almtabel" cellpadding="0" cellspacing="0"> <tr> <td id="top"><img src="pic/logo.gif" alt="" width="416" height="54"></td> </tr> <tr> <td id="menu"> <!--#include file="inklude/menu.inc"--> </td> </tr> <tr> <td id="content"><table class="almtabel" cellspacing="0" cellpadding="0"> <tr> <td id="content-left"> </td> <td id="content-center"> <div style='overflow:auto;height:100%;width:100%'> <table class="almtabel" cellspacing="0" cellpadding="0"> <tr> <td id="indhold"> <p> <span class="indhold"> <!--#include file="inklude/side.inc"--> </span> </p> </td> </tr> </table> </div> </td> <td id="content-right"> </td> </tr> </table></td> </tr> <tr> <td id="bund"> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td> </td> <td id="nyhed"><span class="nyhed"><b>Nyhed 28. November 2003:</b><br> Hvis du er med i 'plough' familien, kan du nu få en ploug-emailadresse eller hjemmeside.<br> <br> <b><a href="?page=nyhed" class="nyhed">Læs mere her:</a></b></span> </td> </tr> </table></td> </tr> </table> </body> </html>
Min side.inc:
<% pageid=lcase(request.querystring("page"))
if pageid = "" THEN pageid = "forside" End if Set oFS = Server.CreateObject("Scripting.FileSystemObject")
if oFS.FileExists(Server.MapPath("page/" & pageid & ".asp")) = True Then server.execute "page/" & pageid & ".asp" else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Hvis du bruger en index.asp i hver mappe (nyhed, guest, pictures, osv) kan du droppe ".asp" delen..: <a href="?page=nyhed" class="nyhed">Læs mere her:</a> ... server.execute pageid
Eksempel:
<a href="?page=page/nyhed" class="nyhed">Læs mere her:</a> <a href="?page=guest" class="guest">Gæstebog</a>
<% pageid=lcase(request.querystring("page"))
if pageid = "" THEN pageid = "forside" End if
if oFS.FileExists(Server.MapPath(pageid & "/index.asp")) = True Then server.execute pageid
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Hvis man klikker på "Læs mere her:", udføres: server.execute "page/nyhed/index.asp" Hvis man klikker på "Gæstebog", udføres: server.execute "guest/index.asp"
--
En anden metode er at bruge Select Case:
<a href="?page=nyhed" class="nyhed">Læs mere her:</a> <a href="?page=guest" class="guest">Gæstebog</a>
<% pageid=lcase(request.querystring("page"))
Select Case lcase(pageid) ' sammenlign små bogstaver case "guest" server.execute "guest/index.asp" case "nyhed" server.execute "page/nyhed.asp" case "forside" server.execute "page/forside.asp" case else server.execute "page/error/404.asp" end select %>
Du behøver ikke at betale for noget der kan løses gratis.. spørgsmålet er, hvilken løsningen er du villig til at bruge..
Hvis du bruger select case, slippet du for FileSystemObject.. jeg ved ikke om du har webhotel, eller om du bruger et gratis et som f.eks. friserverplads.dk, frac.dk, frip.dk etc.. de gratis webhoteller deaktiverer FSO, pga sikkerheden.. så det kan man ikke bruge..
Jeg vil have at det skal kunne lade sig gøre ved hvilken som helst mappen, uden jeg skal redigere i min kode.. Dvs at får jeg lyst til at ligge en mappe der hedder jul ind i den, så kan jeg uden videre skrive et link dertil..!
<a href="default.asp?page=page/side">Nyheder</a> <a href="default.asp?page=guest/write">Skriv i gæstebogen</a> <a href="default.asp?page=guest/read">Læs i gæstebogen</a> <a href="default.asp?page=pictures/london">Billeder fra London</a>
asp kode:
<% pageid=lcase(request.querystring("page"))
if pageid = "" THEN pageid = "forside" End if
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp"
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Nyheder: server.execute "page/nyhed.asp" Skriv i gæstebogen: server.execute "guest/write.asp" Læs i gæstebogen: server.execute "guest/read.asp" Billeder fra London: server.execute "pictures/london.asp
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp"
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if %>
Er der fejl i linje 8.. tror det er den her: if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then
Den siger:
Der opstod en Microsoft VBScript-kørselsfejl fejl '800a01a8'
"page" er blevet til "content"? altså <a href="?content=nyhed">nyheder</a> ?
Den skulle gerne selv vise enten 404.asp eller en fejl besked.. Denne del checker om urlen eksisterer..
if oFS.FileExists(Server.MapPath(pageid & ".asp")) = True Then server.execute pageid & ".asp"
else
if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then server.execute "page/error/404.asp" else Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if end if
Hvis urlen eksisterer, udføres: server.execute pageid & ".asp"
ellers udføres: ' findes 404.asp filen? if oFS.FileExists(Server.MapPath("page/error/404.asp")) = True Then ' ja, 404.asp findes, hent den: server.execute "page/error/404.asp" else ' 404.asp findes IKKE, skriv fejl: Response.Write "<h1>404 Error</h1>" Response.Write "<p>Siden er desværre nede lige nu. Hvis problemet fortsætter, så send venligst en mail til os.</p>" end if
hvis page/profil.asp eksisterer vis page/profil.asp ellers hvis /page/error/404.asp findes, vis 404.asp ellers vises en fejl besked.. slut_hvis slut_hvis
Den bliver nød til at vise enten 404.asp eller din fejl besked, hvis urlen ikke findes..
Det virker da mystisk.. Jeg har lige oprettet samme mappestruktur for at teste scriptet.. så kommer jeg i tanke om at Personal Web Server på Windows 98 understøtter ikke server.execute.. Så jeg kan ikke komme til at afprøve det..
Men logisk set burde den vise enten 404.asp eller fejl beskeden, hvis urlen ikke eksisterer..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.