Inclusiones en PHP
Mediante este tutorial aprenderemos a usar PHP (sin tener por qué saber programar en PHP) para optimizar nuestro sitio y facilitar su actualización cada vez que queramos hacer cambios.
PHP nos ayuda en nuestra tarea de construcción de páginas web. Se inventó para eso, pero no es necesario saber programar para usarlo. Si sabemos copiar y pegar, este tutorial nos arreglará un poco la vida.
Las ventajas son muchas:
- Obtendremos menos páginas para editar/subir al servidor. Todo el contenido estará en un único archivo.
- Con este tutorial en concreto obtendremos URLs más cortas, del tipo index.php?poemas en lugar de index.php?z=poemas.php
- Las partes que siempre se repiten (cabecera y pie) se almacenarán en archivos separados, de modo que sólo habrá que construirlos o modificarlos una vez y luego se mostrarán en el navegador en todas las páginas gracias a las inclusiones.
- Las páginas se cargarán más rápido gracias a la menor cantidad de código. Este método emplea una única línea de PHP para cada sección de nuestro sitio, de manera que apenas hay nada que editar, lo tendremos todo listo en cuestión de minutos.
Yo aprendí a hacer esto con Codegrrl y lo uso prácticamente en todos mis sitios, así que me he basado en su tutorial para facilitarles la tarea a los hispanohablantes que empiezan el mundo de la construcción de sitios web.
Primer paso: comprobar que tenemos PHP instalado en el servidor
Antes de aprender a efectuar inclusiones con PHP deberemos asegurarnos de que el servidor en el que van a estar alojadas nuestras páginas tiene instalado PHP. Si ya estamos seguros, podemos saltarnos este paso. Si no disponemos de un servidor de tales características, podemos encontrar una lista de servidores gratuitos que soportan PHP.
Si no estamos seguros si en nuestro servidor podemos hacer experimentos con PHP, podemos hacer la prueba siguiente: abrimos el Bloc de notas u otro editor de texto similar y escribimos en él “Funciona, ¡genial!”; guardamos el archivo como “test.php”; lo subimos al servidor y abrimos en el navegador ese archivo.
Si podemos ver “Funciona, ¡genial!” es que PHP funciona en nuestro servidor. Si no, desafortunadamente este tutorial no nos servirá para mucho.
Pero bueno, partamos entonces suponiendo que sí podemos jugar con PHP en nuestro servidor.
Comenzamos
Mostraré cómo emplear esta técnica mediante ejemplos.
Digamos que ya tenemos una página personal con seis secciones: “bienvenida” “sobre mí”, “mi poesía” “mis fotos” “enlaces” y “créditos”.
Abrimos todas esas páginas en un editor de textos y luego creamos un nuevo archivo también en el editor de textos (tendremos un montón de ventanas/pestañas abiertas, pero eso da cierto aire “profesional”, así que lo disfrutamos).
Copiamos entonces el siguiente código en el archivo nuevo y lo guardamos como index.php (o cualquier otro nombre, siempre y cuando la extensión sea .php):
<? //Copia el HTML que se repita en todas las páginas del sitio, esto es: la cabecera y el pie de la página. Guárdalos en archivos separados y nómbralos cabecera.inc y pie.inc respectivamente. //Ambos se incluirán automáticamente cada vez que se acceda a las secciones del sitio, de modo que sólo tendrás que modificar esos dos archivos cada vez que quieras modificar la interfaz (layout). include('cabecera.inc'); if(!$_SERVER['QUERY_STRING']) { ?> //Borra este comentario y pega aquí el HTML de tu página principal. Esta sección es la que se verá por defecto cuando se acceda a index.php. <? } elseif ($_SERVER['QUERY_STRING'] == "apartado1") { ?> //Borra este comentario y pega aquí el HTML de uno de los apartados de tu sitio (sin la cabecera ni el pie, obviamente). <? } elseif ($_SERVER['QUERY_STRING'] == "apartado2") { ?> //Borra este comentario y pega aquí el HTML de uno de los apartados de tu sitio (sin la cabecera ni el pie, obviamente). <? } elseif ($_SERVER['QUERY_STRING'] == "apartado3") { ?> //Borra este comentario y pega aquí el HTML de uno de los apartados de tu sitio (sin la cabecera ni el pie, obviamente). <? } elseif ($_SERVER['QUERY_STRING'] == "apartado4") { ?> //Borra este comentario y pega aquí el HTML de uno de los apartados de tu sitio (sin la cabecera ni el pie, obviamente). <? } elseif ($_SERVER['QUERY_STRING'] == "apartado5") { ?> //Borra este comentario y pega aquí el HTML de uno de los apartados de tu sitio (sin la cabecera ni el pie, obviamente). <? } include('pie.inc');?>
Lee el código y busca las líneas que empiezan por //. Son comentarios y explican qué tienes que hacer o cambiar. Cambia el texto entre comillas (“apartado1”, “apartado2”, etc.) para que se adapte a las secciones de tu sitio. Hay que tener en cuenta que el archivo donde escribamos todo esto tiene que tener la extensión .php, si no, no funcionará.
Adaptación
Adaptemos entonces este código a nuestro “sitio personal de ejemplo”:
Empezamos por localizar las partes de HTML que se repiten al principio y al final de todos nuestros archivos. Tomemos como ejemplo la hipotética página fotos.html.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title>Mi sitio güeb</title> <link rel="stylesheet" href="estilo.css" type="text/css" /> <script type="text/javascript" src="external.js"></script> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <div id="general"> <div id="cabecera"><h1>Mi sitio gúeb</h1></div> <div id="menu"> <h3>Menú</h3> <ul> <li><a href="yo.html">Sobre mí</a></li> <li><a href="poemas.html">Mi poesía</a></li> <li><a href="fotos.html">Mis fotos</a></li> <li><a href="enlaces.html">Enlaces</a></li> <li><a href="creditos.html">Créditos</a></li> <li><a href="index.html">Inicio</a></li> </ul> </div> <div id="contenido"> <h1>Fotos</h1> <p>No viajo mucho, pero cuando tengo esa oportunidad, hago muchas fotos. Aquí están las de mis últimos viajes:</p> <p> <img src="imagenes/foto1.jpg" alt="Foto 1" width="500" height="300" /> <img src="imagenes/foto2.jpg" alt="Foto 2" width="500" height="300" /> <img src="imagenes/foto3.jpg" alt="Foto 3" width="500" height="300" /> </p> </div> <div id="footer"> Construido por <strong>C</strong> inspirada por mi webcolega <a href="http://www.dominiodehache.ext/">H</a> - <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS válido</a> & <a href="http://validator.w3.org/check?uri=referer">XHTML válido</a>. <a href=" http://es.creativecommons.org/licencia/">Algunos derechos reservados</a>. </div></div> </body> </html>
cabecera.inc
<head> <title>Mi sitio güeb</title> <link rel="stylesheet" href="estilo.css" type="text/css" /> <script type="text/javascript" src="external.js"></script> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <div id="general"> <div id="cabecera"><h1>Mi sitio gúeb</h1></div> <div id="menu"> <h3>Menú</h3> <ul> <li><a href="yo.html">Sobre mí</a></li> <li><a href="poemas.html">Mi poesía</a></li> <li><a href="fotos.html">Mis fotos</a></li> <li><a href="enlaces.html">Enlaces</a></li> <li><a href="creditos.html">Créditos</a></li> <li><a href="index.html">Inicio</a></li> </ul> </div> <div id="contenido">
pie.inc
</div> <div id="footer"> Construido por <strong>C</strong> inspirada por mi webcolega <a href="http://www.dominiodehache.ext/">H</a> - <a href="http://jigsaw.w3.org/css-validator/check/referer">CSS válido</a> & <a href="http://validator.w3.org/check?uri=referer">XHTML válido</a>. <a href=" http://es.creativecommons.org/licencia/">Algunos derechos reservados</a>. </div> </div> </body> </html>
Suele usarse la extensión .inc para archivos que se van a incluir, pero también podemos usar la extensión .html o .php si nos apetece. Si vemos un archivo .inc directamente en el navegador se mostrará como texto simple, así que no es muy conveniente poner nada confidencial en ese tipo de archivos.
Vamos ahora a ocuparnos del contenido: copiamos la parte relevante de cada archivo .html que tengamos abierto (es decir: todo menos la cabecera y el pie) y lo pegamos en los lugares reservados a cada sección.
<?php //Copia el HTML que se repita en todas las páginas del sitio, esto es: la cabecera y el pie de la página. Guárdalos en archivos separados y nómbralos cabecera.inc y pie.inc respectivamente. //Ambos se incluirán automáticamente cada vez que se acceda a las secciones del sitio, de modo que sólo tendrás que modificar esos dos archivos cada vez que quieras modificar la interfaz (layout). include('cabecera.inc'); if(!$_SERVER['QUERY_STRING']) { ?> <h1>¡Hola!</h1> <p>Bienvenidos a mi sitio. Encantada de recibiros<p>. <? } elseif ($_SERVER['QUERY_STRING'] == "yo") { ?> <h1>Sobre mí</h1> <p>Me llamo C.:. tengo N años y vivo en X. <br />Las cosas que más me gustan en este mundo son A y B. <br />Reconozco que no me gustan demasiado ni M ni T ni V, pero bueno, así es la vida etc.</p> <? } elseif ($_SERVER['QUERY_STRING'] == "poemas") { ?> <h1>Poemas</h1> <p>En mis ratos libres escribo poesía. <br />He aquí una selección de los poemas que más les gustan a mis amigos: etc.</p> <? } elseif ($_SERVER['QUERY_STRING'] == "fotos") { ?> <h1>Fotos</h1> <p>No viajo mucho, pero cuando tengo esa oportunidad, hago muchas fotos. Aquí están las de mis últimos viajes:</p> <p> <img src="imagenes/foto1.jpg" alt="Foto 1" width="500" height="300" /> <img src="imagenes/foto2.jpg" alt="Foto 2" width="500" height="300" /> <img src="imagenes/foto3.jpg" alt="Foto 3" width="500" height="300" /> </p> <? } elseif ($_SERVER['QUERY_STRING'] == "enlaces") { ?> <p>Me gusta visitar las páginas de mis colegas en la Red. Comparto con vosotros mis enlaces:</p> <ul> <li><a href="http://un.colega.ext">Colega 1</a></li> <li><a href="http://otro.amigo.ex">Amigo 2</a></li> <li><a href="http://enlace.ext">Interesante 3</a></li> </ul> <? } elseif ($_SERVER['QUERY_STRING'] == "creditos") { ?> <p>Yo misma he diseñado y confeccionado el sitio gracias a cosas que he aprendido en >><a href="http://www.maestrosdelweb.com">Maestros del Web</a>, etc. </p> <? } include('pie.inc'); ?>
He escrito “creditos” sin tilde a propósito porque desgraciadamente el código no funciona si se incluyen caracteres especiales del español: conque sólo letras simples y números.
Podemos añadir tantas líneas “elseif” como queramos según el número de secciones del sitio, y darles cualquier nombre siempre y cuando no se repitan ni tengan caracteres especiales.
Para acceder a cada sección de modo que se muestren en páginas diferentes, no hay más que enlazarlas de este modo index.php?nombreseccion, con lo que tengáis entre comillas en el código en lugar de nombresección.
Si se usa el código del ejemplo, las URL que tendremos que poner en el menú de navegación serán estas:
- Sobre mí: index.php?yo
- Mis poemas: index.php?poemas
- Mis fotos: index.php?fotos
- Páginas amigas: index.php?enlaces
- Créditos: index.php?creditos
La página de bienvenida, la que aparece por defecto, es index.php, como ya sabemos.
De esta forma, al final nuestro archivo cabecera.inc del ejemplo tendrá este aspecto:
<head> <title>Mi sitio güeb</title> <link rel="stylesheet" href="estilo.css" type="text/css" /> <script type="text/javascript" src="external.js"></script> <meta http-equiv="imagetoolbar" content="no" /> <meta http-equiv="content-Type" content="text/html; charset=iso-8859-1" /> </head> <body> <div id="general"> <div id="cabecera"><h1>Mi sitio gúeb</h1></div> <div id="menu"> <h3>Menú</h3> <ul> <li><a href="index.php?yo ">Sobre mí</a></li> <li><a href="index.php?poemas">Mi poesía</a></li> <li><a href="index.php?fotos ">Mis fotos</a></li> <li><a href="enlaces.html">Enlaces</a></li> <li><a href="creditos.html">Créditos</a></li> <li><a href="index.html">Inicio</a></li> </ul> </div> <div id="contenido">
Para sitios más largos, con secciones principales y subsecciones dentro de ellas es más conveniente dividir el sitio entre varios archivos correspondientes a las secciones principales e incluir las subsecciones por medio de los "elseif".
De este modo evitaremos encontrarnos con un index.php gigantesco para el que necesitaremos mover la barra de desplazamiento varios kilómetros para encontrar las partes que queremos editar.
En mis sitios plurilingües uso ese sistema: un archivo php con sus respectivas subsecciones para cada lengua: esp?yo – esp.php?poemas // fra.?moi – fra.php?poems // por.php?eu –por.php?poemas.
Nota:
Se suele pensar que las inclusiones se utilizan únicamente para controlar cabeceras y pies. Lo cierto es que se pueden usar para incluir el contenido de cualquier archivo en cualquier archivo PHP. Por ejemplo, si queremos insertar un formulario de contacto en algunas secciones, guardamos el formulario en un archivo separado (por ejemplo,
direcc.inc y lo incluimos de este modo:
<?php include('cabecera.php');?> <h1>Hola a todos</h1> <p>Hoy hablaremos de las propiedades físicas de la naranja ibérica. Blah, blah.</p> <p>Si quieres sugerir temas escríbenos utilizando el siguiente formulario:</p> <?php include('direcc.inc');?> <p>La próxima semana hablaremos del tomate de la llanura y la zanahoria africana.</p> <?php include('pie.php');?>
como consejo de seguridad, no pongais extensiones .inc, pues el codigo de esos includes podria ser accedido desde el navegador en formato de texto plano.
Tienes razón, iba a haberlo advertido, pero pensaba sólo en las cabeceras y los pies.
Gracias, intentaré modificar el artículo un poco.
Bueno, de hecho ya lo había advertido en el artículo. Luego cada cual que elija
no te entendi ni mi.. pero te agradeceriua si es que modificas mi web personal ok..mandeme su mensaje a mi mail [email protected]
pero con el codigo del ejemplo no estamos obligando al usuario a cargar el contenido de todo el sitio, aunque quiera ver una sola página? o solo se carga en el caso de que se cumpla la condición? (dejo un consejito: si queremos ponerle scroll a un include lo ponemos dentro de un div y le ponemos de estilo “overflow: scroll” y nos sale con barras de desplazamiento)
Si entendí correctamente tu pregunta X, en realidad el que debe cargar el archivo con todo el sitio es el servidor, luego éste lo procesa y el usuario solo obtiene el resultado, por lo que si algún if evita un include, pues bien, el usuario ni se entera.
Graciuas por tu respuesta joako, ahora entiendo un poco mas php, y tengo ganas de aprender mas.. yo lo estaba probando un include,al incluir un script de fotolog dentro de la interface de mi pagina: http://www.pinkngreen.com.ar/fotolog/myflog.php pero el problema que tengo es que colapsan los estilos de la pagina con los del fotolog, asi que deberia modificar los estilos del fotolog para que se adapten con los de la página.
Lo verdaderamente importante es que nuestro maravilloso idioma se va haciendo cada vez más presente en la red. Espero que otras utilidades y servicios, más pronto que tarde, nos lleguen en nuestra lengua madre.
Ahora como puedo mostrar una web en un div o span como si fuera un iframe o algo por el estilo
hola, Trabajo con asunto de Bienes Raices, Existira una persona que me cree una pagina para poner todas mis propiedades, y que pueda quitarla online, es por eso que he entrado en este Site. alguien que aunque me cobre, lo haga bien economico. solo por ayudarme, ya sea que copie una y solo le modifique los nombres escribeme a [email protected]
Yo uso includes tambien .txt y funcionan. Pero mejor creo son las .php.
Realmente no creo que sea ni mejor ni peor.
Ponerlas como .inc es prácticamente lo mismo que ponerlas como .txt. A mí no me importa que “me vean” el código, por eso uso .inc. Los “pudorosos” siempre pueden recurrir a la extensión .php
Buenas, he descubierto este interesante artículo a través del newsletter de maestros.
Me parece muy interesante, es algo que andaba buscando hace tiempo pero por falta de tiempo no encontré.
He intentado llevarlo a cabo siguiendo sus explicaciones pero hay algunos puntos en los que pierdo el rumbo. Sería mucho pedir que alguien me pudiera mandar un ejemplo ya realizado? Creo que viendolo ya programado me sería más rápido de pillar.
Muchas gracias Calitoe y a todo el equipo de maestros.
Aquí os dejo mi mail.
Un saludo.
[email protected]
hola este articulo esta muy completo ok.
Xiic, si unes los pedazos de código, lo verás más claro.
En http://www.hablandoencristiano.info/?cat=12 he puesto una actualización corrigiendo un par de fallos tipográficos y algo más.
El manual este está muy interesante aunque no es de mi gusto hacer así las cosas. Lo he aprobechado porque tenia que entregar un par de cosas con este estilo y me fue de facil aprendizaje. Yo personalmente prefiero hacer las cosas en php usando clases: simplifica mucho todas las operaciones y deja un codigo mas reducido(aunque algo más dificil de corregir a veces)
hola que tal estoy haciendo una miniaplicacion que se conecta a una tabla en la base de datos de mysql pero me marca un error con la funcion mysql_connect a pesar de que en el archivo php.ini active la siguientes lineas extension=php_mysql.dll
extension=php_mysqli.dll
me marca el siguienet error Fatal error: Call to undefined function mysql_connect() in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\mipricon\TMP48lfgh10al.php on line 40
alguien sabra por que gracias
si alguien
hola!!necesitaria saber como hago para q aparezca la fecha en uno de los extremos superiores de la home,y como se hace para poder poner al pie de la pagina en forma de comentario la resolucion q esta utilizando dicho usuario en ese momento,necesito ejemplos..Desde ya muchas gracias
Lode la fecha se hace con javascript, no con php.
Good post, will frequent your site.