Newsgroup: it.comp.www.asp
Titolo: [?] Include: possibile che carichi sempre gli include "condizionali"?

Spiego perché l'oggetto č un po' ostico.
<%if pippo=1 then%>
<!--#include .....-->
<%elseif pippo=2 then%>
<!--#include....-->
...................................
Ho usato lo schema sopra per degli include dinamici (giŕ  testate nuove
potenzialitŕ di iis5 ma non c'č nulla di uguale, c'č un thread a proposito
di ciň in questo newsgroup di un paio di mesi fa).
Il problema č che (non so se per quanto sopra o per altro) il sito č
rallentato vistosamente.
Ho allora provato a mettere un errore nell'include di pippo=1, e aprire la
pagina con pippo=2 => l'errore viene rilevato!
Ma allora in realtŕ vengono caricati o comunque controllati TUTTI gli
include E POI eseguito l'IF???
Se č cosě capisco perché la pagina ha rallentato; adesso ne ho una ventina
(ma ogni include č un asp enorme), entro breve un centinaio...
Ditemi che non č cosě, oppure suggeritemi come ovviare a quanto sopra,
oppure...boh, io lo ritengo assurdo.
Grazie.


Ho anche io provato le potenzialità di IIS 5.0 ma quello che hai
provato tu mi giunge nuovo.. o meglio, speravo che li includesse SOLo
a condizione avverata... 
in any case, MS stessa nella documentazione di IIS 5.0 non ha proposto
di usare l'if con gli INCLUDE ma  con iL Server.Execute.
E' differente, perchè la pagina che viene eseguita è una pagina a sé
stante e quindi dovrebbe funzionare AS IS; solo che poi includi il
risultato nella pagina "madre".
Attenzione: nella documentazione di IIS c'è scritto che puoi
richiamare la pagina anche passandogli variabili. 
Es: 
Server:Execute pagina.asp?var=1
NON E' VERO. Hanno ammesso che c'è un errore nella documentazione.
Prova a ridisegnare le pagine affinchè possa usare con il server
execute, per quanto riguarda gli include condizionali, faro' anche io
qualche prova :-(((((
Saluti
Aladin


Esattamente... purtroppo!
Prima ti crea il paginone con tutti gli include belli estesi, e poi guarda
la condizione... :(
Stefano

Già testato; se non ricordo male con server.execute mi perde le variabili (e
ne ho una quantità industriale nella pagina "madre"); l'altro metodo
proposto era <script language='JScript' runat=server
src='pagina_dinamica.asp'> ma non funziona con versione 5.1 (dovrei
installare oggi 5.5 e fare ulteriori prove a proposito di ciò).


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

Fatto test con v5.5 ma non cambia nulla.
Vi riassumo le differenze rispetto al classico include:
a) Metodo Execute: funziona correttamente ma esegue la pagina a sé stante =>
non legge le variabili della pagina "madre" e (almeno nel mio caso) è quindi
inutilizzabile
b) Metodo <script runat=server> => per questo non riesco a fare include
dinamici: non appena tento di inserire nell'SRC una variabile o
qualcos'altro si inchioda; anche per questo, inoltre, non riconosce
variabili pagina "madre".
Riassunto finale: da quel che ho capito include NON è sostituibile da nulla
al momento ma, poiché analizza sempre e comunque tutti gli include, non è
usabile con if ... then... perché appesantisce il tutto.
......e io resto senza soluzione al mio problema, ahimé.
Grazie a tutti, se a qualcuno viene in mente una soluzione....

Grazie a tutti, se a qualcuno viene in mente una soluzione....
e usare dei cookies?
metti tutte le variabili della pagina madre nei cookies.
esegui il server execute e li recuperi. dopo che li hai recuperati
cancelli il cookie.
è un accrocchio... ma tant'è...
ovviamente  così costringi gli utenti ad attivare l'utilizzo dei
cookies... vedi tu
Aladin

L'utilizzo dei cookie serve comunque per asp.
Però con tante variabili è impossibile (non ricordo il limite, potrei
azzardare 32 cookies per sito).
Potrei usare session ma sono troppe.


I files include vengono assemblati prima dell'esecuzione della pagina ASP,
quindi li carichi entrambi, e se ci sono errori, vengono rilevati.
Con ASP 3 si può usare:
-  Server.execute se vuoi eseguire una pagina
 - Server.Tranfer se vuoi trasferire il controllo ad un'altra pagina con il
vantaggio che tutti i dati presenti nella pagina chiamante vengono
trasferiti a quella nuova.
Ciao, Paolo

 Grazie a tutti, se a qualcuno viene in mente una soluzione....
Se davvero rsulta così pesante, puoi usare un altro sistema.
Creati una funzione (magari in un oggetto DCOM), alla quale passi i criteri
per visualizzare una o l'altra pagina.
Come file include specifica un tuo file "dinclude.asp" per esempio.
Supponiamo che i file da includere siano 3:
inc1.asp
inc2.asp
inc3.asp
La funzione non dovrà fare altro che copiare uno dei 3 files in
dinclude.asp, sovrascrivendolo ogni volta.
Ah, ovviamente, la funzione deve essere chiamata prima di aprire la pagina
(magari in una pagina intermedia, che chiama la funzione, facendo subito
dopo un response.redirect()
Quindi avrai la pagina di transizione:
[elabora.asp]
<%
    strQueryString = Request.QueryString
    GeneraInclude(strQueryString)    'Funzione che elabora la condizione
                                                        'e che genera il
file dinclude.asp adeguato
    Response.Redirect("risultato.asp")
%>
....
La pagina finale:
[risultato.asp]
<!--#include virtual="/scripts/dinclude.asp"-->
...

E se in 400 utenti accedono contemporaneamente alla stessa pagina
"elabora.asp" (ovviamente ognuna ha bisogno di un include diverso)?
Idea ottima, ma mi sa improponibile in multiutenza.

Server.execute non riconosce nessuna variabile né oggetto della pagina
"madre"
server.transfer riconosce gli oggetti ma non le variabili (ahimé)

 server.transfer riconosce gli oggetti ma non le variabili (ahimé)
Oops. Giusto! "Transfer" trasferisce solo variabili di sessione e di
applicazione, anche tra applicazioni diverse, stringhe di interrogazione ed
altro, ma non le variabili.
Allora, per il problema dei file ASP enormi, si potrebbe...
.... utilizzare variabili di sessione o di applicazione. (E se l'utente non
accetta i cookies, occorre aggiungere Cookie Munger per seguirlo)
.... modularizzare il codice, ripartendolo in procedure e funzioni (così il
codice è più breve, più chiaro e si riduce al minimo il numero delle
variabili globali).
.... ripartire le costanti, variabili e procedure di partenza in vari file
include e caricare, pagina per pagina solo quelli necessari (certo, un bel
Option explicit occorre per controllare che non si abbia tagliato troppo).
.... oppure, ma non è bello detto qui... passare a PHP che, con la funzione
include(), fa ciò che vuoi

 Idea ottima, ma mi sa improponibile in multiutenza.
Hai ragione. Non ho pensato a questa eventualità.
Invece che scrivere 200 IF, non è, forse, più comodo utilizzare
response.redirect, a questo punto?

 Idea ottima, ma mi sa improponibile in multiutenza.
1) ti  fai il tuo bell'oggetto COM/COM+ che incapsula tutta la logica che
ora hai nel file asp ed in più inserisci in qualche modo lì la grafica,
perdendo in flessibilità.
2) a che ti servono questi if, a dare una personalizzazione diversa in base
ad ogni utente o in base alla versione a cui vogliono accedere (es,
tizio.caio.it
 ha una grafica, 
sempronio.caio.it
 un'altra).
se fosse così, suppongo tu abbia una dir, chiamata ad es inc, in cui hai gli
include.
ti basta creare n sottodomini con root sempre uguale, ma mappando per ognuno
di questi una dir inc diversa, in modo da dover cambiare solo gli inc per
ciascuna versione.
ci sono altre strade, se vuoi approfondiamo :-P


Sempre perché ahimé non tiene conto delle variabili della pagina "madre".

www.eir.it
 (spero non sia considerata pubblicità)
a sinistra ci sono dei "portali" (sono molti di più ma per ora è una
versione limitata, anche per questo problema); praticamente la pagina è la
stessa ma, a seconda del sito, il "corpo" della pagina varia.
Quindi: attualmente la home.asp è la stessa (intestazione, varie parti); a
seconda del "portale" richiesto carica l'include corretto.
I "portali" potrebbero crescere parecchio e vorrei evitare di mettere mano a
iis per creare n sottodomini (adesso i pc sono 2, in teoria con load
balancing se riesco a farlo funzionare come deve potrebbero diventare n).
Possibile che Microsoft non riesca a risolvere questo problema?????
(<<==sfogo personale, senza risposta, temo)

:-O
Potrei fare in php la mia home page e risolvere il problema, dici?
Dovrei trovo maggiori info su quanto dici su php? (ahimé non so nulla su
php)

> Sempre perché ahimé non tiene conto delle variabili della pagina "madre".
Passale nell'indirizzo: response.redirect("pippo.asp?" & strVariabili)

Sono tante.
Se fossero poche le registrerei come Session e avrei risolto il problema
indipendentemente dal metodo usato.
Inoltre la "madre" deve essere visualizzata (con redirect cancello l'output
già generato).
Grazie comunque.


Visto che la madre è comune a tutte le pagine, non puoi fare 'n' pagine e
includere il codice della madre? Utilizzando, ovviamente, sempre
response.redirect.

 (<<==sfogo personale, senza risposta, temo)
ho capito il punto.
in ogni caso con ADSI puoi creare in automatico nuovi siti web e so che
alcuni provider tengono fino a 5000 siti sulla stessa macchina...
ascolta questa. conosci ASPHTTP? bene, io sono arrivato a circa 100 mila
richieste al mese, su un particolare sito, dove ogni richiesta aprire due
istanze dell'oggeto, per header e footer.
in pratica tu apri, via HTTP, una sessione passando tutti i valori che ti
pare (rivedi un po' la logica in modo da dover passare meno variabili
possibile alle pagine di template), per header e footer.
la velocità è egregia ed al massimo compri un altro paio di banchi di ram e
con un load balancing sei a posto.
ultima soluzione.
crei un filtro ISAPI che in un qualche modo "funzioni" da preloader (in
effetti un filtro isapi fa questo) e sostituisca, più o meno come ASPHTTP o
analoghi, i template adeguati.
io ti suggerisco ASPHTTP, poi sta a te ;-)


Ho letto articolo su adsi ed è ottimo (mi servirà per offrire spazio web).
Non conoscevo invece ASPHTTP, sembra ottimo, testo.
Grazie.