Avatar billede steen_hansen Forsker
09. november 2005 - 10:44 Der er 23 kommentarer og
1 løsning

Hvordan laves funktionen mest hensigtsmæssigt - SERVER_NAME?

Det er en gang imellem lidt svært at lave en sigende overskrift, når div. kriterier er sat op :/

Jeg er igang med at lave en menu med alle hovedområderne (subdomæerne). Det er meningen, at der skal være en eller anden form for effekt, når man befinder sig på et givent sub/domæne. Hvis man befinder sig på

www.MyDomain.dk

skal class (CSS) sættes til noget. Hvis man ikke befinder sig på den side, skal class sættes til noget andet.

Nu forsøger jeg mig med Select Case, men kan ikke lige finde en fornuftig måde at lave det på. Det foreløbige resultat:

<%
    Dim strMainArea, strMainArea1, strMainArea2, strMainArea3
    strMainArea = Request.ServerVariables("SERVER_NAME")
    strMainArea1 = "www.SubDomain1.MyDomain.dk"
    strMainArea2 = "www.SubDomain2.MyDomain.dk"
    strMainArea3 = "www.SubDomain3.MyDomain.dk"

    Select Case strMainArea
        Case MainArea1
            If strMainArea = strMainArea1 Then
                vClass = "bannermenuactive"
            Else
                vClass = "bannermenu"
            End If
        Case MainArea2
            If strMainArea = strMainArea2 Then
                vClass = "bannermenuactive"
            Else
                vClass = "bannermenu"
            End If
        Case MainArea3
            If strMainArea = strMainArea3 Then
                vClass = "bannermenuactive"
            Else
                vClass = "bannermenu"
            End If
    End Select
%>

<a href="...." class="<%=vClass%>">Link</a>

Men nu får linket ikke tilknyttet nogen class overhovedet. Ville det være mere hensigtsmæssigt med

If ..... Then
    .....
ElseIf
    .....
ElseIf
    .....
End If
Avatar billede softspot Forsker
09. november 2005 - 10:59 #1
Du kan bare tilføje en case else som en fall through, hvor du kan sætte en default-klasse.

    Select Case strMainArea
        Case MainArea1
            If strMainArea = strMainArea1 Then
                vClass = "bannermenuactive"
            Else
                vClass = "bannermenu"
            End If
        Case MainArea2
            If strMainArea = strMainArea2 Then
                vClass = "bannermenuactive"
            Else
                vClass = "bannermenu"
            End If
        Case MainArea3
            If strMainArea = strMainArea3 Then
                vClass = "bannermenuactive"
            Else
                vClass = "bannermenu"
            End If
        Case Else
            vClass = "bannermenu"
    End Select
Avatar billede softspot Forsker
09. november 2005 - 11:01 #2
Faktisk ville det nok være mere direkte at benytte denne:

    Select Case strMainArea
        Case strMainArea1, strMainArea2, strMainArea3
            vClass = "bannermenuactive"
        Case Else
            vClass = "bannermenu"
    End Select
Avatar billede steen_hansen Forsker
09. november 2005 - 11:05 #3
Ser dælme fornuftigt ud, men mangler der ikke sammenligningen? Kan ikke gennemskue, hvordan det rent praktisk kan lade sig gøre på den måde, men jeg forsøger lige ...
Avatar billede steen_hansen Forsker
09. november 2005 - 11:09 #4
Ok, så er der sat class på, men de har alle bannermenuactive.

Jeg skal lige skynde mig at sige, at jeg skal have tilføjet flere ting til hvert hovedområde:

strMainArea1:
strMenuTitle = "Tekst 01"

strMainArea2:
strMenuTitle = "Tekst 02"

strMainArea3:
strMenuTitle = "Tekst 03"

osv.
Avatar billede softspot Forsker
09. november 2005 - 11:10 #5
Du kunne i dette tilfælde ligeså godt have gjort sådan her:

If strMainArea = strMainArea1 or strMainArea = strMainArea2 or strMainArea = strMainArea3 Then
  vClass = "bannermenuactive"
Else
  vClass = "bannermenu"
End If


