Tema: Link activo
Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/10/2011, 18:46
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Link activo

la de memoadian puede ser una solución, te muestro otra, un poco distinta, pensada para trabajar con una única plantilla php. Te pongo el esquema algo simplificado, despues podrias adaptarlo

Por un lado tenemos nuesto index (puse el css en el mismo para el ejemplo)

Código PHP:
Ver original
  1. <?php
  2. $link = $_GET['link'];
  3. ?>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  5. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head>
  8. <title>titulo</title>
  9. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  10. <style type="text/css">
  11. /*<![CDATA[*/
  12. a{
  13. background-color: cyan;
  14. color: #000;
  15. }
  16. a:hover{
  17. background-color:#000;
  18. color: #fff;
  19. }
  20. a.activo{
  21. background-color:#000;
  22. color: #fff;
  23. }
  24.  
  25. /*]]>*/
  26. </style>
  27. </head>
  28. <body>
  29. <div>
  30. <?php  
  31. include('menu.php');
  32. ?>
  33. </div>
  34. <div class="contenido">
  35. <?php echo "incluir contenido de $link"; ?>
  36. </div>
  37. </body>
  38. </html>

Como ves al inicio define a la variable $link como un valor recibido por get,
luego hace un include al menu.php
y finalmente muestra un contenido (que en realidad sería otro include)

El menú
Código PHP:
Ver original
  1. <?php
  2. #menu
  3. $archivo_menu = $_SERVER['DOCUMENT_ROOT'] . '/menu/menu.txt';
  4. $fp = fopen( $archivo_menu, 'r' );
  5. $archivo_contenido = fread( $fp, filesize( $archivo_menu ) );
  6. fclose( $fp );
  7. // linea a linea.
  8. $lineas = explode ( "\n", $archivo_contenido );
  9. echo "<ul>";
  10. foreach ( $lineas as $linea) {
  11.  
  12. $linea = rtrim($linea);
  13. list( $vin,$reftitle,$textomenu ) = explode( '|', $linea );
  14.  
  15. if($link==$vin){
  16. echo "<li><a href='?link=$vin' class='activo' title='$reftitle'>$textomenu</a></li>\n";
  17. }else{
  18. echo "<li><a href='?link=$vin' title='$reftitle'>$textomenu</a></li>\n";
  19. }
  20. } ### fin foreach
  21. echo "</ul>\n<!-- fin menu  -->\n";
  22. ?>

este menu, lo que hace es extraer datos de un archivo de texto, cada linea del archivo contiene 3 elementos, que a su vez son separados, el contenido del txt sería


inicio|Página principal|inicio
ubicacion|Mapa de referencia y vias de acceso|ubicación
caracteristicas|Características generales del complejo|características
servicios|Servicios ofrecidos|servicios
reservas|Solicite reservas completando un formulario|reservas
vertarifas|Cuadro tarifario|tarifas
fotos|Galería de imágenes|fotos
contactenos|Realice sus consultas|contáctenos


el primer valor es el que se pasa como parámetro por get
el segundo es el valor del atributo title que va en el link
y el tercero es el téxto que aparecerá en el menú, este tercer elemento es importante, ya que te dije que la idea no es mostrar una leyenda (eso lo hago para simplificar la explicación), y como nó podrías cargar archivos con nombres acentuados (características, contáctenos, etc) ó bien podria ser que el texto del menú se compusiese de dos palabras (características principales, por ejemplo).

entonces en el div contenido porias hacer un

<?php include("$link.html"); ?>
como ves es muy flexible. Como observarás tambien el menu contien una condición en la que si lo que se pasa por get ($link), es igual al primer valor de cada linea, escribe la clase activo, ya que obviamente hay coincidencia entre el elemento del menu y lo que se cargó, un poco como ya te habia señalado memoadian.
Por supuesto que hay otros detalles a tener en cuenta, pero eso te lo dejo investigar a vos...
create los tres archivos, index, menu.php y menu.txt y probalo.
Finalmente tendrias que condimentarlo con urls amigables, para eliminar el tema de la variable en la url

Me olvidé de un detalle importante, tu archivo de texto uqe termine con LF(fin de linea estilo unix) y no CR\LF, casi todos los editores de texto te dan esa opción
SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 14/10/2011 a las 19:02