Foros del Web » Programando para Internet » ASP Clásico »

[SOLUCIONADO] Hacer Include desde una variable

Estas en el tema de Hacer Include desde una variable en el foro de ASP Clásico en Foros del Web. Hola a tod@s, os explico mi problema: quería componer una página, a partir de varias páginas separadas haciendo varios includes, hasta ahí ningún problema. El ...
  #1 (permalink)  
Antiguo 06/08/2013, 01:44
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Hacer Include desde una variable

Hola a tod@s, os explico mi problema: quería componer una página, a partir de varias páginas separadas haciendo varios includes, hasta ahí ningún problema. El tema está en que para saber que archivos tengo que incluir, lo tengo que consultar en una base de datos y después componer los includes, había pensado hacer algo así:

Código ASP:
Ver original
  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
  2. <%
  3.  
  4. codmuestra = request.querystring("codmuestra")
  5.  
  6. Dim conex_STRING99
  7. conex_STRING99 = "DSN=Informes;uid=xxxx;pwd=xxx;"
  8.  
  9. Set informe = Server.CreateObject("ADODB.Recordset")
  10. informe.ActiveConnection = conex_STRING99
  11. informe.Source = "Select * from muestras where codigo=" & codmuestra
  12. informe.CursorType = 1
  13. informe.CursorLocation = 2
  14. informe.LockType = 3
  15. informe.Open()
  16.  
  17. idiomas=informe("idiomas")
  18. if instr(idiomas,",")>0 then 'hay varios idiomas, cogemos el último
  19.     idi=split(idiomas,",")
  20.     idioma=idi(ubound(idi))
  21. else 'solo hay un idioma
  22.     idioma=idiomas
  23. end if
  24.  
  25. Set archivos = Server.CreateObject("ADODB.Recordset")
  26. archivos.ActiveConnection = conex_STRING99
  27. archivos.Source = "Select * from archivos_informes where id_perfil=" & informe("perfil") & " order by orden asc"
  28. archivos.CursorType = 1
  29. archivos.CursorLocation = 2
  30. archivos.LockType = 3
  31. archivos.Open()
  32. %>
  33. <html>
  34. <head></head>
  35. <body>
  36. <%while not archivos.eof
  37.     if idioma="DE" then
  38.         inclusion="./" & archivos("archivo") & "_aleman.asp"
  39.     else
  40.         inclusion="./" & archivos("archivo") & ".asp"
  41.     end if
  42.     response.write inclusion%>
  43.           <!--#include file=inclusion -->
  44. <%archivos.movenext
  45. wend%>

Pero siempre daba error diciendo que no encontraba el archivo "inclusion". Después de buscar un poco he encontrado esto:

Cita:
Podría haber un problema si queremos incluir un archivo cuyo nombre debemos extraer de una variable ASP. Imaginaros que tenemos que incluir un archivo que tenemos su nombre en una variable. Así:

<%
archivoInclude = "miarchivo.html"
%>
<!--#include virtual=archivoInclude-->

Como el código ASP no se ejecuta hasta después de haber incluido el archivo, a la hora de incluirlo no se ha resuelto el nombre que se desea incluir. Dicho de otro modo, ASP no sabe qué es lo que vale la variable archivoInclude cuando va a incluirlo, por lo que no realiza el include tal como desearíamos.

Para parametrizar bien una página web y que su actualización sea fácil más tarde o más temprano lo anterior será un inconveniente. Así que podemos arreglar el problema del siguiente modo, creando una función que realice el include del archivo. Veamos cómo sería esa función:

<%
function incluye(archivo)
archivo= request.serverVariables("APPL_PHYSICAL_PATH") & archivo
set confile = createObject("scripting.filesystemobject")
set fich = confile.openTextFile(archivo)
while not fich.atEndOfStream
lineactual = fich.readLine
response.write(lineactual)
wend
end function
%>

Varias cosillas habría que comentar sobre esta función. Recibe el nombre del archivo que deseamos abrir. Para construir la ruta completa de este archivo tendremos que utilizar el objeto request para extraer la variable del servidor que contiene la ruta de disco duro donde se encuentra el domino. Una vez que hemos construido el nombre de archivo con su ruta creamos el archivo en las 2 siguientes líneas. Finalmente hacemos un bucle que va extrayendo del archivo el texto correspondiente e imprimiendolo en la página.

Solo destacamos un punto en contra de esta forma de incluir los archivos. Se trata de que no podremos incluir más que código HTML, nunca código ASP pues no se ejecutaría y quedaría impreso en la página junto con el código HTML. Es una limitación significativa pero en los casos en los que solo necesitemos incluir texto puede servir muy bien.
Es decir, según esto no se puede incluir un asp desde una variable, porque intenta hacer la inclusión antes de ejecutar el código. Y tampoco se puede usar la función que proponen, porque incluiría el código a pelo y ya está.

¿A alguien se le ocurre como hacer esto?

Muchas gracias por adelantado, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 06/08/2013, 01:59
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 4 meses
Puntos: 8
Respuesta: Hacer Include desde una variable

Pues creo que lo he resuelto, al final he sustituido el include por un server.execute y parece que funciona todo como toca!!!

Código ASP:
Ver original
  1. while not archivos.eof
  2.     if idioma="DE" then
  3.         inclusion="./" & archivos("archivo") & "_aleman.asp"
  4.     else
  5.         inclusion="./" & archivos("archivo") & ".asp"
  6.     end if
  7.     server.Execute(inclusion)
  8. archivos.movenext
  9. wend
__________________
Vayamos por Partes :: Jack el Destripador

Etiquetas: asp, dato, include, select, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:39.