Foros del Web » Programando para Internet » PHP »

[Aporte] Webs modulares

Estas en el tema de [Aporte] Webs modulares en el foro de PHP en Foros del Web. Todos los archivos necesarios para este ejemplo están disponibles en web-modular.rar , incluyendo el mini-sistema de plantillas que publiqué anteriormente. Puedes verlo funcionando en: http://www.e-azteca.com/web-modular/ ...
  #1 (permalink)  
Antiguo 19/03/2009, 18:48
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 10 meses
Puntos: 2237
[Aporte] Webs modulares

Todos los archivos necesarios para este ejemplo están disponibles en web-modular.rar, incluyendo el mini-sistema de plantillas que publiqué anteriormente.

Puedes verlo funcionando en: http://www.e-azteca.com/web-modular/

Para poder crear webs modulares sin complicarnos con sesiones, cookies, redirecciones por header, etc., debemos evitar enviar salida al navegador (espacios, saltos de linea, etiquetas html, etc.) hasta que tengamos lista la información que se desea presentar.

En este ejemplo no incluyo sesiones, ni bases de datos, ni redirecciones, pero sí un formulario de contacto con 3 campos, validados, faltando solo el envío de datos por correo electrónico, ya que hay diferentes formas de hacerlo y solo se requiere insertar el código de tu preferencia.

index.php
Código php:
Ver original
  1. <?php
  2. define('CONSTANTE', 1);
  3. // Definimos los módulos que vamos a utilizar en la web, pueden obtenerse tambien desde base de datos o en un archivo por separado ej: config.php
  4. // clave => array(Nombre de página, archivo a incluir)
  5. $modulos = array(
  6.     'ini' => array('Página principal', 'home.php'),
  7.     'emp' => array('La empresa', 'empresa.php'),
  8.     'cnt' => array('Contacto', 'contacto.php')
  9. );
  10.  
  11. // Incluimos el mini sistema de plantillas
  12. include 'template.class.php';
  13. $html = new TplParser('index.tpl', 'plantilla/', 'auxiliar/');
  14.  
  15. // Obtenemos y verificamos el modulo que se va a mostrar o lo asignamos por default
  16. $modulo = (isset($_GET['mod'])) ? trim($_GET['mod']) : 'ini';
  17.  
  18. // En esta parte sería más conveniente crear un mensaje de error
  19. // Pero dejamos por el momento que se abra la página principal
  20. if(!isset($modulos[$modulo]))
  21.     $modulo = 'ini';
  22.  
  23. // Creamos los valores a reemplazar en la plantilla
  24. $etiquetas = array(
  25.     'titulo' => $modulos[$modulo][0] . ' - Web Modular',
  26.     'meta_keys' => 'Palabras,clave,del,sitio,o,la,página',
  27.     'meta_descrip' => 'Esta página es un ejemplo para crear Webs modulares con o sin base de datos',
  28.     'tpl_url' => 'plantilla/', // Ruta relativa a la URL del directorio de plantilla actual
  29.     'titulo_ventana' => "<h1>Web Modular - {$modulos[$modulo][0]}</h1>",
  30.     'menu' => crear_menu($modulo),
  31.     'regreso' => crear_menu($modulo, 'regreso')
  32. );
  33.  
  34. // Asignamos los valores a las etiquetas de la plantilla
  35. $html->assignVars($etiquetas);
  36.  
  37. // Incluimos el archivo que corresponde a la seccion
  38. $archivo = 'modulos/' . $modulos[$modulo][1];
  39. if(file_exists($archivo))
  40.     include $archivo;
  41. else {
  42.     $html->tags['subtitulo'] = '<h2>Error del sistema</h2>';
  43.     $html->parseAll();
  44.     echo $html->header();
  45.     echo '<p>Error, el módulo solicitado no existe en el sistema.</p>';
  46.     echo $html->footer();
  47. }
  48.  
  49.  
  50. function crear_menu($mod, $ul = 'menu') {
  51.     global $modulos;
  52.     $ret = "<ul id=\"$ul\">\n";
  53.     foreach($modulos as $mk => $mv) {
  54.         $act = ($mk == $mod) ? ' class="activo"' : '';
  55.         $ret .= "<li><a href=\"index.php?mod=$mk\"$act>{$modulos[$mk][0]}</a></li>\n";
  56.     }
  57.     $ret .= '</ul>';
  58.     return $ret;
  59. }
  60.  
  61. ?>

