Uso y elección de archivos include

En este artículo, nos ocuparemos de ofrecer una solución al problema de uso de archivos include dinámicos.

Mediante la sentencia o podemos incluir otros archivos en una página ASP o sea que lo que se muestre en el navegador proceda de varios archivos. Esta solución es intersante para reaprovechar código que es utilizado en múltiples páginas y que cambia con poca frecuencia, facilitando así el mantenimiento de nuestro sitio web.

Un ejemplo práctico de esta situación es la cabecera o el pie de las páginas.

Include virtual vs. Include file

Según el tipo de path con el que se identifique el archivo a incluir deberá utilizar la palabra "virtual" o "file". En el primer caso se referencia un directorio virtual por lo que acostumbra a utilizar "/directorio_virtual/archivo_include.inc" (observa la orientación de la barra hacia la derecha). En el caso de utilizar la palabra "file", se está referenciando un path relativo al fichero que se está ejecutando, por ejemplo: "directorio_fisicoarchivo_include.inc" (observa en este caso la orientación de la barra hacia la izquierda).

No hay ningúna restricción respecto al nombre y extensión del archivo include, aunque es frecuente utilizar la extensión "inc" para distinguir e identificar estos tipos de archivo.

Includes dinámicos

Visto lo anterior te preguntarás como hacer casos particulares de esta situación, es decir mostrar un archivo include u otro según sea el caso.

A primera vista parece fácil solucionar este problema utilizando una variable para definir el nombre del archivo include que se quiere procesar. No te creas que todo finaliza aquí, ya que esta solución no es válida...

<%
Dim nombreArchivo

' Se recibe el nombre del fichero en una variable por método POST
nombreArchivo = Request.form("nombreArchivo")

' A continuación se ejecuta la instrucción include 
' con el nombre del archivo %>
<!--#include file="<%=nombreArchivo%>"--> 

Debido a que la sentencia include se ejecuta antes de que se procesen los scripts ASP, el código anterior no funcionará y dará un error de archivo no encontrado.

Por la misma razón tampoco es viable realizar un paso de parámetros dinámicos a través de URL en una sentencia include, es decir:

<!--#include file="cabecera.asp?seccion=<%=IdSeccion%>"--> 

A continuación se muestran algunas alternativas para conseguir nuestro propósito.

Solución "select case"

Esta solución presenta el problema de ser poco eficiente. Consiste en aplicar una estructura condicional de tipo "if...else" o "select case" para ejecutar aquel include que nos interese en cada caso.

Para llevar a cabo este ejemplo, deberá crear la siguiente página ASP (p.e: "selectcase.asp")que contendrá el tratamiento condicional anunciado anteriormente:

<%
nombreArchivo = Request("nombreArchivo")
select case nombreArchivo
       Case "seccion1" %>
         <!--#include file="cabeceraSeccion1.htm"--> 
    <% Case "seccion2" %>
         <!--#include file="cabeceraSeccion2.htm"--> 
    <% Case "seccion3" %>
         <!--#include file="cabeceraSeccion3.htm"--> 
<% end select %> 

El siguiente código muestra un ejemplo del contenido de los archivos "cabeceraSeccion1", "cabeceraSeccion2" y "cabeceraSeccion2" respectivamente

Archivo cabeceraSeccion1.htm

<h2>Cabecera de la seccion 1</h2>

Archivo cabeceraSeccion2.htm

<h2>Cabecera de la seccion 2</h2>

Archivo cabeceraSeccion3.htm

<h2>Cabecera de la seccion 3</h2>

Podrá poner en práctica este ejemplo, realizando las siguientes peticiones desde su navegador:

    http://nombreservidor/selectcase.asp?nombreArchivo=seccion1
    http://nombreservidor/selectcase.asp?nombreArchivo=seccion2
    http://nombreservidor/selectcase.asp?nombreArchivo=seccion3    

Al visualizar la página en el navegador, se estará visualizando solo un archivo include, sin embargo, el servidor habrá procesado los tres archivos, lo que es incecesario y hace que esta solución sea poco práctica e ineficiente.

Solución "FileSystemObject"

Esta solución está basada en el uso del objeto FileSystemObject reproduciendo el funcionamiento de la sentencia Include y prescindiendo de ésta.

Para facilitar la lectura y el reaprovechamiento del código, utilizaremos una función que puede leer cualquier fichero.

<%
Function LeerArchivo(nombreArchivo)
    nombreArchivo = server.mapPath(nombreArchivo) 
    Set fso = Server.CreateObject("Scripting.FileSystemObject")      
    set f = fso.openTextFile(nombreArchivo) 
    contenidoArchivo = f.readall 
    set f = nothing 
    set fs = nothing 
    LeerArchivo = contenidoArchivo
end function
%>
<%
nombreArchivo = "cabecera" & Request("nombreArchivo") & ".htm"
response.write(LeerArchivo(nombreArchivo)) 
%> 

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO