Вы находитесь на странице: 1из 9

http://proinf.

net/permalink/plantilla_php_co n_un_menu_de_2_niveles 6Plantilla PHP con un men de 2 niveles


Francisco 18-05-13 Programacin : PHP : Curs de confecci i publicaci de pgines web (Quadern CSS)

Inserta los contenidos de cada pgina Genera un men desplegable Le da un ttulo a cada pgina Genera enlaces amigables a las pginas Muestra la ruta de migas de pan

Modo de empleo
Supongamos que vamos a hacer una web con la siguiente estructura:

Inicio Dibujos animados o Los Simpson o Los Picapiedra o Dragones y mazmorras Tebeos o Conan el brbaro o Las aventuras de Tintn o El hombre araa Contctanos

Descargar la web del ejemplo desde ejemplo.7z

Pasos a seguir:
1. Crea el archivo menu.php con la estructura de la web:
<?php $menu = array( 'start' => "Inicio", 'dibus' => "Dibujos animados", 'tbo' => "Tebeos", 'contacto' => "Contctanos", ); $submenu = array(); $submenu['dibus'] = array( 'simpsons' => "Los Simpsons", 'picapiedra'=> "Los Picapiedra", 'dragmaz' => "Dragones y mazmorras", ); $submenu['tbo'] = array( 'conan' => "Conan el brbaro", 'tintin' => "Las aventuras de Tintn", 'spiderman' => "El hombre araa", ); ?>

La clave start del men indica la pgina de inicio de la web 2. Crea la subcarpeta paginas y dentro haz los siguientes archivos siguiendo las claves propuestas en el men anterior:
o o o o o o o o o o

start.php dibus.php dibus_simpsons.php dibus_picapiedra.php dibus_dragmaz.php tbo.php tbo_conan.php tbo_tintin.php tbo_spiderman.php contacto.php

En cada archivo escribe el cdigo HTML que ira dentro del <body>; sin poner ni la etiqueta <html> ni <head> 3. Descarga el archivo Plantilla6.php y ponlo en la raz de tu web 4. Crea la pgina index.php en la raz de tu web. Esta ser la plantilla de la web y contendr las etiquetas <html> y <head> que no pusimos antes.
<?php require_once("menu.php"); require_once('Plantilla6.php'); $plantilla = new Plantilla(); $plantilla->setMenu($menu, $submenu); $plantilla->setFriendly(false); $plantilla->setWebTitle('Ilustraciones internacionales'); $plantilla->setDirContents('paginas/'); ?><!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title><?php echo $plantilla->getPageTitle(); ?></title> <link href="estilos.css" rel="stylesheet" type="text/css" /> </head> <body class="<?php echo $plantilla->getClassBody(); ?>"> <div id="cabecera"> <h1>Ilustraciones internacionales</h1> </div> <div id="menu"> <?php echo $plantilla->getMenu(); ?> </div> <div id="contenido"> <?php $plantilla->writePageContent(); ?> </div> </body> </html>

Con este paso ya funciona la web, pero lo vamos a mejorar un poco ms 5. Crea el archivo estilos.css donde vamos a poner los estilos mnimos para que el men sea desplegable
#menu > ul > li { /* Men principal horizontal */ display:inline-block; } #menu ul ul { /* Oculta los submens */ display:none; position:absolute; background-color:white; border:1px solid black; } #menu > ul > li:hover ul { /* Mostrar submen */ display:block; }

Puedes mejorar ms el aspecto del men con estilos.css 6. Por ltimo vamos a hacer que las URL sean amigables convirtiendo las direcciones de tipo index.php?item=tbo&subitem=spiderman a este formato tbo_spiderman.html. a. Crea el archivo .htaccess el cual configurar el servidor Apache
Options +Indexes Options +FollowSymlinks RewriteEngine on RewriteBase / RewriteRule ^([^/]+)_([^/]+).html$ index.php?item=$1&subitem=$2 [NC,L] RewriteRule ^([^/]+).html$ index.php?item=$1 [NC,L]

Modifica RewriteBase para que apunte a la carpeta donde est tu web si no estuviese en la raz b. En el archivo index.php da la orden de activar las URL amigables

$plantilla->setFriendly(true);

Historial de versiones

