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

Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Estas en el tema de Propongo solución alternativa a includes dinámicos. Opiniones por favor. en el foro de ASP Clásico en Foros del Web. Estimados, Quebrandome el mate con este tema de los includes dinámicos llegué a una solución bastante rebuscada pero que funciona bien, el tema es que ...
  #1 (permalink)  
Antiguo 04/06/2008, 13:11
 
Fecha de Ingreso: agosto-2004
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 2
Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Estimados,

Quebrandome el mate con este tema de los includes dinámicos llegué a una solución bastante rebuscada pero que funciona bien, el tema es que quisiera conocer el tema de los expertos en cuanto a la carga que pueda significar al servidor.

El problema es cuando se quiere incluir un archivo cuyo nombre o ubicación viene desde una BD o una variable, como los SSI no permiten ejecutar codigo no es posible incluirlos. La solución que encontré es mediante FSO copiar el archivo a una ubicación específica del servidor, por ejemplo al archivo "tmp/tmp.asp" en la raiz del sitio. Luego lo que hago es crear el include llamando siempre a este archivo tmp.asp y ya puedo usar el codigo dinámico.

El cuento es que como los SSI se ejecutan antes del ASP, entonces es necesario crear un archivo puente que copie el archivo a ejecutar y luego redireccione a la página en donde se utilizará. En forma práctica seria:

- archivo a incluir: noticias.asp
- archivo puente: puente.asp
- archivo en donde se ejecuta: index.asp

Entonces:

Llamamos a puente entregandole un codigo mediante la url, quedaria algo asi como:
puente.asp?modulo=noticias

Puente.asp
Código:
modulo = request("modulo")

select case modulo:
case "noticias":
	archivo = server.mapPath(".") & "/noticias.asp"
case else 
	archivo = server.mapPath(".") & "/index.asp"
end select

Set fs = CreateObject("scripting.FileSystemObject")
fs.CopyFile archivo, server.mapPath(".") & "/tmp/tmp.asp"

server.execute("index.asp")
y en index.asp
Código:
<!--#include file="tmp/tmp.asp"-->

' todo el resto del proceso
Por favor les pido que, si les parece bien, se den el tiempo de analizar la solución y darme su opinión al respecto, si es muy pesado estar a cada rato copiando un archivo para el server, si seria muy lento tanto direccionamiento interno, etc.

Muchas gracias desde ya, esto funciona bien pero quisiera su opinión antes de comenzar a utilizarla oficialmente.

Saludos cordiales,

Rodrigo
  #2 (permalink)  
Antiguo 04/06/2008, 13:24
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Hola rProgged,

La verdad, la verdad? No, no lo hagas.

En un sitio con concurrencia entonces tendrías varias llamadas a ese temp que como es un archivo físico cambia con cada llamada entregando o código erroneo ó errores mientras se copia...no, no es una alternativa viable.

Además por ahí al final estás ejecutando código de todas maneras ¿no?

server.execute("index.asp")

No basta con hacer lo mismo:

server.execute(modulo)

Donde modulo contiene la ruta y el nombre del archivo.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 04/06/2008, 13:37
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

ja, realmente releí y no entendí.

no entiendo el porque copiar, y porque no seguir usando los include de esa forma asi obtienes tu variable y cargas el asp que corresponde a tu variable.

+ creas tu pagina default.asp esta contiene tres secciopnoes (cabecera, menu izquierda, y contenido)
+ en la de contenido pones el include llamado contenido.asp
++ dentro de contenido.asp haces tus "select case" y cargas el aso que deseas que sea el contenido del sitio

+ es básicamente el proceso que yo uso, pero igual si alguien tiene ua solucion mas viable que la comente

mi ejemplo

pagina defautl.asp
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">

<
head>
<
meta content="es-sv" http-equiv="Content-Language" />
<
meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<
style type="text/css">
.
style1 {
    
text-alignleft;
}
</
style>
</
head>

<
body>

<
table align="center" style="width: 675px">
    <
tr>
        <
td colspan="2">Tu banner o animacion top</td>
    </
tr>
    <
tr>
        <
td class="style1" style="width: 30%" valign="top">Menú<br />
        <
br />
        + <
a href="?cargar=">presentación</a><br />
        + <
a href="?cargar=ListarNoticias">noticias</a><br />
        </
td>
        <
td class="style1" valign="top">
            <!-- 
#include file ="include_contenido.asp" -->
        
</td>
    </
tr>
    <
tr>
        <
td colspan="2">Tu pie de pagina</td>
    </
tr>
</
table>

</
body>

</
html
pagina include_contenido.asp
Código PHP:
<%
select case request("cargar")
case 
""
%>
    <!-- 
#include file ="contenido_intro.asp" -->
<%
case 
"ListarNoticias"
%>
    <!-- 
#include file ="contenido_listar_noticias.asp" -->
<%
end select
%> 
página contenido_intro.asp
Código PHP:
<head>
<
meta content="es-sv" http-equiv="Content-Language">
</
head>

<
h1>Bienvenidos</h1>
<
p>usted esta en la pagina de inicio</p>
<
p>&nbsp;</p
página contenido_listar_noticias.asp
Código PHP:
<h1>Listado de noticias</h1>

<
p>&nbsp;</p>
<
ul>
    <
li>noticia 1</li>
    <
li>noticia 2</li>
    <
li>noticia 3</li>
    <
li>noticia 4</li>
</
ul>
<
p>&nbsp;</p
es mi idea

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
  #4 (permalink)  
Antiguo 04/06/2008, 13:55
 
Fecha de Ingreso: agosto-2004
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Cita:
Iniciado por u_goldman Ver Mensaje
Hola rProgged,

La verdad, la verdad? No, no lo hagas.

En un sitio con concurrencia entonces tendrías varias llamadas a ese temp que como es un archivo físico cambia con cada llamada entregando o código erroneo ó errores mientras se copia...no, no es una alternativa viable.

Además por ahí al final estás ejecutando código de todas maneras ¿no?

server.execute("index.asp")

No basta con hacer lo mismo:

server.execute(modulo)

Donde modulo contiene la ruta y el nombre del archivo.

Saludos
Hola,

Gracias, pero no es lo mismo. Por que mira, lo que busco es tener en el "hijo" las librerias de funciones que correspondan a ese módulo, en este caso seria el "padre" el que heredaria las funciones del "hijo", no al revés.

Que lástima que con ASP esto sea tan complejo, con php es muy fácil

Pero bueno, creo que la alternativa es AJAX, le daré una vuelta y tomaré alguna decisión.

Gracias :D

Rodrigo
  #5 (permalink)  
Antiguo 04/06/2008, 14:04
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Hola de nuevo rProgged, a lo mejor no entiendo por donde va la cosa, pero ¿Qué tiene que ver AJAX en todo esto?

¿Tu problema es de estructura o de diseño?
¿A qué le llamas padre y a que le llamas hijo?

Supongo que te refieres a que un archivo ejecutado se maneja como una cápsula en donde no puede tomar variables externas, dicen por ahí que por querystring se puede, pero la verdad no lo he intentado ni lo intentaré

server.execute("archivo.asp?var=1")

Bueno siendo honestos si lo intenté alguna vez pero no me salió, la cuestión aquí es que en mi humilde opinión, los includes dinámicos son una cosa que realmente no es necesario, podrías estructurar tu código de manera tal que realmente no necesites esa parte, a mi modo de ver, un include debería ser simplemente para hacer llamadas a él, y no para que se autoejecute, pero igual, es sólo mi opinión, y al parecer es demasiado tarde para persuadirte de que tomes otro camino.

Saludos, y espero que nos cuentes en que terminó todo esto.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #6 (permalink)  
Antiguo 04/06/2008, 14:32
Avatar de JuanRAPerez
Colaborador
 
Fecha de Ingreso: octubre-2003
Mensajes: 2.393
Antigüedad: 21 años, 6 meses
Puntos: 27
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Cita:
Iniciado por u_goldman Ver Mensaje
Supongo que te refieres a que un archivo ejecutado se maneja como una cápsula en donde no puede tomar variables externas, dicen por ahí que por querystring se puede, pero la verdad no lo he intentado ni lo intentaré

server.execute("archivo.asp?var=1")


igual en tu pagina de noticias.asp
puedes colovar el segundo valor de tu URL

default.asp?cargar=ListarNoticas&seccion=Internaci onales

y en noticias haces el request("seccion") y muestras el bloque de programación que te interese.

suerte
__________________
JuanRa Pérez
San Salvador, El Salvador
  #7 (permalink)  
Antiguo 04/06/2008, 14:54
 
Fecha de Ingreso: agosto-2004
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Hola juanPerez,

Mira, el tema es que los SSI se ejecutan antes del ASP, por lo tanto por mucho que tengas select al final se incluyen igual todos los archivos que tengas como SSI. Esa parte de la solución que propones es la que no me gusta.

Pero bueno, sigo mirando a ver que encuentro :D

Gracias,

Rodrigo
  #8 (permalink)  
Antiguo 04/06/2008, 15:26
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Cita:
Iniciado por JuanRAPerez Ver Mensaje
igual en tu pagina de noticias.asp
puedes colovar el segundo valor de tu URL

default.asp?cargar=ListarNoticas&seccion=Internaci onales

y en noticias haces el request("seccion") y muestras el bloque de programación que te interese.

suerte
Si, si claro está, pero yo estaba exponiendo la idea de la simulación de includes dinámicos mediante Server.Execute.

Salud
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #9 (permalink)  
Antiguo 04/06/2008, 16:39
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Sinceramente yo creo que ya el tema de los includes dinamicos con ASP esta ya agotado

Hay varios sitios que han tratado el tema ya algunos años atrás de forma bastante completa:

http://classicasp.aspfaq.com/files/d...ude-files.html
http://aspnet.4guysfromrolla.com/web...0199-1.3.shtml
http://www.asp101.com/articles/micha...es/default.asp

etc, etc, etc

En lo personal pienso que la alternativa que propones no es más que agregarle un paso extra (crear el archivo temporal) a la solución ya conocida de usar el Server.Execute dentro de un condicional

Saludos
  #10 (permalink)  
Antiguo 05/06/2008, 07:55
 
Fecha de Ingreso: agosto-2004
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Hola a todos,

Pues bien, el tema es que yo quiero tener un archivo con funciones propias de cada módulo (agregar, editar, eliminar del módulo noticias, del módulo eventos, etc) y luego incluir ese archivo con funciones en otro archivo que tendrá la parte gráfica.

Teniendo un archivo "padre" que es el que genera la gráfica de navegación ahora quiero que ese archivo de acuerdo a un parámetro puede tomar las funciones desde un archivo externo (hijo) y para eso, hasta aquí el server.execute no me sirve. En realidad ninguna de las soluciones anteriores da en el clavo, ya que no quiero mostrar codigo en la pagina, de hecho la pagina que necesito incluir no mostrará nada por que sólo contiene funciones, lo que quiero es incluir esas funciones en asp dinámico para usarlas más adelante. Hasta aquí sólo he conseguido eso usando SSI, y el problema es el mismo de siempre, que pueda obtener el nombre del archivo a incluir desde una BD.

De todas formas no es algo para alertarse U_G ya que todavia no empiezo el desarrollo, sólo le estoy dando una vuelta para ver cuál camino tomar. Si este no es el mejor, entonces buscaré la alternativa, de todas maneras agradezco tu preocupación.

Personalmente ya empiezo a echar de menos el php =D

Gracias por los aportes,

Saludos

Última edición por rProgged; 05/06/2008 a las 08:04
  #11 (permalink)  
Antiguo 05/06/2008, 08:06
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Pues no se cómo estará la estructura de tu proyecto, pero es mucho más intuitivo si generas clases, es solo una idea:

Clase pagina
Clase noticias
Clase eventos

Todos están a manera de include y tienen métodos comunes, basados en un parámetro haces que tu controlador cree el objeto y llame al método correspondiente.

Código:
valor = Request.QueryString("objeto") 'Este valor puede llegar de cualquier lado
metodo = Request("metodo") 'listar

select case valor
   case "pagina"
      Set objeto = new pagina
   case "noticias"
     Set objeto = new noticia
   case "evento"
     Set objeto = new evento
End Select

if objeto not is nothing then
  select case metodo
     case "listar"
        algunObjetoContenedor = objeto.listar
        'proceso
     case "agregar"

     case "editar"
  end select
end if
Como te decia anteriormente, soluciones hay muchas, y realmente es muy raro algun caso en el que necesariamente tengas que utilizar includes dinamicos, regularmente puedes controlar todo sin necesidad de hacerlo, pero cada cabeza es un mundo.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 05/06/2008, 08:15
 
Fecha de Ingreso: agosto-2004
Mensajes: 131
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Realmente muchas gracias U_G, de verdad le hallo mucho sentido a lo que propones, le daré una vuelta por ese lado.

Sólo tengo una duda, las diferentes clases con sus métodos tendrian que estar todas en un mismo archivo?, lo que me complica es tener que inlcuir más que el código necesario, al final con clases eso es menor por que como instanceas a la clase que necesitas no hay problema de que esté el otro código, pero quisiera evitarme tener que incluir código innecesario. ¿Hay alguna forma de hacer eso o es necesario inlcuir todos los archivos de todas las clases?

Nuevamente muchas gracias por tu ayuda y paciencia, ya ves que estoy abusando un poco de ella :D

Saludos,

Rodrigo
  #13 (permalink)  
Antiguo 05/06/2008, 08:41
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 3 meses
Puntos: 98
Respuesta: Propongo solución alternativa a includes dinámicos. Opiniones por favor.

Podrías poner todas las clases en un solo archivo, se que te quieres ahorrar todos esos includes pero si están encapsulados, me imagino -no lo se a ciencia cierta- no debería representar mayor trabajo para el servidor, quizás al final es lo mismo que ponerlos en un solo archivo, el único problema que yo le vería a ponerlas todas juntas es el mantenimiento

¿Alguna vez te ha tocado hacer modificaciones en un archivo con varios miles de líneas de código?

La verdad que se vuelve un desastre, pero bueno, eso ya es a gusto del desarrollador, ahora ya no trabajo mucho con ASP, pero casi siempre traté de ahorrarles dolores de cabeza a quienes les tocara mantener mis aplicaciones -aunque estoy seguro que más de uno me ha de haber dicho uno que otro improperio -.

Nada que agradecer Bodrigo, es bueno poder compartir los diferentes puntos de vista.

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
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 19:32.