Avatar billede steen_hansen Forsker
11. november 2005 - 20:02 Der er 29 kommentarer og
1 løsning

Bestem hvilken mappe?

Hvis jeg vil finde ud af hvilken mappe/på hvilket niveau/hvor i contexten jeg befinder mig, hvad skal jeg så bruge? Jeg tænker på Request.ServerVariables(".....")

Jeg kunne godt tænke mig at finde ud af, når man befinder sig på et givent niveau:

www.MyDomain.dk

    Mappe1
        Undermappe 1
        Undermappe 2
            Undermappe 2.1
            Undermappe 2.2
                Undermappe 3.1
        Undermappe 3
        Undermappe 4

Hvis jeg befinder mig i Undermappe 2 med tilørende undermapper, vil jeg gerne kunne bestemme det også. Det er lidt kryptisk at skulle forklare, og sikkert også lidt kringlet at skulle forstå, men jeg vil gerne kunne vedhæfte de samme værdier til en given ting, uanset om man befinder sig i Undermappe 2, Undermappe 2.2 eller Undermappe 3.1

Håber du forstår hvor jeg vil hen. Ellers så spørg :)
Avatar billede softspot Forsker
11. november 2005 - 20:29 #1
Tænker du på den fysiske sti på serverdisken, for så kan du benytte

Server.MapPath(".")
Avatar billede softspot Forsker
11. november 2005 - 20:30 #2
...men prøv at tage et kig her, hvis du vil vide mere om hvilke muligheder du har ifht. ServerVariables: http://www.w3schools.com/asp/coll_servervariables.asp
Avatar billede steen_hansen Forsker
11. november 2005 - 21:22 #3
Hvor er jeg glad for at se dig, softspot :)

Kan du huske spørgsmålet fra i går? Der er jo åbenlyse problemer med at bibeholde sessionen på tværs af subdomænerne. Derfor er jeg gået bort fra dem, og vil istedet for lægge dem i mapper på domænet.

Hvis ikke du kan huske det: http://www.eksperten.dk/spm/662984

Det jeg søger, er en erstatning for Request.ServerVariables("SERVER_NAME")
Avatar billede softspot Forsker
12. november 2005 - 11:36 #4
Du kan jo i princippet bruge den sti som servervariables("PATH_INFO") returnerer og så bare checke om den starter med den sti som du vil vide om du befinder dig på, f.eks.

curPath = lcase(request.servervariables("PATH_INFO"))
if left(curPath,20) = "/mappe1/undermappe1/" then
  ' så er du i undermappe 1
elseif left(curPath,20) = "/mappe1/undermappe2/" then
  ' så er du i undermappe 2
elseif left(curPath,20) = "/mappe1/undermappe3/" then
  ' så er du i undermappe 3
end if
Avatar billede steen_hansen Forsker
12. november 2005 - 20:37 #5
Ser fornuftigt ud, men det eneste, der skal tjekkes på, er de mapper, der ligger på et givent niveau, så indholdet i alle underliggende mapper også kan styles på en bestemt måde.

De mapper, der ligger på det givne niveau (og indholdet i de tilhørende undermapper), skal altså styles på en bestemt måde.

For ikke at have 35435357 mapper på rodniveu, lægger jeg de sider, som er underlagt et medlemlogin, ind i mappen "members". Alt hvad der ligger i

/members/personal/ + samtlige underliggende sider til personal

- skal styles på en bestemt måde. Alt hvad der ligger i

/members/debate/ + samtlige underliggende sider

- skal styles på en bestemt måde etc.




Sorry, jeg fik kigget din kommentar fra 12/11-2005 11:36:16 ordentligt igennem, og det ser ud til at være det jeg ønsker. Vender lige tilbage :)
Avatar billede steen_hansen Forsker
12. november 2005 - 22:18 #6
Jeg har lavet dette:

<%
    Dim CurrentPath
    CurrentPath = LCase(Request.Servervariables("PATH_INFO"))

    If LCase(Left(CurrentPath,20)) = "/members/" Then
        strCSS = "style"
    ElseIf LCase(Left(CurrentPath,20)) = "/members/personal/" Then
        strCSS = "personal"
    End If
