Avatar billede mikkeljans Nybegynder
15. marts 2006 - 09:22 Der er 17 kommentarer og
1 løsning

Generelt opbygning af kodestruktur

Det jeg gerne vil komme ind på her er hvordan man opbygger en stor hjemmeside med Login, Forums, Database osv, rent kode messigt..
Jeg har allerede programmeret alt hvad der skal programmeres i ASP, men jeg vil gerne gøre kode- og filstrukturen mere simpel og ren.
Det skal blandt andet indebærer at det kode som går igen mere end én gang skal være et sted for sig selv som de forskellige sider bruger.
Kunne man evt. lave et skabelon til den typiske måde alle sider starter på med html, head og body tags osv. og derudover gøre det til standard at alle nye filer som bliver oprettet starter ud fra skabelonen..?
'Skabelons-koden' skal så ikke være synlig i de forskellige sider, som bruger skabelonen.

Jeg har ikke noget specifik spørgsmål, men kort sagt har jeg en masse masse filer som jeg syntes virker rodet og meget kode som bliver brugt flere steder, f.eks kode hvor den åbner og lukker databasen..
Hvad jeg så gerne vil er generelt at have et godt system til koden så den bliver mere overskuelig og nemmere at rette..

Hvordan ville i bygge en kompliceret sides grundliggende struktur?
Er der nogen artikler og tutorials som ville være gode at læse?
Har i generelt nogen gode tips?

Jeg arbejder i Adobe - GoLive.

Alle Forslag Er Velkommen.

På forhånd tak.
Avatar billede fennec Nybegynder
15. marts 2006 - 09:31 #1
Hvis du ikke allerede kender til det så skal du kikke på includes og funktioner. Det er de to ting som gør din kode mindre og nemmere at læse:

Includes er en metode til at hente en anden fil ind på siden. Jeg har f.eks 3 includes som jeg smider ind på alle sider:

<!-- #include file="start.asp" -->
<!-- #include file="MyFunctions.asp" -->
<!-- #include file="header.asp" -->

Start.asp sætter alle mulige variabler (et par sessions og opretter DB forbindelse)
MyFunctions.asp indeholder en masse af mine ejne funktioner.
header.asp inderholder kun HTML kode, men det er hele start koden (<!DOCTYPE...><HTML><HEAD>... )

Helt rigtig ligger MyFunctions og header som include i Start, så jeg kun includere den fil på mine sider, men så får jeg de andre med også :o)
Avatar billede fennec Nybegynder
15. marts 2006 - 09:33 #2
Her desuden også en end.asp include som lukker DB forbindelsen igen...
Avatar billede keysersoze Guru
15. marts 2006 - 09:39 #3
du har et spørgsmål - men alligevel ikke... og så alligevel ;)

Der er mange måder at gøre dette på - langt hen ad vejen er det nok et spørgsmål om smag og behag. Generelt kan et fåtal af mapper samt meget strukturerede regler for filnavne gøre det.

mappestrukturen kan være de muligheder der er i et projekt fx; admin, constants (fx databaseconnections), css, javascript, actions (udførende filer, fx login.asp og logout.asp), includes (filer der vises for brugeren) etc etc

Generelt vil include-filer - som fennec foreslår det - derefter kunne gøre utrolig meget arbejde for en netop i forbindelse med genbrugelig funktioner, databaseconnections etc.

Designmæssigt er der flere muligheder - generelt lægger jeg designet i nogle functioner jeg så kan kalde med eventuelle parametre fx;

head("title","keywords","description","javascript")
' almindeligt html/asp kode
bottom()
Avatar billede mikkeljans Nybegynder
15. marts 2006 - 10:23 #4
Jeg har prøvet mig lidt frem med Functions.. Men jeg gør nok noget forkert, for det virker ikke..
Har lavet en 'Functions.asp' fil..:
<%
Function BeginPage(Title)
    Response.Write "<html>"
    Response.Write "<head>"
    Response.Write         "<title>" & Title & "</title>"
    Response.Write "</head>"

    Response.Write "<body bgcolor='#ffffff'>"
End Function


Function EndPage()
    Response.Write "</body>"
    Response.Write "</html>"
End Function


Function OpenDB()
    Set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=CENSURERET:)"
    Conn.Open DSN
End Function


Function CloseDB()
    Conn.Close
    Set Conn = Nothing
End Function
%>


News.asp:

<%

<!--#include virtual="/Functions.asp"-->

Response.Write BeginPage("News")

Response.Write OpenDB()

(EN MASSE ANDET KODE)
   
Response.Write CloseDB()
Response.Write EndPage()

%>


Kunne forestille mig det nok er fordi en function kun retunere et resultat, og ikke skriver hvad jeg skriver indefor functionen... Er jeg så tvunget til at bruge include her istedet for functioner, eller kan funktionen virke ligesom jeg har forsøgt i 'Functions.asp' filen?
Avatar billede keysersoze Guru
15. marts 2006 - 10:30 #5
<%
Function BeginPage(Title)
%>
<html>
<head>
<title><%=Title%></title>
</head>
<body bgcolor="#ffffff">
<%
End Function
%>

