Avatar billede bodyguard Nybegynder
14. marts 2011 - 13:27 Der er 4 kommentarer og
1 løsning

Bread Crums - problemer med script

Hej Eksperter,

Jeg har et "bread crums" script som angiver dokumentstien ud fra de fysiske mapper.

Problemet er bare at når man kommer til andet "led" så glemmer linket mappen foran.

Så hvis den fysiske sti hedder: www.testurl.dk/mappe1/mappe2
så udskriver scriptet linket www.testurl.dk/mappe2 ...

<%
lstrPathAry = Split(Request.ServerVariables("PATH_INFO"), "/")

  llngMaxIndex = UBound(lstrPathAry) - 1

  lstrPath = "/"
  Response.Write "<a href=""" & lstrPath & """ id=""ctl00_BreadCrumb1_LinkForside"" title=""Forside"">Forside</a>"

  For llngIndex = 1 To llngMaxIndex
    Server.URLPathEncode(lstrPathAry(llngIndex)) & "/"
    sti = Server.HTMLEncode(lstrPathAry(llngIndex))
    info = Replace(sti, "_", "&nbsp;")
    info = Replace(info, "oe", "&oslash;")
    info = Replace(info, "ae", "&aelig;")
    info = Replace(info, "aa", "&aring;")
    Response.Write "&nbsp;&rsaquo;&nbsp;<a href=""" & lstrPath & ""& Server.HTMLEncode(lstrPathAry(llngIndex)) &""">" & info & "</a>"
  Next
  Response.Write "&nbsp;&rsaquo;&nbsp;" & titel
%>
Avatar billede softspot Forsker
14. marts 2011 - 13:37 #1
Jeg tror det skyldes at arrays er nulbaseret og du starter ved indeks 1 (så du springer det første element over). Derfor tror jeg du skal ændre denne linie:

For llngIndex = 1 To llngMaxIndex

til

For llngIndex = 0 To llngMaxIndex
Avatar billede bodyguard Nybegynder
14. marts 2011 - 14:55 #2
Scriptet udskriver f.eks. rigtigt nok stien, men i andet niveau tager den ikke den forudgående mappe med...
Avatar billede softspot Forsker
14. marts 2011 - 15:33 #3
Prøv denne sub i stedet for din kodestump. Parametrene er path_info og titlen på selve siden i krummerne:

<%
sub VisBreadCrumb(path, titel)
  dim lstrPathAry, llngIndex, llngMaxIndex, lstrPath, curSubPath, sti, info
 
  lstrPathAry = Split(path, "/")

  llngMaxIndex = UBound(lstrPathAry) - 1
 
  lstrPath = "/"
  Response.Write "<a href=""" & lstrPath & """ " & _
            "id=""ctl00_BreadCrumb1_LinkForside"" " & _
            "title=""Forside"">Forside</a>"

  curSubPath = lstrPath
  For llngIndex = 1 To llngMaxIndex
    sti = Server.HTMLEncode(Server.URLPathEncode(lstrPathAry(llngIndex)))
    info = Replace(sti, "_", "&nbsp;")
    info = Replace(info, "oe", "&oslash;")
    info = Replace(info, "ae", "&aelig;")
    info = Replace(info, "aa", "&aring;")
    curSubPath = curSubPath & sti & "/"
    Response.Write "&nbsp;&rsaquo;&nbsp;<a href=""" & curSubPath & """>" & info & "</a>"
  Next
  Response.Write "&nbsp;&rsaquo;&nbsp;" & titel
end sub
%>

Du kalder blot funktionen det sted på siden, hvor du vil have brødkrummerne indsat og sender de relevante parametre med i kaldet.

Eksempel:

<% call VisBreadCrumb(Request.ServerVariables("PATH_INFO"), "sidens titel") %>
Avatar billede bodyguard Nybegynder
15. marts 2011 - 09:59 #4
Softspot, jeg kunne umiddelbart ikke få dit script til at virke...

Men jeg kom på en anden om lidt mere simpelløsning:

[c]
strUrl = strUrl & Server.URLPathEncode(lstrPathAry(llngIndex)) & "/"
[/c]


Den samlede kode:
[c]
<%
lstrPathAry = Split(Request.ServerVariables("PATH_INFO"), "/")

  llngMaxIndex = UBound(lstrPathAry) - 1

  lstrPath = "/"
  Response.Write "<a href=""" & lstrPath & """ id=""ctl00_BreadCrumb1_LinkForside"" title=""Forside"">Forside</a>"

  For llngIndex = 1 To llngMaxIndex
    Server.URLPathEncode(lstrPathAry(llngIndex)) & "/"
    strUrl = strUrl & Server.URLPathEncode(lstrPathAry(llngIndex)) & "/"
    sti = Server.HTMLEncode(lstrPathAry(llngIndex))
    info = Replace(sti, "_", "&nbsp;")
    info = Replace(info, "oe", "&oslash;")
    info = Replace(info, "ae", "&aelig;")
    info = Replace(info, "aa", "&aring;")
    Response.Write "&nbsp;&rsaquo;&nbsp;<a href=""" & lstrPath & ""& strUrl &""">" & info & "</a>"
  Next
  Response.Write "&nbsp;&rsaquo;&nbsp;" & titel
%>
[/c]
Avatar billede softspot Forsker
15. marts 2011 - 12:13 #5
Jeg har lidt svært ved at se at den løsning er mere simpel end den jeg foreslog (som i øvrigt fungerede fint her hos mig da jeg testede den). Du gør umiddelbart det samme som jeg foreslog blot i en lidt anden sekvens...

Jeg har stadig svært ved at se hvad formålet med denne linje er:

Server.URLPathEncode(lstrPathAry(llngIndex)) & "/"

Der returneres en streng fra URLPathEncode som du vælger at smide væk med det samme og ikke bruge til noget!

For mig at se har du ikke helt styr på hvad koden gør og vælger så at gå efter en løsning, som er dårligere struktureret og sværere at teste - for så at beholde point selv, men hvad mere vigtigt er, undlade at anerkende de rettelser jeg har givet dig... det er ikke i ekspertens ånd.
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