men det bliver hurtigt tydelig hvorfor en select case er bedre med mange betingelser (der skal ikke mange flere subdomæner på den if, før den bliver helt umulig at have med at gøre)...
Avatar billede steen_hansen Forsker
09. november 2005 - 11:12 #6
Det kunne jeg, men så ville det måske være mere hensigtsmæssigt at bruge ElseIf?
Avatar billede softspot Forsker
09. november 2005 - 11:12 #7
Ja, så er select case'n nok det bedste valg - og i dette format:

    Select Case strMainArea
        Case strMainArea1
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 01"

        Case strMainArea2
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 02"

        Case strMainArea3
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 03"

        Case Else
            vClass = "bannermenu"
    End Select
Avatar billede steen_hansen Forsker
09. november 2005 - 11:16 #8
Nu ligner det noget (strMenuTitle kommer på), men alle har nu fået bannermenuactive :o/
Avatar billede softspot Forsker
09. november 2005 - 11:20 #9
Du kan vel bare ændre vClass til det den skal være i de forskellige subdomæner... det er vel derfor du ville lave denne forgrening i første omgang - eller har jeg misforstået hvad det er du forsøger?
Avatar billede steen_hansen Forsker
09. november 2005 - 11:25 #10
Hvis jeg befinder mig på www.SubDomain1.MyDomain.dk, skal class sættes til bannermenuactive. Resten skal have class="bannermenu".
Avatar billede steen_hansen Forsker
09. november 2005 - 11:26 #11
.. og det er da også det dit script laver, så vidt jeg kan se ...?
Avatar billede steen_hansen Forsker
09. november 2005 - 11:35 #12
Og vi er enige om, at hele scriptet ser således ud:

<%
    Dim strMainArea, strMainArea1, strMainArea2, strMainArea3
    strMainArea = Request.ServerVariables("SERVER_NAME")
    strMainArea1 = "www.SubDomain1.MyDomain.dk"
    strMainArea2 = "www.SubDomain2.MyDomain.dk"
    strMainArea3 = "www.SubDomain3.MyDomain.dk"


    Select Case strMainArea
        Case strMainArea1
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 01"

        Case strMainArea2
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 02"

        Case strMainArea3
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 03"

        Case Else
            vClass = "bannermenu"
    End Select
%>
Avatar billede softspot Forsker
09. november 2005 - 11:42 #13
Jeg vil jo påstå at vClass bliver sat til bannermenuactive i de tilfælde hvor domænet er www.SubDomain1.MyDomain.dk, www.SubDomain2.MyDomain.dk og www.SubDomain3.MyDomain.dk. Hvis det skal være som du skriver i 09/11-2005 11:25:53 (altså helt stringent), så skal du skrive sådan her:


<%
    Dim strMainArea, strMainArea1, strMainArea2, strMainArea3
    strMainArea = Request.ServerVariables("SERVER_NAME")
    strMainArea1 = "www.SubDomain1.MyDomain.dk"
    strMainArea2 = "www.SubDomain2.MyDomain.dk"
    strMainArea3 = "www.SubDomain3.MyDomain.dk"


    Select Case strMainArea
        Case strMainArea1
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 01"

        Case strMainArea2
            vClass = "bannermenu"
            strMenuTitle = "Tekst 02"

        Case strMainArea3
            vClass = "bannermenu"
            strMenuTitle = "Tekst 03"

        Case Else
            vClass = "bannermenu"
    End Select
%>
Avatar billede steen_hansen Forsker
09. november 2005 - 11:46 #14
Er det ikke identisk med 09/11-2005 11:35:58?
Avatar billede softspot Forsker
09. november 2005 - 11:56 #15
Nej, vClass er forskellig i de to midterste case-sætninger :)
Avatar billede steen_hansen Forsker
09. november 2005 - 11:58 #16
strMainArea bliver fastsat v.hj.a. Request.ServerVariables("SERVER_NAME")


----------------------
Select Case strMainArea

er det samme som

Select Case "www.SubDomain2.MyDomain.dk"
----------------------
Case strMainArea2

er det samme som, strMainArea2 = strMainArea

Derfor skal vClass være lige med bannermenuactive
----------------------
Derfor skal strMainArea1 og strMainArea3 være lig med bannermenu
----------------------