mht dine database-ting så lav det som include filer med intet andet end fx

<%
conn.close
set conn = nothing
%>
Avatar billede fennec Nybegynder
15. marts 2006 - 10:30 #6
Du skal ikke kalde funktionerne med Response.Write. Det skal bare være:

BeginPage("News")
eller:
call BeginPage("News")
Avatar billede fennec Nybegynder
15. marts 2006 - 11:05 #7
Hvis det skal være helt rigtig skal du vel også benytte Sub() i dette tilfælde (selv om begge dele fungere :o)

Function er kendetegnet ved at den kan returnere en værdi. Det kan Sub ikke, og da du ikke skal returnere en værdi, er det den man burde bruge.

Sub BeginPage(Title)
    Response.Write "<html>"
    Response.Write "<head>"
    Response.Write        "<title>" & Title & "</title>"
    Response.Write "</head>"
    Response.Write "<body bgcolor='#ffffff'>"
End Sub
call BeginPage("news")

Function returTest()
  returTest = "Dette returneres.."
end Function
test = returTest()
Avatar billede mikkeljans Nybegynder
15. marts 2006 - 11:07 #8
Jeg kan stadig ikke få de funktioner til at virke..:

Functions.asp:

<%
Function BeginPage(Title)
%>
    <html>
    <head>
        <title><%=Title%></title>
    </head>
    <body bgcolor="#ffffff">
<%
End Function
%>


<%
Function EndPage()
%>
    </body>
    </html>
<%
End Function
%>


AndenFil.asp:
<%
<!--#include file="../Functions.asp"-->

BeginPage("News")
EndPage()
%>

Bare dette simple eksempel virker ikke.. Den skriver:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'BeginPage'

/News/Main.asp, line 4
Avatar billede mikkeljans Nybegynder
15. marts 2006 - 11:10 #9
'Sub' ser heller ikke ud til at virker
Avatar billede fennec Nybegynder
15. marts 2006 - 11:16 #10
Det burde virke, og jeg har lige smidt din kode ind hos mig, og der virker det fint både med function og sub....

Prøv lige at smide include filen i samme mappe, så du ikke går tilbage til parent mappen.
Avatar billede mikkeljans Nybegynder
15. marts 2006 - 11:23 #11
Det er mærkeligt det ikke gider virker.. Nu har jeg 2 filer i samme Mappe..:

Functions.asp:
<%
Sub BeginPage(Title)
    Response.Write "<html>"
    Response.Write "<head>"
    Response.Write        "<title>" & Title & "</title>"
    Response.Write "</head>"
    Response.Write "<body bgcolor='#ffffff'>"
End Sub

Sub EndPage()
    Response.Write "</body>"
    Response.Write "</html>"
End Sub
%>

Test.asp:
<%
<!--#include file="Functions.asp"-->

BeginPage("News")
EndPage()
%>

Den siger: HTTP 500 Internal Server Error
http://www.maya3d.dk/Test.asp
Avatar billede fennec Nybegynder
15. marts 2006 - 11:32 #12
Prøv at smide call foran kaldet:
Call BeginPage("News")
Call EndPage()
Avatar billede mikkeljans Nybegynder
15. marts 2006 - 11:36 #13
Har jeg prøvet.. Men tror jeg ved hvad der er galt..
<!--#include file="Functions.asp"-->
Skal være udenfor <% %> tegnene.. Det virkede ved første test.. Så tror det virker
Avatar billede keysersoze Guru
15. marts 2006 - 11:45 #14
du har allerede programmeret alt hvad man kan i ASP? det er egentlig ret imponerende hvis du ikke ved hvordan man kan se fejl i ASP;

funktioner -> indstillinger -> avanceret -> fjern kryds i "vis meddelelse om uskadelige http-fejl"

Det er så godt som umuligt at lave noget ud den indstilling...
Avatar billede fennec Nybegynder
15. marts 2006 - 11:49 #15
Havde jeg ikke set, men ja include skal være uden for <% %>

Og bare så du ved det, så bliver alle include filer hentet ind på siden INDEN noget kode bliver afviklet. Du kan derfor ikke gøre noget i denne stil:

<!--#include file="<%= dynamiskInclude %>.asp"-->

Hvis du vil lave include dynamisk. Men det er heller ikke aktuelt i dette tilfælde, men det kunne være du fik ideen senere, også ved du nu at det ikke kan lade sig gøre :o)

Der er dog visse tilfælde, hvor man kan bruge:
if noget=noget then %>
<!--#include file="inc1.asp"-->
<%
else %>
<!--#include file="inc2.asp"-->
<%
end if

Men det er kun nå inc1/inc2 er "selv afviklende".
Avatar billede mikkeljans Nybegynder
15. marts 2006 - 12:08 #16
Tak for hjælpen.. Nu tror jeg, at jeg kan klarer resten.
Avatar billede fennec Nybegynder
15. marts 2006 - 12:15 #17
Ok, men du siger bare til hvis der er noget...
(Og tak for point)
Avatar billede keysersoze Guru
15. marts 2006 - 14:16 #18
hmmm - tak for hjælpen...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester