Toon posts:

[ASP] Dynamische include workabouts

Pagina: 1
Acties:
  • 194 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Heb me helemaal te pletter gezocht op GoT en Google, maar nog steeds geen goeie oplossing voor het volgende probleem gevonden. Heb nog niet zoveel ASP ervaring.

Ik heb een index.asp met keuzemenu gegenereerd uit een database, 20 links. Die werken probleemloos.

Al snel liep ik tegen het probleem aan van de include die je niet dynamisch kunt maken. De workabouts die beschikbaar zijn lijken het probleem ook niet te kunnen oplossen. De links in het keuzemenu zien er als volgt uit: index.asp?pagina=link1
In de index.asp zit een request voor "pagina". De bedoeling is dat er dan 2 onderdelen verschijnen; een tabel met gegevens uit de database behorend bij link1 (en dat werkt ook) en een pagina met opmaak die moet worden geinclude. Alle 20 links hebben zo'n pagina en het zijn ook weer asp pagina's. Probleem is dat de meeste workabouts wel het include probleem ondervangen, maar dan geen asp pagina kunnen handlen. Die pagina's met opmaak kunnen niet uit een database worden getoverd, daarvoor zijn ze te complex (met tabellen en foto's e.d.).

Het liefst zou ik het in PHP doen maar dat is helaas geen optie in dit geval :|
Hoe kan ik ervoor zorgen dat ik bovenstaande voor elkaar krijg met alleen index.asp zonder voor iedere link een aparte asp pagina te hoeven maken?

  • mvliet
  • Registratie: Oktober 2000
  • Laatst online: 13-04 09:27
kan je niet een "pagina" variabele maken.......dan de index.asp includen...en dan die pagina variabele in de index.asp opvragen ?

www.cenobytes.nl Noize Party's & industrialnation.nl


Verwijderd

Topicstarter
Dan heb je volgens mij alsnog een include nodig of 20 aparte pagina's.....?

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

Ik heb een tijdje geleden voor het zelfde probleem gestaan, maar aangezien ik er ipv 20 maar 3 had heb ik toch gekozen voor 3 inludes en een if else. Heb eigenlijk nog nooit een oplossing gevonden voor dit 'probleem', maar ook niet echt gezocht... Ben dus wel benieuwd.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • mvliet
  • Registratie: Oktober 2000
  • Laatst online: 13-04 09:27
ik neem aan dat je een link.asp hebt waarin je de eigenschappen van de link1 laat zien...
en dan dat je een include van een menu(index.asp) wil.....dan hoef je in dat geval maar 1 link.asp te maken (die je met een parameter aanroept) en dan je menu steeds daarin includen...

tenzei je wat anders bedoelt natuurlijk.....

voorbeeldje wat ik zelf vaak gebruik om boven alle asp pagina's een banner,menu,usermenu te krijgen......

code:
1
2
3
4
5
<body bgcolor="#666666" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<!--#include file="includes/banner.asp"-->
<!--#include file="menu.asp"-->
<div align="center">
<!--#include file="usermenu.asp"-->

[ Voor 36% gewijzigd door mvliet op 18-02-2003 14:41 . Reden: stukkie code ]

www.cenobytes.nl Noize Party's & industrialnation.nl


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

mvliet schreef op 18 februari 2003 @ 14:37:
[..]
tenzei je wat anders bedoelt natuurlijk.....
Volgens mij wil hij aan de hand van een URL-parameter 1 van de 20 verschillende pagina's includen. :?

[ Voor 12% gewijzigd door OkkE op 18-02-2003 14:40 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

ASP ondersteunt geen dynamische includes met daarin weer code. Je zult het probleem dus anders moeten oplossen.

Ik begrijp niet helemaal hoe je tegen het probleem aanloopt, dus als je functioneel beschrijft wat je wil berijken kan ik je misschien een tip geven hoe je dat technisch kan bereiken. Grofweg zal het er waarschijnlijk op neerkomen dat je jouw code in veel functies zal moeten opdelen, en dan per pagina statisch files includen met de functies die je nodig hebt.
Hoe kan ik ervoor zorgen dat ik bovenstaande voor elkaar krijg met alleen index.asp zonder voor iedere link een aparte asp pagina te hoeven maken?
Ik zie niet in waarom dat een probleem is, misschien dat je dat kunt uitleggen.

PS: Je bedoelt waarschijnlijk 'workarounds' (dus om het probleem heen werken). ;)