... Continuará en el siguiente mensaje con archivos internos ...
__________________
- León, Guanajuato
- GV-Foto
  #2 (permalink)  
Antiguo 19/03/2009, 18:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 10 meses
Puntos: 2237
Respuesta: [Aporte] Webs modulares

modulos/home.php
Código php:
Ver original
  1. <?php
  2. if(!defined('CONSTANTE')) {
  3.     header('HTTP/1.0 403 Forbidden');
  4.     die('No tienes permisos para ver el contenido del directorio o abrir este archivo.');
  5. }
  6.  
  7. // Cambiamos algunas etiquetas si es necesario
  8. $html->tags['script'] = '<!-- Aquí el código para cargar algun javascript -->';
  9. $html->tags['subtitulo'] = '<h2>Bienvenidos a esta web de ejemplo</h2>';
  10.  
  11. // Procesamos todas las etiquetas
  12. $html->parseAll();
  13.  
  14. // Enviamos el encabezado de la página
  15. echo $html->header();
  16.  
  17. // Desplegamos el contenido de la página.
  18. ?>
  19.  
  20. <p>Este es un ejemplo para crear webs modulares, tomando los parámetros por URL (método GET) y usamos el
  21. <strong><a href="http://www.forosdelweb.com/f18/aporte-mini-sistema-plantillas-677462/">mini sistema de plantillas</a></strong>
  22. que publiqué en Foros del Web.</p>
  23.  
  24. <p><strong>Nota:</strong> Todos los archivos necesarios para probar este ejemplo están disponibles para descarga en un único archivo
  25. comprimido: <strong><a href="http://www.e-azteca.com/web-modular.rar">web-modular.rar</a></strong></p>
  26.  
  27. <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sodales, purus sit amet laoreet placerat, arcu magna fringilla turpis,
  28. malesuada tincidunt neque massa nec lectus. Sed nec dui. Praesent libero. Vivamus justo. Quisque tincidunt est a eros. Duis ipsum.
  29. Morbi cursus. Fusce turpis. Phasellus auctor lacus. Nulla ante. Nulla laoreet urna et nibh. Donec eget lacus. Quisque congue urna.
  30. In diam neque, feugiat ut, hendrerit id, sagittis et, eros. Nam laoreet risus sed nisi.</p>
  31.  
  32. <?php
  33. // Enviamos el pie de página
  34. echo $html->footer();
  35. ?>