Versin 1 Men de dos niveles mediante listas anidadas a mano Versin 2 El CSS mnimo para que sea un men desplegable: estils2.css Versin 3 Generacin automtica del men con PHP Versin 4 Mejora del diseo CSS: estils4.css Versin 5 Direcciones amigables para que parezcan ficheros HTML Versin 6 Cdigo refactorizado dentro de la clase: Plantilla6.php

Descargar todo desde versiones.7z

Direcciones URL amigables


Para tener direcciones URL amigables para usuario (y de paso tambin para los motores de bsqueda) hemos de ocultar la direccin real (con parmetros GET) mediante un alias. Esto se consigue con ayuda del mdulo REWRITE de Apache y configurando adecuadamente el fichero .htaccess en la raz de nuestra web.

El fichero .htaccess
Options +Indexes Options +FollowSymlinks RewriteEngine on RewriteBase /ruta_web RewriteRule ^([^/]+)_([^/]+).html$ index.php?item=$1&subitem=$2 [NC,L] RewriteRule ^([^/]+).html$ index.php?item=$1 [NC,L]

Para activar el mdulo REWRITE de Apache, en el caso de que estuviese desactivado, hay que introducir por lnea comando la siguiente orden: a2enmod
rewrite

Ejemplos de equivalencias entre contenidos y las direcciones web


Ruta del contenido
contenidos/start.php

Direccin URL paramtrizada con GET Direccin URL amigable


http://dominio/index.php?item=start http://dominio/start.html http://dominio/index.php?item=bus http://dominio/bus.html http://dominio/index.php?item=metro&subitem=blau http://dominio/metro_blau.html

contenidos/bus.php

contenidos/metro_blau.php

contenidos/tren_ave.php

http://dominio/index.php?item=tren&subitem=ave http://dominio/tren_ave.html

Ayuda de la clase Plantilla6.php


Configuracin previa de la plantilla

Incluye el archivo:
require_once('Plantilla6.php');

Crea la plantilla:
$plantilla = new Plantilla();

Aade el men y submen:


$plantilla->setMenu($menu, $submenu);

Activa las direcciones amigables:


$plantilla->setFriendly(true);

Pone el ttulo general de la web:


$plantilla->setWebTitle('Ttulo');

Indica la subcarpeta con los contenidos:


$plantilla->setDirContents('paginas/')

Uso de la plantilla en el HTML

Obtiene el ttulo de la pgina actual:

$plantilla->getPageTitle()

Obtiene la clase del <body> para configurar cada pgina con CSS:
$plantilla->getClassBody()

Obtiene el men como una lista anidada de enlaces:


$plantilla->getMenu()

Obtiene la ruta actual como migas de pan:


$plantilla->getBreadcrumbs()

Escribe el contenido de la pgina:


$plantilla->writePageContent()

Compartir

en Facebook

en Twitter

Anterior

Siguiente

Indice

[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

2 comentarios:
1 Alexis M. (no registrado) dice hace 8 meses:

Muy interesante su plantilla. Sin embargo me he encontrado que los archivos no poseen bloqueo de acceso directo. Es decir que si por ejemplo quiero acceder desde la web al archivo "tbo_spiderman.php" lo puedo hacer colocando toda la ruta hacia el archivo y se ve el contenido del mismo ("Entre sus superpoderes se encuentra una gran agilidad..."). Es posible solucionar lo mencionado o hay que hacerlo por parte del sercidor? Muchas gracias de antemano. Alexis M.

2 Francisco dice hace 8 meses:

Ummm, Hola Alexis, Interesante cuestin... En PHP puedes saber con __FILE__ la ruta del actual fichero PHP Y con $_SERVER['SCRIPT_FILENAME'] la ruta del actual script. Puede ser diferente del actual fichero PHP porque el fichero puede estar incluido dentro de otro fichero PHP. Con la funcin basename() se puede extraer el nombre del fichero eliminando la informacin de las carpetas. Si coloco la siguiente lnea de cdigo al principio del fichero "tbo_spiderman.php" <?php if (basename(__FILE__) == basename($_SERVER['SCRIPT_FILENAME'])) die(); ?> se ver bien cuando se haga a travs de la plantilla pero se ver en blanco si se intenta mostrar directamente. Saludos

Вам также может понравиться