Newsgroup: it.comp.www.asp
Titolo: [?] trita e ritrita: include dinamici

Devo fare un include del tipo <!--include
file='/include/default_<%=request("tipo")%>'-->
So che non è fattibile (e non so come ovviare, dato che sono un migliaio le
possibilità e stanno crescendo).
Curiosando qua e là trovo però su Aspitalia questa faq:
La seguente prova sembra non funzionare:
<!--#include virtual="include/<%=Request.QueryString("include")%>.inc"-->
C'è un workaround per risolvere lo stesso questo problema?
I file include vengono inclusi prima dell'esecuzione stessa della pagina,
per cui in pratica un codice del genere da un errore, visto che non si
riesce a trovare il file in questione. Per ovviare a questo incoveniente, è
necessario specificare per ogni opzione un'include apposito. Nella futura
versione di IIS5 (e quindi nella prossima versione di ASP) ci sarà un
supporto migliore per questa caratteristica.
La domanda è: qual è questo supporto migliore con iis5?
Vuol dire che è stato risolto il problema?
In che modo?
Grazie a tutti in anticipo.

Mi autorispondo (con domanda correlata):
esistono 2 metodi ma entrambi con problemi:
a) Server.execute dovrebbe sostituire include e permettere quindi dinamicità
nel nome del file.
    Problema: NON riconosce le variabili della pagina in cui viene incluso
(a differenza di include "classico") e quindi è per me inusabile (ho una
serie infinita di include che usano variabili settate nelle pagine
chiamanti).
b) <script language='VBScript' runat=server src='mia_pagina'></script>
    quanto sopra da sito msdn dovrebbe essere una alternativa, peccato che
non funziona.
    Se scrivo un errore nella pagina indicata l'errore viene segnalato, se
metto però un semplice response.write "ok" a schermo non visualizza nulla.
Se qualcuno sa dirmi O come far riconoscere le variabili della pagina
chiamante nell'opzione a), oppure come far funzionare l'opzione b) ringrazio
anticipatamente.

Ciao Cristiano
è un problema credo piuttosto comune, dovuto come dici tu stesso al fatto
che gli include vengono inseriti prima dell'esecuzione.
Una soluzione però c'è: il Redirect. Certo, non è la stessa cosa, però ti
permette di ottenere il risultato che cerchi. In pratica fai il contrario di
ciò che volevi fare inizialmente. Mi spiego meglio:
Tu volevi un file con del codice comune, ad esempio file.asp, che a seconda
dei dati in ingresso includesse, ad esempio,
CONTENT1.INC
CONTENT2.INC
CONTENT3.INC
...
CONTENTn.INC
La soluzione che ti propongo io funza così:
le persone partono da un file iniziale, es. index.asp, che a seconda dei
dati in ingresso esegue:
...
Dim pageRedirect
pageRedirect = ... 'Codice di gestione della variabile sulla base dei dati
in ingresso
Response.Redirect "
http://www.miosito.com/
" & pageRedirect
...
Ora succede che pageRedirect può essere ad esempio PAGE1.ASP, PAGE2.ASP ...
PAGEn.ASP.
Queste pagine contengono ciò che avresti voluto mettere nei vari content
iniziali, più il codice comune (tramite una include statica) che avresti
voluto mettere in file.asp.
In pratica, invece di avere un unico file che ne può chiamare infiniti, ce
ne sono infiniti che ne chiamano uno.
E il gioco è fatto, con l'unico overhead di aver eseguito un redirect ma con
la dinamicità di contenuti che cercavi.
Spero di averti aiutato.
--
-------------------------[ 100% D++ CODE ]
Davide Deidda
FAX 1782200458
davide...@tiscalinet.it


Moderatore di it.comp.www.asp
Sito di supporto: 
http://www.aspitalia.com/newsgroup/
La più grande community italiana di sviluppatori!

Ti ringrazio, conosco utilizzo dell'include (una nota per te: se hai codice
da non divulgare occhio a dargli nomi con estensione .inc, in questo modo
posso guardare il sorgente e scaricarlo tranquillamente, problema
sperimentato sulle mie spalle (i clienti si scaricavano pagine asp perché si
chiamavano inc) e corretto: adesso tutti gli include hanno estensione .asp).
Il problema era fare degli include dinamici; redirect non fa al caso mio.
Grazie comunque.

Session non posso usarla, ho troppe variabili, ahimé
Il motore è 5.1.5010 (sia JScript che VBScript), credi possa servire
aggiornare a 5.5?
Vorrei evitare di installare sul server IE 5.5, basta installare secondo te
http://www.microsoft.com/msdownload/vbscript/scripting.asp
 ?
capisco gli include scritti a manina; il problema è che ho X siti e ogni
sito ha i suoi include a seconda dell'ID, non posso fare un select case per
10.000 siti!!!
Grazie infinite, se mi dai conferma per il link sopra provo ad installare
per vedere se funziona <script src> (credo sia corretto ma, dato che non
parla esplicitamente di iis...)

 Grazie comunque.
Anche a te


Questo dovrebbe risolvere il problema.
L'ho guardato velocemente e sembra un po macchinoso comunque..... dovrebbe
funzionare.
    Dynamic Include Files
    Most of us at one time or another have wanted to do truly
    dynamic includes and quickly discovered we couldn't.  This
    article uses the FileSystemObject to produce a workaround
    that allows you to include a file based upon variables in
    your code.
 
http://www.asp101.com/misc/goto.asp?name=nf27_dynincl
Ciao
        Alessio

file='/include/default_<%=request("tipo")%>'-->
Io risolvo in questo modo:
- un unico file di include con all'interno n procedure che contengono
il codice dei tuoi n include
- chiamata asp alla procedura corretta
Ciao!
Glauco
www.serate.it
www.curiamo.com
www.comperiamo.com

Ottimo compromesso per pagine html, anche se temo che il filesystem object
rallenti un po' l'esecuzione.
Dubito però che funzioni anche con asp (i miei include hanno codice asp,
secondo me in questo modo non viene eseguito).

che lo ignorano (ho visto di persona).
Aaarrgghhh. Mi hai dato lo spunto per controllare su Aruba ed ho visto
che scarico bel bello i miei .inc da Aruba.
Mo vado a scriverglielo.
Domanda: pero', come riesce un utente a conoscere il nome dei miei
file, per scaricarli?


 
www.comperiamo.com
Purtroppo il modo c'è, eccome.
Un metodo banale ma efficace è quello di generare errori tramite
compilazioni "subdole" di un form. Altro "punto d'attacco" può essere la
QueryString (pensa ad un parametro con valore "pippo" dove il programma si
aspettava un intero(!)). Naturalmente è per lo più l'ingenuità del
programmatore a causare questi buchi (e io l'ho sperimentato sulle mie
spalle :-( ).
Comunque avvenga l'errore, tuttavia, è la spesso eccessiva "loquacità" di
IIS a fare il resto del danno, segnalando il file e la riga in cui è
avvenuto l'errore :-(.
Ciao Glauco
(PS: che strano, ho un collega col nome uguale al tuo - non comunissimo...
non è che siete la stessa persona? :-))


 avvenuto l'errore :-(.
basterebbe metterci un bel on error resume next in cima, e si risparmiano un
sacco di grane.
d'altra parte un buon programmatore queste cose dovrebbe saperle :-)