[ Voor 7% gewijzigd door Verwijderd op 18-02-2003 16:02 ]


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 12-08 16:04

Jaspertje

Max & Milo.. lief

je kan een case maken.. :

ASP.NET Visual Basic:
1
2
3
4
5
6
7
8
9
x = request("pagina")
Select Case x
 Case "1"
 %><!--include....--><%
 Case "2"
 %><!--include....--><%
 Case "3"
 %><!--include....--><%
end


Misschien moet je een server.execute doen.. de pagina niet includen maar runnen..

[ Voor 35% gewijzigd door Jaspertje op 18-02-2003 14:55 ]


  • Folkert
  • Registratie: September 2001
  • Laatst online: 10-07 07:58
Kan je geen verschillende includes maken die je dynamisch oproept?

ASP:
1
2
3
4
5
6
7
8
9
10
<%Select Case pagina%>
<%Case "Nederlands"%>
<!--#include file="file1.ssi" -->
<%Case "Duits"%>
<!--#include file="file2.ssi" -->
<%Case "Frans"%>
<!--#include file="file3.ssi" -->
<%Case "Engels"%>
<!--#include file="file4.ssi" -->
<%end select%>


Het heeft mijn verschillende keren uit de brand geholpen....

  • Folkert
  • Registratie: September 2001
  • Laatst online: 10-07 07:58
ai...Jaspertje was me voor! |:( ;)

Verwijderd

Met een Case statement kan je wel dynamisch een file includen, maar ASP code daarin wordt niet uitgevoerd. Als je met Server.Execute werkt ipv met een SSI include statement, kan je dit weer oplossen.

/me was helemaal het bestaan van Server.Execute vergeten

  • DRAFTER86
  • Registratie: April 2002
  • Laatst online: 06:43
Dit is dus 1 van de nadelen van asp... het kan niet :) Er zijn wel truukjes voor om het effect te simuleren maar aangezien de includes VOOR alle code geparst worden is het onmogelijk om het te doen op de manier die jij wil. In php kan dit wel :)

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11-2025

OkkE

CSS influencer :+

De oplossingen die jullie geven is denk ik juist wat de topic starter niet wil, namelijk een (soort van) if else voor alle 20 pagina's.
Hij wil, als ik het goed begrijp:

URL: index.asp?p=1
code:
1
<!--#include file="file1.asp" -->


URL: index.asp?p=3
code:
1
<!--#include file="file3.asp" -->


Enz enz, maar dan dus zonder dat hij voor elke file#.asp een apparte include maakt. Hij is er achter dat dit niet zomaar op de volgende manier kan:
code:
1
<!--#include file="file<%URLvar%>.asp" -->

En nu vraagt hij of er een andere mogelijkheid is, naast die voor elke pagina een nieuwe include..

Of zit ik er nu helemaal compleet naast ... :?

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • KoeKk
  • Registratie: September 2000
  • Laatst online: 20-08 18:36
DRAFTER86 schreef op 18 February 2003 @ 15:11:
Dit is dus 1 van de nadelen van asp... het kan niet :) Er zijn wel truukjes voor om het effect te simuleren maar aangezien de includes VOOR alle code geparst worden is het onmogelijk om het te doen op de manier die jij wil. In php kan dit wel :)
Leuk dat je dit aandraag als punt om PHP te kiezen...

