Avatar billede s0mmer Nybegynder
18. juni 2009 - 11:27 Der er 8 kommentarer og
1 løsning

Loop med include

Hej Eksperter,

Jeg har følgende loop som skal lave nogle forskellige includes:

            If NOT rs.EOF Then
                arrModules = Split(rs("rightlist"),"|")
               
                For c = LBound(arrModules) to UBound(arrModules)
                    If arrModules(c) = "graph" Then
                    %>
                        <!--#include file="modules/graph.asp"--><hr class='big'>
                    <%
                    Elseif arrModules(c) = "mainmovers" Then
                    %>
                        <!--#include file="modules/mainmovers.asp"--><hr class='big'>
                    <%
                    Elseif arrModules(c) = "largestrelprofit" Then
                    %>
                        <!--#include file="modules/largestrelprofit.asp"--><hr class='big'>
                    <%
                    Elseif arrModules(c) = "headlines" Then
                    %>
                        <!--#include file="modules/headlines.asp"--><hr class='big'>
                    <%
                    Elseif arrModules(c) = "ad300x250" Then
                    %>
                        <div align="center">
                        <span class="table">Annonce</span><br>
                        <!--#include file="modules/ads/ad300x250.asp"--><hr class='big'>
                        </div>
                    <%
                    End if

                Next

Men det fungerer ikke (ingen brugbar fejl, fejl et andet sted i koden - hvilket ikke er tilfældet)

Kan i hjælpe?
Avatar billede softspot Forsker
18. juni 2009 - 11:37 #1
Kan det evt. være noget med case-sensitive sammenligning af strengene? Du kan evt. sørge for at alt er lowercase inden du splitter inputtet:

  arrModules = Split(lcase(rs("rightlist")&""),"|")

NB: Jeg har lige tilføjet &"" til feltet, hvis det nu skulle være null, så vil det blive konverteret til en streng og lcase vil ikke resultere i en runtime fejl...

NB: arrays er altid nulbaseret i VBScript, så det kan ikke betale sig at bruge CPU på at kalde LBound i din løkke :-)
Avatar billede softspot Forsker
18. juni 2009 - 11:38 #2
Hmmm... hvad er det egentlig du vil opnå?
Avatar billede s0mmer Nybegynder
18. juni 2009 - 11:43 #3
Strengene jeg tester med er skrevet til formålet, så det burde ikke være problemet.

Jeg har en søjle hvor jeg gerne vil inkludere nogle moduler i den rigtige rækkefølge. Og rækkefølgen kommer så fra databasen (rs("rightlist"))..
Avatar billede softspot Forsker
18. juni 2009 - 12:02 #4
OK, men hvad indeholder de includes (funktioner som bliver kaldt, rå HTML-kode eller noget tredie)?

Hvis at includes bliver lagt i ASP-siden INDEN den fortolkes af ASP, dvs. indholdet af includefilerne findes allerede i alle dine if-sætninger, på det tidspunkt hvor koden køres...

Hvis du skal inkludere noget i en bestemt rækkefølge, skal du enten lægge indholdet i funktioner som udskriver indholdet på det tidspunkt hvor funktionen kaldes, eller "inkludere" indholdet med Server.Execute...
Avatar billede s0mmer Nybegynder
18. juni 2009 - 12:08 #5
De includes indeholder både html og funktioner..

Kan du komme med eksempel på hvordan jeg så kunne gøre det?
Avatar billede softspot Forsker
18. juni 2009 - 12:29 #6
Umiddelbart er du nok nød til at splitte includefilerne op, da funktioner ikke er tilgængelige hvis du "inkluderer" dem med Server.Execute. Alternativt skal du lægge alt i funktioner og så blot inkludere filerne i toppen af dit script og kalde funktionerne i din løkke.

Opslittet include og HTML:

<!--#include file="modules/graph.asp"-->
<!--#include file="modules/mainmovers.asp"-->
<!--#include file="modules/largestrelprofit.asp"-->
<!--#include file="modules/headlines.asp"-->
<!--#include file="modules/ads/ad300x250.asp"-->

If NOT rs.EOF Then
  arrModules = Split(rs("rightlist"),"|")
               
  For c = 0 to UBound(arrModules)
    If arrModules(c) = "graph" Then
      Server.Execute "graph.x.asp"
      %><hr class='big'><%

    Elseif arrModules(c) = "mainmovers" Then
      Server.Execute "mainmovers.x.asp"
      %><hr class='big'><%

    Elseif arrModules(c) = "largestrelprofit" Then
      Server.Execute "mainmovers.x.asp"
      %><hr class='big'><%

    Elseif arrModules(c) = "headlines" Then
      Server.Execute "headlines.x.asp"
      %><hr class='big'><%

    Elseif arrModules(c) = "ad300x250" Then
      %><div align="center">
      <span class="table">Annonce</span><br><%
      Server.Execute "ad300x250.x.asp"
      <hr class='big'></div><%

    End if
Next

hvor "....x.asp"-filerne er selve den HTML-kode der skal vises og includefilerne ligger i toppen.

Tilsvarende kan det gøres hvor HTML-koden er pakket ind i funktioner, hvor Server.Execute-kaldene blot udskiftes med funktionskald til funktionerne i include-filerne.

Det er ikke engang sikkert at Server.Execute kan benyttes, hvis du f.eks. i din HTML-kode har kald til de funktioner som findes i includefilerne, så skal de også inkluderes i "...x.asp"-filer for at der er adgang til funktionerne.

Det kan muligvis struktureres, så du kan benytte Server.Execute, men det kommer meget an på hvad der ligger i din includefiler og hvor du ellers benytter funktionerne i disse include-filer...
Avatar billede s0mmer Nybegynder
19. juni 2009 - 00:46 #7
softspot > Jeg fik det til at virke med server execute, jeg takker mange gange :) smid et svar og du får points
Avatar billede softspot Forsker
19. juni 2009 - 09:05 #8
Velbekomme :-)
Avatar billede softspot Forsker
19. juni 2009 - 09:34 #9
Tak for point :-)
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