Tutoriales ilustrados paso a paso de diseño y desarrollo web.
Los includes son la mejor forma de optimizar tu website sin necesidad de saber nada de programación en Php. En este manual descubrirás cómo usarlos para mantener estáticas zonas que se repiten en todas nuestras páginas (como la cabecera y el pie de página) consiguiendo que únicamente se recargue el contenido.
Al finalizar este tutorial habrás elaborado un website completo a base de includes como el que aparece en el siguiente ejemplo: ver demo.
Para ello hemos dividido este tutorial en 4 partes:
Manos a la obra!
Php es un lenguaje de programación que únicamente puede ser interpretado por el Servidor. Por lo tanto, lo primero que tenemos que hacer es instalar un Servidor, como Apache, en nuestro ordenador. En el servidor se ejecutarán todas las instrucciones de Php y las convertirá en marcación html (puedes ver en el código fuente del demo como no ha quedado rastro del lenguaje php y sólo vemos código html).
Instalarlo nos tomará menos de 5 minutos, con la ayuda de un programa ejecutable llamado “Wamp” que integra “todo en uno”: el servidor Apache, el lenguaje Php, y la base de datos MySql.
Simplemente descarga el instalador de Wamp, ejecútalo y selecciona siguiente, siguiente, siguiente… hasta que se instale completamente.
Ahora que has terminado la instalación, fíjate en la parte inferior derecha de la “barra de tareas” de Windows: hay un nuevo icono
que nos indica que tu Servidor Apache ya está activo.
Veamos si funciona: abre tu navegador y escribe en la barra de direcciones la palabra localhost (éste es el nombre de tu servidor local) y presiona “enter”. Si aparece la siguiente página de bienvenida…