ASP ondersteund wel het "dynamisch includen" van bestanden, genaamd Server.Execute, zoals MrX al zei. Daarnaast is het niet de bedoeling om SSI INCLUDES dynamisch te doen |:(. Daar is het niet voor bedoeld, en kan je het dus (LOGISCH!) daarvoor ook niet gebruiken.

Dat PHP zich daar niet aan houd zal de TS een wordt wezen, ook dat jij aandraagd dat PHP het wel kan, want dat is voor hem totaal IRRELEVANT, hij doet het in ASP, waar jij dus geen kaas van gegeten hebt dus waarom reageer je HIER? :/
</flame>

TS: ik zou nooit je includes dynamisch willen doen, gebruik gewoon een x aantal functies en include die met SSI in je pagina. Beslis dan in de pagina zelf welke functie je met welke parameters aan gaat roepen, dat is veel logischer + veel makkelijker te onderhouden.

Verwijderd

Als je server minimaal IIS 5.0 is kun je kiezen voor Server.Execute of Server.Transfer

Zie : http://www.4guysfromrolla.com/webtech/010700-1.shtml

edit:
Hmmm niet goed gekeken, een hoop mensen waren me al voor

[ Voor 20% gewijzigd door Verwijderd op 18-02-2003 15:26 . Reden: Opmerking toegevoegd ]


  • DeverauX
  • Registratie: Februari 2002
  • Niet online

DeverauX

Focus is everything

Verwijderd schreef op 18 February 2003 @ 15:03:
Met een Case statement kan je wel dynamisch een file includen, maar ASP code daarin wordt niet uitgevoerd. Als je met Server.Execute werkt ipv met een SSI include statement, kan je dit weer oplossen.
Dan moet iemand mij toch echt ff uitleggen waarom eventuele code in een dynamisch included bestand bij mij toch echt wel verwerkt wordt :?
Maak gewoon gebruik van SSI met een SELECT CASE op een querystring variabele, en afhankelijk van deze variabele wordt er een bepaald bestand geinclude mét daarin ASP-code.

...whatever was distasteful or unpleasant or uncomfortable or painful - music could always soothe that.
All you have to do is reach out to beauty.
Quincy Jones


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
dynamische includes kan gewoon niet WANT bij ASP word eerst alle code op de server uitgevoerd en die poept dan het resultaat als HTML uit (of Tekst) maar dan zijn dus alle includes gewoon mee geparsed

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • paragon
  • Registratie: April 2000
  • Laatst online: 23-08 17:24
Mensen er is hier toch een hele simpele oplossing werkt zonder dat er x-includes geparst hoeven te worden.
code:
1
2
3
4
5
6
7
If Not Len(Request.QueryString("page")) = 0 Then
        Page = Request.QueryString("page")
Else
        Page = "home"
End If
                
Server.Execute Page+".inc"

  • ta_chi79
  • Registratie: Juli 2001
  • Laatst online: 23-08 17:05
devraux schreef op 18 February 2003 @ 16:56:
[...]


Dan moet iemand mij toch echt ff uitleggen waarom eventuele code in een dynamisch included bestand bij mij toch echt wel verwerkt wordt :?
Maak gewoon gebruik van SSI met een SELECT CASE op een querystring variabele, en afhankelijk van deze variabele wordt er een bepaald bestand geinclude mét daarin ASP-code.
Het kan wel, maar alleen als er in je includes absoluut geen functions of subs zijn gedefinieerd.
Met SSI worden alle includes eerst aan elkaar gezet, waardoor je 1 groot virtueel bestand krijgt en DAT wordt pas aan de ASP-parser aangeboden. Als je bijvoorbeeld in je include een sub definieert krijg je bijv in je asp pagina:
code:
1
2
3
4
Select Case x
Case Y: %><!--include....--><%
Case Z: %><!--include....--><%
End Select

in je virtuele file met alles aan elkaar geknoopt ziet er dan uit als bijv
code:
1
2
3
4
Select Case x
Case Y: %><%= "Hello Jan" %><%
Case Z: %><%= "Hello Piet" %><%
End Select
Waarbij de waarden tussen "<%=" en "%>" uit de geinclude pagina komen
Als je functies of subs zou gebruiken in je include krijg je iets als
code:
1
2
3
4
5
6
7
8
9
Select Case x
Case Y: %><% Sub doHello()
          Response.Write "Hello Jan"
          End Sub %><%
Case Z: %><% Sub doHello()
          Response.Write "Hello Piet"
          End Sub %><%
End Select
Call doHello()
Waarbij de waarden tussen "<% Sub" en "End Sub %>" uit de geinclude pagina komen

Dit is dus iets wat ASP niet aankan en daarom kun je meestal ook je includes niet conditioneel doen, want meestal zul je functies of classes in je includes hebben die je af en toe wilt gebruiken.

offtopic:
Bij PHP wordt niet eerst mbv SSI de pagina in elkaar gezet, maar bepaalt de PHP engine of ie ineens een ander bestand nodig heeft (via de functies include() require() en require_once())
Hiermee wordt voorkomen dat je in grotere web-applicaties tientallen includes alvast meeneemt waardoor de parse-tijd toeneemt bij gebruik van 1 include die alle andere generieke includes alvast include of dat je per pagina een waslijst aan includes hebt die uiteindelijk onbeheersbaar wordt.
Pagina: 1