%>

<html>

<head>
<link rel="stylesheet" type="text/css" href="/includes/<%=strCSS%>.css">
</head>

<body>

<%=CurrentPath%>

</body>

</html>

Men variablen bliver ikke overført? Jeg har tjekket scriptet, og det ser ud til at fungere: CurrentPath = /members/personal/default.asp, men jeg kan ikke udskrive strCSS.
Avatar billede steen_hansen Forsker
12. november 2005 - 22:19 #7
Når jeg kigger i kildekoden, bliver strCSS ikke skrevet ud, og siden bliver selvfølgelig ikke stylet:

<link rel="stylesheet" type="text/css" href="/includes/.css">
Avatar billede softspot Forsker
12. november 2005 - 22:25 #8
Du skal tilpasse længden i left til den streng du checker på ("/members/" er jo ikke 20 tegn lang):

If LCase(Left(CurrentPath,9)) = "/members/" Then

Vær i øvrigt opmærksom på præcedens i dine check, dvs. lange stier skal måske checkes før de korte (hvis du vil have at dybe stier skal identificeres frem for knap så dybe stier).
Avatar billede steen_hansen Forsker
12. november 2005 - 22:36 #9
Så dæmrer det, tror jeg :)

Dvs. jeg kan ikke nøjes med at lave et tjek på /niveau1/niveau2/, men jeg skal lave et tjek for hvert niveau? Som for eksempel på /niveau1//niveau2/niveau3/niveau4/ osv?

Jeg prøver lige at lege lidt med den eksisterende Select Case, det må kunne flettes ind der?
Avatar billede softspot Forsker
12. november 2005 - 22:41 #10
Njaaah, den er lidt sværere fordi det du skal checke op mod ikke er konstant for alle betingelser, hvilket select case jo forventer. Men det er sikkert ikke umuligt (jeg kan bare ikke lige komme i tanke om en smart måde at bruge select case i denne sammenhæng).
Avatar billede steen_hansen Forsker
12. november 2005 - 22:50 #11
Du har ret, det er ikke så smart.

Har du en idé til hvordan man nemmest angiver hvilket stylesheet, der skal anvendes?

Grunden til, at jeg vil lave det på denne måde, er fordi jeg benytter et "startdokument" og et slutdokument til samtlige sider, for at få det ens fra ende til anden. Det er også meget nemmere, hvis man skal foretage ændringer. Retter du styles, bredde etc. på de 2 sider, slår det jo igennem på samtlige sider. For det første er det lynhurtigt. For det andet kan jeg være sikker på, at jeg ikke glemmer nogen dokumenter, eftersom de alle benytter samme skabeloner. Og for det tredie er det uhyre tidsbesvarende.

I startdokumentet inkluderer jeg header.asp, som indeholder

<link rel="stylesheet" type="text/css" href="/includes/css/<%=strCSS%>.css">

Mit ønske er, at hvis man befinder sig i

/members/personal/

skal personal.css benyttes på alt hvad der ligger i mappen personal, og samtlige undermapper, og undermapper til undermapperne. Kort sagt, ALT hvad der måtte ligge i mappen personal.

Jeg troede ikke det krævede så meget, jeg sætter point op.
Avatar billede steen_hansen Forsker
12. november 2005 - 22:52 #12
Retter lige de 3 fordele til 2: Tidsbesparende og sikkert. Du ved nok hvad jeg mener :)
Avatar billede softspot Forsker
12. november 2005 - 23:01 #13
Ikke nødvendigt at sætte point op :)

Jeg har et forslag til hvordan du kan bruge select case alligevel. Det indebærer en lille ekstra funktion, som bare gør udtrykkene i case-sætningerne kortere og så gør det brug af en lidt omvendt (men lov - såvidt jeg ved) notation i select case-sætningen. Det kommer til at se nogenlunde således ud:

function startsWith(strCheck, strStart)
  startsWith = lcase(left(strCheck, len(strStart))) = lcase(strStart)
end function

curPath = lcase(request.servervariables("PATH_INFO"))
select case true
  case startsWith(curPath, "/mappe1/undermappe1/")
    ' så er du i undermappe 1

  case startsWith(curPath, "/mappe1/undermappe2/")
    ' så er du i undermappe 2

  case startsWith(curPath, "/mappe1/undermappe3/")
    ' så er du i undermappe 3

end select
Avatar billede steen_hansen Forsker
12. november 2005 - 23:13 #14
Jo, det er nødvendigt, jeg trækker temmelig kraftigt på dine ressourcer :)

Jeg har rem'et 12/11-2005 22:18:26 ud, og forsøger med den nye Select Case, men den tager stadigvæk fat i style.css istedet for personal.css :/
Avatar billede steen_hansen Forsker
12. november 2005 - 23:16 #15
function StartsWith(strCheck, strStart)
        StartsWith = LCase(left(strCheck, len(strStart))) = LCase(strStart)
    end function

    CurrentPath = LCase(Request.Servervariables("PATH_INFO"))
    Select Case True
        Case StartsWith(CurrentPath, "/members/")
            strCSS = "style"

        Case StartsWith(CurrentPath, "/members/personal/")
            strCSS = "personal"

    End Select
Avatar billede softspot Forsker
12. november 2005 - 23:19 #16
Ja, det var det der med præcedens jeg snakkede om tidligere (tror jeg nok :)). Det viser sig i praksis her, fordi du checker for /members/ inden du checker for /members/personal/ og den første matcher jo, så derfor bliver der ikke checket mere...
Avatar billede steen_hansen Forsker
12. november 2005 - 23:27 #17
Aaahhhhh! Døden har altid en årsag, prøver lige igen :)
Avatar billede steen_hansen Forsker
12. november 2005 - 23:29 #18
Smid et svar :)
Avatar billede softspot Forsker
12. november 2005 - 23:31 #19
Det kom der! :D
Avatar billede steen_hansen Forsker
12. november 2005 - 23:31 #20
Takker. Bedste ven :)
Avatar billede softspot Forsker
12. november 2005 - 23:33 #21
Velbekomme - og tak for point :)
Avatar billede softspot Forsker
12. november 2005 - 23:33 #22
...og tak for de rosende ord ;-)
Avatar billede steen_hansen Forsker
12. november 2005 - 23:38 #23
De er velfortjente :)
Avatar billede steen_hansen Forsker
12. november 2005 - 23:55 #24
Den funktion erstatter så også http://exp.dk/spm/662984 - fedest! :)
Avatar billede softspot Forsker
13. november 2005 - 00:01 #25
Var det ikke netop formålet med dette spørgsmål...? :)
Avatar billede steen_hansen Forsker
13. november 2005 - 00:06 #26
Jo, hvis det kunne lade sig gøre. Det er en god erstatning for tjekket på subdomænerne. Nu kan det differencieres på de contexten i stedet for på domænerne, som jeg ikke kan få overført sessionen imellem. Rigtig godt gået :)
Avatar billede softspot Forsker
13. november 2005 - 00:09 #27
Godt du er tilfreds med løsningen... :)
Avatar billede steen_hansen Forsker
13. november 2005 - 00:10 #28
Prøver lige igen (er ved at være træt):

Jo, hvis det kunne lade sig gøre. Det er en god erstatning for tjekket på subdomænerne. Nu kan det differencieres på de enkelte mapper på domænet, i stedet for subdomænerne, som jeg ikke kan få overført sessionen imellem. Rigtig godt gået - og jeg håber stadig du forstår hvad jeg mener :D
Avatar billede steen_hansen Forsker
13. november 2005 - 00:11 #29
Det er jeg, meget :)

Det er nok ikke sidste gang vi snakkes. Hygge! :)
Avatar billede softspot Forsker
13. november 2005 - 00:12 #30
Tak i lige måde :)
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