felicidades! Ahora tu ordenador es un servidor y estás listo para empezar a utilizar los includes de Php!
Ahora localiza el directorio “C:\wamp\www\” que se creó automáticamente al instalar el servidor Wamp en tu ordenador. Este directorio es precisamente tu localhost y es ahí donde debes insertar todas tus páginas web que requieran ser interpretadas por el Servidor.
Ahí crearemos una nueva carpeta con el nombre “includes_php” donde guardaremos todos los archivos que crearemos a lo largo de este tutorial: “C:\wamp\www\includes_php\”.
Primero vamos a crear nuestra página base y los “includes” o contenidos de cada sección.
Una buena idea es utilizar un editor de código decente, como Notepad++. Una vez que lo descargues y lo tengas instalado, dirigete a:
Preferencias > Documento Nuevo > y marca la casilla UTF-8 sin ‘BOM’.
Esta es la codificación de caracteres recomendada por el W3C y la utilizaremos en este tutorial.
Nuestra página base será común y corriente, con todas sus partes básicas:
A continuación tienes un ejemplo de cómo debe quedarte:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”es”> <head> <meta http-equiv=”Content-Type” content=”application/xhtml+xml; charset=UTF-8″ /> <title>Mi Website</title> <link rel=”stylesheet” href=”estilos.css” type=”text/css” /> </head> <body> <!– Cabecera –> <div id=”header”> <h1><a href=”">Tu Website</a></h1> <ul> <li><a href=”">ITEM 1</a></li> <li><a href=”">ITEM 2</a></li> <li><a href=”">ITEM 3</a></li> <li><a href=”">ITEM 4</a></li> </ul> </div> <!– Principal –> <div id=”main”> </div> <!– Pie –> <div id=”footer”> <p>Este demo es parte de un tutorial creado por <a href=”http://www.web2.0facil.com/”>Web2.0fácil</a>. <br /> <a href=”http://creativecommons.org/licenses/by/2.5/pl/deed.es”> Licencia Creative Commons</a>.</p> </div> </body> </html>
Guárdala como “index.php” en el directorio “C:\wamp\www\includes_php\”.
Como notaste, las etiquetas de la zona principal de nuestro index ( <div id=”main”> </div> ) se encuentran vacías, puesto que es ahí donde se insertarán los includes o contenidos que se incluirán dinámicamente. En ellos puedes utilizar todas las etiquetas que quieras, pero no hace falta que pongas head o body, simplemente deberán lucir tal cual si los hubieras “arrancado” de la zona principal de tu página base.
En documentos nuevos y por separado, crearemos cada uno de los includes como verás a continuación:
<h2>Título del ítem 1</h2>
<p>Esta es la primera sección del website y aquí puedes insertar todo lo que tú quieras:
divisiones, tablas, listas, etc.</p>
<h2>Título del ítem 2</h2>
<p>Aquí tenemos otra página que podría ser la segunda sección del website.</p>
<h2>Título del ítem 3</h2>
<p>…y esta otra, sería la tercera sección.</p>
<h2>Título del ítem 4</h2>
<p>La página que ahora ves es la cuarta y última sección del website
(tú puedes agregar tantas como quieras).</p>
<h2>Hola!</h2>
<p>Este es un demo de un website que utiliza <strong>includes</strong> de php.</p>
<p>Puedes navegar a través de los diferentes ítems y comprobar que
<strong>únicamente cambia el texto en la zona principal</strong>
de la página, el resto de ella permanece intacto sin recargarse.</p>
<p>Además, con ayuda de un sencillo archivo llamado <strong>.htaccess</strong>
hemos creado url’s amigables (tanto para el usuario como para los buscadores)
para cada página de tu web.</p>
Ahora, regresemos a nuestro documento “index.php” donde crearemos el script de php que consistirá en:
<?php
apertura del script.
switch
evita que un simpático hacker incluya contenido no deseado.
case
indicará la acción a efectuar en cada caso.
include
aquí insertaremos el directorio del archivo a incluir.
default
determinará el archivo que se incluirá por omisión.
?>
indicará que el script ha llegado a su fin.
Lo insertaremos entre las etiquetas de nuestra zona principal (main), de tal forma que quede así:
<!– Principal –>
<div id=”main”>
<?php
switch ($_GET[’go’])
{
case 1:
include(”contenido1.php”);
break;
case 2:
include(”contenido2.php”);
break;
case 3:
include(”contenido3.php”);
break;
case 4:
include(”contenido4.php”);
break;
case 0:
default:
include(”inicio.php”);
}
?>
</div>
Ahora solo tenemos que crear los enlaces en nuestro menú de navegación que activen cada caso del script. Por lo tanto, no especificaremos url’s normales, sino instrucciones en php.
<!– Cabecera –> <div id=”header”> <h1><a href=”index.php?go=0“>Tu Website</a></h1> <ul> <li><a href=”index.php?go=1“>ITEM 1</a></li> <li><a href=”index.php?go=2“>ITEM 2</a></li> <li><a href=”index.php?go=3“>ITEM 3</a></li> <li><a href=”index.php?go=4“>ITEM 4</a></li> </ul> </div>
Guarda los cambios de index.php y… ahí lo tienes! Tu página con includes funcionando. Ahora sólo nos queda “pulirla” en pro del posicionamiento y la usabilidad
Este paso es realmente sencillo, solo requiere crear una nueva “clase” en nuestra hoja de estilos con los atributos que tu quieras. En el demo que viste, simplemente agregamos un margen superior y cambiamos el color del texto (de rojo a blanco) y la clase la llamamos “activo”. Entonces en nuestra hoja de estilos (estilos.css) agregaremos las siguientes líneas:
.activo{
border-top: 1px solid #fff;
color: white;}
Ahora, en nuestro documento “index.php” nos ubicaremos en el menú de navegación y daremos las instrucciones correspondientes en php para que al activarse un determinado caso en el script, aparezca la clase que acabamos de definir. Esto lo haremos con ayuda del condicional “if” y la función “echo” que se encargará de imprimir la clase en nuestro html.
<!– Cabecera –>
<div id=”header”>
<h1><a href=”index.php?go=0″>Tu Website</a></h1>
<ul>
<li><a <?php if($_GET[’go’]==1){echo ‘class=”activo”‘;}?> href=”index.php?go=1″>ITEM 1</a></li>
<li><a <?php if($_GET[’go’]==2){echo ‘class=”activo”‘;}?> href=”index.php?go=2″>ITEM 2</a></li>
<li><a <?php if($_GET[’go’]==3){echo ‘class=”activo”‘;}?> href=”index.php?go=3″>ITEM 3</a></li>
<li><a <?php if($_GET[’go’]==4){echo ‘class=”activo”‘;}?> href=”index.php?go=4″>ITEM 4</a></li>
</ul>
</div>
Estas instrucciones puedes insertarlas en cualquiera de las etiquetas del html, no es necesario que se trate de un enlace para funcionar.
El nombre que deseamos que aparezca como “title” de cada página web lo definiremos en la url de cada enlace y luego crearemos una sencilla instrucción que los recoja y muestre. El nombre no debe contener espacios, en su lugar, puedes agregar guiones bajos que después eliminaremos.
<!– Cabecera –>
<div id=”header”>
<h1><a href=”index.php?go=0″>Tu Website</a></h1>
<ul>
<li><a <?php if($_GET[’go’]==1){echo ‘class=”activo”‘;}?> href=”index.php?go=1&title=Item_1“>ITEM 1</a></li>
<li><a <?php if($_GET[’go’]==2){echo ‘class=”activo”‘;}?> href=”index.php?go=2&title=Item_2“>ITEM 2</a></li>
<li><a <?php if($_GET[’go’]==3){echo ‘class=”activo”‘;}?> href=”index.php?go=3&title=Item_3“>ITEM 3</a></li>
<li><a <?php if($_GET[’go’]==4){echo ‘class=”activo”‘;}?> href=”index.php?go=4&title=Item_4“>ITEM 4</a></li>
</ul>
</div>
La instrucción consistirá en crear una variable con el nombre de “$titulo” (el símbolo de dólar declara que se trata de una variable), la cual debemos definir con un valor. En este caso, será el mismo que especificamos en el atributo “title” en la url de nuestras páginas. La función “$_GET[’title’]” se encargará de recoger ese valor.
Los nombres recogidos serán impresos en nuestro html mediante la función “echo”, a la vez remplazaremos los guiones bajos por espacios con la ayuda de otra función llamada “str_replace” donde se define: 1.el símbolo a buscar, 2.el símbolo por el que será sustituido y 3. la frase original.
Insertemos, pues, estas instrucciones entre las etiquetas “title” en el HEAD de nuestro documento de la siguiente forma:
<head>
<meta http-equiv=”Content-Type” content=”application/xhtml+xml; charset=UTF-8″ />
<title>Mi Website. <?php $titulo=$_GET[’title’]; echo str_replace(”_” , ” ” , $titulo)?></title>
<link rel=”stylesheet” href=”estilos.css” type=”text/css” />
</head>
Por cuestiones de identidad corporativa, es indicado que permanezca en primer lugar el nombre de tu website y después agregues el nombre de la sección donde se encuentra el usuario.
Con ayuda de un sencillo archivo llamado “.htaccess” es posible transformar nuestras url’s llenas de instrucciones de php, en url’s amigables que sean fácilmente memorizables y concuerden con el tema de la página. En un nuevo documento de tu editor, traduciremos nuestras url’s mediante una serie de reglas con la siguiente estructura:
“ RewriteRule ^nueva_url_amigable$ url_original [L] ”
de tal forma, que tu archivo lucirá como se muestra a continuación:
RewriteEngine On RewriteRule ^index$ index.php?go=0 [L] RewriteRule ^item1$ index.php?go=1&title=Item_1 [L] RewriteRule ^item2$ index.php?go=2&title=Item_2 [L] RewriteRule ^item3$ index.php?go=3&title=Item_3 [L] RewriteRule ^item4$ index.php?go=4&title=Item_4 [L]
Guárdalo como .htaccess (tal cual, con el punto inicial, doble “c” y doble “s”!) en la misma carpeta donde hemos guardado todo.
Para que este archivo funcione, tenemos que activar el rewrite_module del Servidor Apache: simplemente dirígete al icono de Wamp
ubicado en la “barra de tareas” de Windows; da un clic sobre él y selecciona “Apache modules”. En la lista que se desplegará, verifica que esté activada (marcada con una flechita) la opción “rewrite_module”. Si no lo está, da un clic sobre ella para activarla.
Ahora solo nos resta cambiar las url’s en nuestros enlaces:
<!– Cabecera –>
<div id=”header”>
<h1><a href=”index“>Tu Website</a></h1>
<ul>
<li><a <?php if($_GET[’go’]==1){echo ‘class=”activo”‘;}?> href=”item1“>ITEM 1</a></li>
<li><a <?php if($_GET[’go’]==2){echo ‘class=”activo”‘;}?> href=”item2“>ITEM 2</a></li>
<li><a <?php if($_GET[’go’]==3){echo ‘class=”activo”‘;}?> href=”item3“>ITEM 3</a></li>
<li><a <?php if($_GET[’go’]==4){echo ‘class=”activo”‘;}?> href=”item4“>ITEM 4</a></li>
</ul>
</div>
Y eso es todo… terminamos!!!
Tu página puedes verla en tu localhost con la siguiente dirección:
http://localhost/includes_php/
y aquí tienes un ejemplo de cómo debió quedarte:
ver demo
Si te has perdido en algún paso o no te ha funcionado, puedes bajar todos los archivos comprimidos en formato .zip que hicimos a lo largo de este tutorial:
Esto fue todo, espero que este tutorial te haya sido útil!!!
No olvides dejar un comentario, duda, sugerencia… ![]()
Hasta la próxima!
31 Responses for "Tutorial: Includes con Php."
pues como dije en FDW revisa el link de descarga de los archivos
Gracias por tu dedicación y sobre todo por no pedir ninguna cosa para la descarga, vamos a probarlo, me parece que está muy bien explicado.
Gracias Karen por este sencillo pero práctico manual. PRobe un método parecido hace tiempo pero no entendi nada , solo lo hacia. Ahora la duda que tengo es que de este modo el title que nos aparece es siempre el mismo. No se si esto influira en los posicionamientos. Me han pasado unos parametros para hacerlo a traves de funciones “str_replace” o de una array, que opinas tú?
Ya te puse en mis favoritos. Muy bueno el manual
Buenas,
Me ha servido de mucho este tutorial. Con el he conseguido entender el mod_rewrite de una vez por todas.
Me gustaria hacer un apunte en el .htaccess para que tenga dos lineas menos. Me explico, en vez de estas 4 lineas:
RewriteRule ^item1$ index.php?go=1 [L]
RewriteRule ^item2$ index.php?go=2 [L]
RewriteRule ^item3$ index.php?go=3 [L]
RewriteRule ^item4$ index.php?go=4 [L]
cambiarlas por estas dos:
RewriteRule ^index$ index.php?go=0[L]
RewriteRule ^item(\d+)$ index.php?go=$1 [L]
Gracias. Un saludo. aitiba
Yo cambie los titles repitiendo el mismo switch que para el menu, con la opcion de replace de php:
$cadena= “title”;
$cadena= str_replace(”title”, “”. htmlentities($titulo) . “” , $cadena);
echo $cadena;
claro que el problema esta en que tengo repetido el suwtich pues no se como aprovechar el mismo, pero funciona y para mi es un lobro.
¿cómo se hace que solo se recargue el include que cambia de contenido y no toda la página completa? La parte de menú quiero que se mantenga fija y sin recargarse cada vez ¿se puede?
me olvidé mencionar que se me recarga toda cuando tengo archvios .swf y es justamento lo que quiero uqe quede fijo
Me ayudo mucho el demo presentado.
Muchas gracias
Gente, please, ayuda.!!! Este tutorial ha sido fantástico y me funciona perfecto, hasta que…. incluyo en el menú un archivo .swf y chau… Ya deja de cargarse solo una parte de la página, y cada vez se carga completa toda la página. ¿que debo agregarle al archivo .swf para evitar que se recargue?? ¿cómo evito que haya una recarga completa de la página??? ayuditaaaaa, porfa
Muy interesante. Me parece estupendo y útil. Mucas gracias. Saludos
“Hola jaume, sí que se puede hacer lo que dices! de hecho estoy haciendo una web con includes, donde además del contenido, cambia el menú lateral, el menú de navegación y el “title”… sin recargarse la página!! puedes verla en este enlace (aun no está terminada) http://www.eurorewident.pl/index en realidad esto es muy fácil de hacer, si te parece bien en la tarde publico el método a seguir seguramente a más de uno le será útil. Saludos!!”
————————————————————————
hola estan muy interesantes tus aportes, se agradece mucho.
podrias publicar el metodo a seguir de esa pagina que esta realizando.
de antemano muchas gracias
hola netizen.k81
me podrias ayudar con un sitio en php que estoy realizando, el tutorial de includes me sirvio de mucho, ya que estoy empesando con php.
gracias
saludos
Genial Karen te felicito por este manual muy bien explicado.
Pero tengo una duda, tengo instalado todos los paquetes por aparte y me funciona a perfección con muchos archivos que he creado, pero en vez de la carpeta WWW la llame como WEB y no me funciona solo el index.php y me carga por defecto inicio.php
Pero al cargar Item1 o los otros no funciona.
En cambio ejecutándolo mi servidor desde una USB con WOS y que este tiene por archivo principal o localhost WWW me funciona sin problema.
¿ La pregunta es como debo hacer para que me funcione si mi archivo localhost es WEB en vez de WWW ?
Gracias de antemano.
Hola,
interesante articulo, yo utilizo AppServ que me parece mejor y he añadido a www la carpeta “includes_php” y al ejecutarlo me sale este error “Internal Server Error” generado por el .htaccess, como puedo solucionarlo?
Gracias.
Hola , le felicito, pues me dá este mensaje al tratar de ver la web.
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, admin@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Hola! He llegado hasta el apartado de “El script”, incluido, y al probar si funciona, me da el siguiente error:
Warning: include(”iniciophp”) [function.include]: failed to open stream: No such file or directory in /home/.booboo/dominio/dominio.com/php/index.php on line 140
A ver si me podéis ayudar, porque no se donde esta el problema…
Las páginas están dentro de dominio.com/php (donde dominio sustituye el nombre de mi dominio). Bueno, muchas gracias por este tutorial, netizen, pese a que me está saliendo este error, encuentro que está muuuy bien explicado todo.
Ah, lo que se ve en la linea 140:
138 case 0:
139 default:
140 include(”inicio.php”);
141 }
142 ?>
Todos los .php están dentro de la misma carpeta, incluido el index.php
De los mejores tutos que he visto sobre el tema
Problema resuelto, era un tema de comillas (en lugar de comillas de un tipo, estaban puestas las de otro… Es decir, donde estaban ” debían ir ‘, y viceversa…). Ahora tengo otro problema con el código, pero pocas esperanzas de solucionarlo, sigh. Buena página!
Hola… el tuto está muy bueno, es muy claro y me ayudó con la cuestión de las url amigables, que es lo que yo buscaba. =)
El resto, es lo que yo vengo implementando desde hace rato, y me puso contenta saber que estaba haciendo las cosas más o menos bien =D (esto de los includes, lo usaba, pero no sabía si era correcto o no usarlos así)
El comentario lo dejo, para quienes preguntan sobre el contenido en swf….
Y es que la página, SI se recarga… Por lo tanto el contenido en swf, se va a refrescar cada vez.
Lo bueno de este sistema, es tener un solo archivo para template, otro para el menú, etc.. El contenido es lo único que realmente cambia y esto resulta beneficioso en el tiempo de carga de la página, y en la edición de la misma, ya que si se necesitan cambios en un menú, solo se deberá tocar un archivo.
Pero más allá de que el menú y el template no cambien, SE VUELVE A CARGAR junto con el resto de la pagina cada vez que se toca un link…
Trabajar con includes no significa que la página no necesite recargarse con cada link. Hasta ahora lo único que conozco (que funcione) para no recargar los swf, es trabajar con marcos, lo cual no es recomendable.
Saludos =)
Pd.:
Si lo que necesitan es hacer una botonera desplegable o algo así… y que no se vuelva a plegar cada vez que refresca la pág… Se le pueden pasar parámetros al swf, para que se abra ya en el mismo frame o instancia en la que estaba en ese click. Es un poco limitado, pero bueh..
Hola que tal.
Muy bueno el tuto..pero tengo una consulta referente a este
yo tengo algo muy parecido llamando en switch a un archivo por default que muestra las noticias breves pero al hacer clic en ver mas me muestra la noticia pero no con el diseño estipulado en las hojas…. no lo conserva…
Que hago…. ayuda por favor
Muchas gracias por esta informacion.. me es util
saludos y visiten mi sitio web
http://kompartelo.com.ar
Hola, queria felicitarlos por el tutorial, esta exelente!!!….solo tenia unas dudas ya que recien estoy aprendiendo php:
1. Con este metodo no voy a tener problemas de usabilidad no? como sucede cuando se usa iframes o frames…
2. Al ser encontrado en los buscadores cierto contenido del site (ejemplo: dentro de contenido2.php) se mostrará el archivo php? (ejemplo: www.dominio.com/contenido2.php)
Muchas gracias de antemano!!!
Leave a reply