Toon posts:

[asp] response write include file probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Vanuit een array wordt de volgorde bepaald van het plaatsen van een aantal elementen.
het scriptje werkt, daar zit het probleem niet in. Mijn vraag is hoe kan ik ervoor zorgen dat de response.write (wat wel het juiste neerzet) ook rendert als asp code, nu verwchijnt het alleen in tekstuele vorm in de htmlo code maar niet als code uitgevoerd.
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%
Dim myArrayIn(3,2)
'myArray(col,row) nieuws,agenda,forum,documenten,links,leden
myArrayIn(0,0) = resultaatComm("nieuwsNaam")
myArrayIn(1,0) = resultaatComm("zichtbaar_nieuws")
myArrayIn(2,0) = resultaatComm("volgorde_nieuws")
myArrayIn(3,0) = "include_nieuws_home.asp"
myArrayIn(0,1) = resultaatComm("agendaNaam")
myArrayIn(1,1) = resultaatComm("zichtbaar_agenda")
myArrayIn(2,1) = resultaatComm("volgorde_agenda")
myArrayIn(3,1) = "include_agenda_home.asp"
myArrayIn(0,2) = resultaatComm("forumNaam")
myArrayIn(1,2) = resultaatComm("zichtbaar_forum")
myArrayIn(2,2) = resultaatComm("volgorde_forum")
myArrayIn(3,2) = "include_forum_home.asp"

ArEvents = arraySort( myArrayIn, 2, false )

For i = 0 to UBound(myArrayIn,2) 
If myArrayIn(1,i) = "ja" THEN
Response.Write "<!--#include file="&myArrayIn(3,i)&"-->"
END IF
Next 
%>

Verwijderd

Lijkt me een header probleempje, verstuur je wel de juiste header met juiste content-type?

Verwijderd

Topicstarter
De rest van de pagina renderd prima, deze bevat ook een aantal ander includes. Deze zijn echter hard in de code gezet en worden als zodanig ook afgehandeld. Zelf denk ik dat het de response.write is die van de string een tekst string maakt ipv asp code.

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Includes worden geincluded voordat de asp code geparst gaat worden, je kunt dus niet dynamisch includen.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
mmm, das jammer...iemand al een trucje bedacht? ben vast niet de eerste die dit wil proberen toch!

Verwijderd

Je kunt proberen om via het MSXML2.ServerXMLHTTP object het resultaat van die asp pagina's uit te lezen.

Verwijderd

Topicstarter
heb het maar zo opgelost of is dit een vieze manier?

ASP:
1
2
3
4
5
6
7
For i = 0 to UBound(myArrayIn,2) 
If myArrayIn(1,i) = "ja" THEN
IF myArray(0,i) = resultaatComm("nieuwsNaam") THEN %><!--#include file="include_nieuws_home.asp"--><%END IF
IF myArray(0,i) = resultaatComm("agendaNaam") THEN %><!--#include file="include_agenda_home.asp"--><%END IF
IF myArray(0,i) = resultaatComm("forumNaam") THEN %><!--#include file="include_forum_home.asp"--><%END IF
END IF
Next

Verwijderd

Je kunt ook die include-bestanden allemaal includen, en de inhoud in Functions plaatsen.
Vervolgens die Functions vanuit de IF/THEN aanroepen. Da's iets eleganter.

Verwijderd

Verwijderd schreef op dinsdag 06 september 2005 @ 10:45:
Je kunt ook die include-bestanden allemaal includen, en de inhoud in Functions/Subs plaatsen.
Vervolgens die Functions/Subs vanuit de IF/THEN aanroepen. Da's iets eleganter.

[ Voor 2% gewijzigd door Verwijderd op 06-09-2005 10:46 . Reden: dat had een edit moeten zijn :P ]


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Let er wel op dat _alle_ bestanden worden geincluded. Ze worden niet allemaal uitgevoerd, maar ze komen wel alle in de asp code. Dit kan bijvoorbeeld problemen geven met dubbele declaraties in alle bestanden. Je moet je code dus echt bekijken alsof de inhoud van al de include bestanden zo in je pagina staat.

Ik zou geen betere manier weten om dit te doen. XMLHTTP zou ik ook niet doen omdat je dan voor iedere pagina weer een reguest moet maken. Je kun met execute nog wel iets, maar dat is helemaal een ranzige functie.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Met deze code is het mogelijk om files dynamisch te includen. De originele code komt van de site van 4GuysFromRolla, waarin ik een paar kleine bugjes heb opgelost.

opmerkingen :
- Gebruik : DynamicInclude(<filename>)
- Included code is moeilijk te debuggen, omdat de fout optreedt bij de Execute in onderstaande code
- Uiteindelijke source is af en toe slecht te lezen, vanwege problemen met newlines etc. Ik heb getracht dat enigzins op te lossen door de functie StripSpaces toe te voegen, maar perfect is het niet.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<%
Function getMappedFileAsString(byVal strFilename)
  Const ForReading = 1
  Dim fso,ts

  Set fso = Server.CreateObject("Scripting.FilesystemObject")
  Set ts = fso.OpenTextFile(Server.MapPath(strFilename), ForReading)

  getMappedFileAsString = ts.ReadAll
  ts.close
  
  Set ts = nothing
  Set fso = Nothing
End Function

function fixInclude(content)
   out=""
   content = replace(content,"<%=",vbcrlf & "<% response.write ")
   'position for  aspStartTag
   pos1=instr(content,"<" & "%")

   'position for aspEndTag
   pos2=instr(content,"%"& ">")

   'if there exists aspStartTag
   if pos1>0 then

      'text content  before aspStartTag
      before= mid(content,1,pos1-1)

      'remove linebreaks
      before=replace(before,vbcrlf,"")

      'put content into a response.write
      ' 2005-07-22 Aanpassing zodat " -> "" in HTML code in de file
      before=vbcrlf & "response.write "" " & trim(replace(before,"""","""""")) & """" & vbcrlf

      'get code content between aspStartTag  and  aspEndTag
      middle= mid(content,pos1+2,(pos2-pos1-2))

      'get text content after aspEndTag
      after=mid(content,pos2+2,len(content))

      'recurse through the rest
      out=before & middle & vbcrlf & fixInclude(after)

   'did not find any aspStartTags
   else
      'remove linebreaks in file
      content=replace(content,vbcrlf,"")
      content=replace(content,"""","""""")
      out=vbcrlf & "response.write""" & content &""""
   end if
   
   fixInclude=out
   
end function

Function stripSpaces(tekst)
  ' converteerd tabs naar spaties, en zet meervoudige spaties om naar 1 enkele
  ' Maakt de uiteindelijk source kleiner en iets beter te lezen
  Dim oRegExp
  Set oRegExp = New RegExp
  
  oRegExp.IgnoreCase = True
  oRegExp.Global = True
  oRegExp.Pattern = "\t"
  tekst = oRegExp.Replace(tekst, " ")
  
  oRegExp.Pattern = "\ {2,}"
  stripSpaces = oRegExp.Replace(tekst, " ")
  
  Set oRegExp = Nothing

End Function

sub DynamicInclude ( Filename )
  execute (stripspaces(fixInclude(getMappedFileAsString(filename))))
end sub
%>

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 18:45
Je kan Server.Execute() hiervoor mis-/gebruiken. Ik dacht dat dat wel nadelen had, maar zeker weten doe ik dat niet, is alweer een tijdje geleden...

Roomba E5 te koop


Verwijderd

Topicstarter
Bedankt Frenzy!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Je kunt beter je andere aanpak gebruiken hoor, nu moet je elke include eerst met het FSO object inlezen en daarna executen, twee zaken die allebei om performance redenen niet erg handig zijn.

Ook Server.Execute is niet handig, tijdens het parsen van de pagina moet de asp engine stoppen met de huidige pagina, de nieuwe inlezen, tussenvoegen, parsen en dan verder met de originele pagina.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Heb het nog niet helemaal lekker aan de praat, ik neig om mn eigen oplossing te gebruiken, deze lijkt prima te werken..

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 30-04 15:47

mulder

ik spuug op het trottoir

Verwijderd schreef op dinsdag 06 september 2005 @ 11:15:
[...]

Heb het nog niet helemaal lekker aan de praat, ik neig om mn eigen oplossing te gebruiken, deze lijkt prima te werken..
Tja je ontkomt niet aan een vieze oplossing. Bedenk dat op jou manier toch alle includes worden gecompileerd.

oogjes open, snaveltjes dicht


Verwijderd

Don Facundo schreef op dinsdag 06 september 2005 @ 11:34:
[...]


Tja je ontkomt niet aan een vieze oplossing. Bedenk dat op jou manier toch alle includes worden gecompileerd.
Als je in die includes functies neerzet, en die functies aanroept, is 't toch niet echt een vieze oplossing?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 30-04 15:47

mulder

ik spuug op het trottoir

Verwijderd schreef op dinsdag 06 september 2005 @ 12:05:
[...]

Als je in die includes functies neerzet, en die functies aanroept, is 't toch niet echt een vieze oplossing?
Dan heeft het al helemaal geen zin om er If-statements omheen te zetten, dan kun je ze gewoon (bv) bovenin includen.

oogjes open, snaveltjes dicht


Verwijderd

Topicstarter
Don Facundo schreef op dinsdag 06 september 2005 @ 12:08:
[...]


Dan heeft het al helemaal geen zin om er If-statements omheen te zetten, dan kun je ze gewoon (bv) bovenin includen.
Niet alle includes zijn zichtbaar, alleen die waarvan de status "ja" is. Deze waarde is dynamisch, dus moet ik wel met IF werken...

Verwijderd

Topicstarter
Don Facundo schreef op dinsdag 06 september 2005 @ 11:34:
[...]


Tja je ontkomt niet aan een vieze oplossing. Bedenk dat op jou manier toch alle includes worden gecompileerd.
Gelukkig zijn de includes relatief klein met 1 simpele query per include en een loop voor max 3 items.
Pagina: 1