Er det ikke sådan det hænger sammen?
Avatar billede steen_hansen Forsker
09. november 2005 - 12:02 #17
Ok, hvis de midterste er sat til bannermenu, skal de forskellige kombinationsmuligheder listes op også?

Har lige prøvet at sætte bannermenu ind i de 2 midterste - samme resultat :o/

    Select Case strMainArea
        Case strMainArea1
            vClass = "bannermenuactive"
            strMenuTitle = "Tekst 01"

        Case strMainArea2
            vClass = "bannermenu"
            strMenuTitle = "Tekst 02"

        Case strMainArea3
            vClass = "bannermenu"
            strMenuTitle = "Tekst 03"

        Case Else
            vClass = "bannermenu"
    End Select
Avatar billede softspot Forsker
09. november 2005 - 12:07 #18
Aaaaahaaaaa! :)

Jamen, så skal du vel have en separat variabel til hver tilstand/domæne (det er vel for at style 3 forskellige links, eller hvad)...(?)

<%
    Dim strMainArea, strMainArea1, strMainArea2, strMainArea3
    strMainArea = Request.ServerVariables("SERVER_NAME")
    strMainArea1 = "www.SubDomain1.MyDomain.dk"
    strMainArea2 = "www.SubDomain2.MyDomain.dk"
    strMainArea3 = "www.SubDomain3.MyDomain.dk"


    Select Case strMainArea
        Case strMainArea1
            vClass1 = "bannermenuactive"
            vClass2 = "bannermenu"
            vClass3 = "bannermenu"
            strMenuTitle = "Tekst 01"

        Case strMainArea2
            vClass1 = "bannermenu"
            vClass2 = "bannermenuactive"
            vClass3 = "bannermenu"
            strMenuTitle = "Tekst 02"

        Case strMainArea3
            vClass1 = "bannermenu"
            vClass2 = "bannermenu"
            vClass3 = "bannermenuactive"
            strMenuTitle = "Tekst 03"

        Case Else
            vClass1 = "bannermenu"
            vClass2 = "bannermenu"
            vClass3 = "bannermenu"
    End Select
%>
Avatar billede softspot Forsker
09. november 2005 - 12:10 #19
Hvis det ikke er det, så HAR jeg altså misforstået hvad du forsøger :(

Jeg forventer at dine links ser nogenlunde således ud:

<a href="www.sd1.md.dk" class="<%=vClass1%>">Subdomain 1</a>
<a href="www.sd2.md.dk" class="<%=vClass2%>">Subdomain 2</a>
<a href="www.sd3.md.dk" class="<%=vClass3%>">Subdomain 3</a>
Avatar billede steen_hansen Forsker
09. november 2005 - 12:18 #20
DOH! Med lidt god vilje og hjernemassen ud af frigear, kunne jeg måske godt have tænkt mig frem til det :D

Smid et svar :)
Avatar billede softspot Forsker
09. november 2005 - 12:18 #21
En barberet version af select-sætningen kunne se således ud:

<%
    Dim strMainArea, strMainArea1, strMainArea2, strMainArea3
    strMainArea = Request.ServerVariables("SERVER_NAME")
    strMainArea1 = "www.SubDomain1.MyDomain.dk"
    strMainArea2 = "www.SubDomain2.MyDomain.dk"
    strMainArea3 = "www.SubDomain3.MyDomain.dk"

    ' Sæt default-klassen
    vClass1 = "bannermenu"
    vClass2 = "bannermenu"
    vClass3 = "bannermenu"

    ' Find den klasse der skal ændres
    Select Case strMainArea
        Case strMainArea1
            vClass1 = "bannermenuactive"
            strMenuTitle = "Tekst 01"

        Case strMainArea2
            vClass2 = "bannermenuactive"
            strMenuTitle = "Tekst 02"

        Case strMainArea3
            vClass3 = "bannermenuactive"
            strMenuTitle = "Tekst 03"
    End Select
%>
Avatar billede softspot Forsker
09. november 2005 - 12:19 #22
*LOL*

Du får lige et svar her :)
Avatar billede steen_hansen Forsker
09. november 2005 - 12:20 #23
Det virker perfekt! Takker mange gange :D
Avatar billede softspot Forsker
09. november 2005 - 12:22 #24
Super! Velbekomme... :)
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