modulos/contacto.php
Código php:
Ver original
  1. <?php
  2. if(!defined('CONSTANTE')) {
  3.     header('HTTP/1.0 403 Forbidden');
  4.     die('No tienes permisos para ver el contenido del directorio o abrir este archivo.');
  5. }
  6.  
  7. $errores = array();
  8.  
  9. if(isset($_POST['enviado'])) {
  10.     $nombre = trim($_POST['nombre']);
  11.     $email = trim($_POST['email']);
  12.     $comentarios = trim($_POST['comentarios']);
  13.     if(strlen($nombre) < 5 || strlen($nombre) > 30)
  14.         $errores['nombre'] = 'Teclea tu nombre usando entre 5 y 30 caracteres.';
  15.     if(!email_valido($email))
  16.         $errores['email'] = 'Teclea una dirección válida de correo electrónico.';
  17.     if(strlen($comentarios) < 50 || strlen($comentarios) > 500)
  18.         $errores['comentarios'] = 'Teclea tus comentarios usando entre 50 y 500 caracteres.';
  19.     if(count($errores) == 0) {
  20.         // Aqui es donde se pondria el codigo para enviar el mensaje por email
  21.         // Hasta aquí todavía podemos redireccionar, porque no ha habido salida HTML
  22.         //    pero seguiremos aquí mismo para no agregar otro archivo más
  23.  
  24.         // Cambiamos algunas etiquetas si es necesario
  25.         $html->tags['subtitulo'] = '<h2>Mensaje enviado</h2>';
  26.  
  27.         // Procesamos todas las etiquetas
  28.         $html->parseAll();
  29.  
  30.         // Enviamos el encabezado de la página
  31.         echo $html->header();
  32.  
  33.         echo '<p>Tu mensaje fue enviado correctamente. Gracias.</p>';
  34.  
  35.         // Enviamos el pie de página
  36.         echo $html->footer();
  37.         return; // Tambien se puede usar exit; para finalizar la ejecución
  38.     }
  39. }
  40.  
  41.  
  42. // Cambiamos algunas etiquetas si es necesario
  43. $html->tags['subtitulo'] = '<h2>Formulario de contacto</h2>';
  44.  
  45. // Procesamos todas las etiquetas
  46. $html->parseAll();
  47.  
  48. // Enviamos el encabezado de la página
  49. echo $html->header();
  50.  
  51. // Desplegamos el contenido de la página.
  52. ?>
  53.     <p>Aquí ponemos un texto para invitar a los usuarios a que nos envíen sus comentarios, dudas o sugerencias.</p>
  54.     <form method="post" action="index.php?mod=cnt">
  55.     <fieldset>
  56.         <legend>Formulario de contacto</legend>
  57.         <input type="hidden" name="enviado" value="1" />
  58.         <label for="nombre">Nombre:</label>
  59.         <div><input type="text" name="nombre" id="nombre" value="" size="30" /></div>
  60.         <?php ver_error('nombre'); ?>
  61.  
  62.         <label for="email">Correo electrónico:</label>
  63.         <div><input type="text" name="email" id="email" value="" size="30" /></div>
  64.         <?php ver_error('email'); ?>
  65.  
  66.         <label for="comentarios">Comentarios:</label>
  67.         <div><textarea name="comentarios" id="comentarios" rows="10" cols="50"></textarea></div>
  68.         <?php ver_error('comentarios'); ?>
  69.  
  70.         <div class="margen-izq"><input type="submit" value="Enviar" /></div>
  71.     </fieldset>
  72.     </form>
  73.  
  74. <?php
  75. // Enviamos el pie de página
  76. echo $html->footer();
  77.  
  78. function ver_error($campo) {
  79.     global $errores;
  80.     if(isset($errores[$campo]))
  81.         echo "<div class=\"frm-error\"><strong>Error:</strong> {$errores[$campo]}</div>\n";
  82. }
  83.  
  84. function email_valido($email) {
  85.     return preg_match('/^(([^<>()[\]\\.,;:\s@"\']+(\.[^<>()[\]\\.,;:\s@"\']+)*)|("[^"\']+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-zA-Z\d\-]+\.)+[a-zA-Z]{2,}))$/', $email);
  86. }
  87. ?>

Archivos que omití por ser obvios, estar dentro del archivo comprimido y/o en el tema de plantillas:
- template.class.php
- modulos/empresa.php
- plantilla/index.tpl
- plantilla/plantilla.css
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 19/03/2009, 19:03
 
Fecha de Ingreso: febrero-2009
Ubicación: cancun!
Mensajes: 898
Antigüedad: 15 años, 4 meses
Puntos: 15
Respuesta: [Aporte] Webs modulares

buen aporte gracias aunke no entendi el contenido jaja (texto ) :(
  #4 (permalink)  
Antiguo 19/03/2009, 21:45
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 10 meses
Puntos: 32
Respuesta: [Aporte] Webs modulares

Exelente explicacion gracias por tu aporte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 21:01.