Tag Archive for: modular

Validar formularios en web modular

Categories: html, javascript - Tags:

Este es una pregunta que me suelen hacer con cierta y la verdad no debería haber complicaciones ya que hacerlo en web modular es exactamente igual que hacerlo en una web que no sea modular.

Veamos primero en este post como se hace en una web común.

Primero en top_page.php debemos invocar el código javascript correspondiente

1
2
<script src="js/jquery-1.3.1.min.js" type="text/javascript"></script>
<script src="js/jquery.validate.min.js" type="text/javascript"></script>

Y luego en la página que queremos hacer la validación pegamos el código validador luego del formulario en este caso un formulario con id comentariosFrm aunque claro esta podemos usar el id que mejor nos parezca.

1
2
3
4
5
<script type="text/javascript">
$(document).ready(function() {
    $("#comentariosFrm").validate();
});
</script>

Y asi podemos validar formularios en todo nuestro sitio.

PHP: friendly url

Categories: PHP, Posicionamiento - Tags: ,

Anteriormente había escrito sobre el funcionamiento de friendly url pero aún hay muchos que están en duda sobre su funcionamiento así que voy a aprovechar de hacer un ejemplo práctico muy sencillo sin usar web modular (que es para lo que normalmente sirve) para que sea lo más simple posible.

Lo básico en URL amigable

Lo primero debemos asegurarnos de tener activo el módulo mod_rewrite de lo contrario dará un error “Internal Server Error” o simplemente no funcionará, luego creamos un archivo .httacess

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /micarpeta/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Allí primero verificamos el mod_rewrite luego seteamos la RewriteBase es decir la carpeta donde esta nuestro sitio, si se tratara de www.misitio.com esa línea sería:

1
RewriteBase /

Las 2 últimas líneas nos dicen que de existir ese archivo o carpeta se olvide de la URL amigable y use esos archivos

Creando pagina.html

Para esto en nuestro archivo.httacess añadimos:

1
RewriteRule (.*)\.html$ index.php?page=$1

Esto genera una equivalencia entre
index.php?page=mipagina
mipagina.html

Para emular carpetas

Para esto en nuestro archivo.httacess añadimos:

1
2
RewriteRule /local/(.*)/ index.php?page=local&link=$1
RewriteRule local/(.*) index.php?page=local&link=$1

Esto va a generar una equivalencia entre:
index.php?page=local&link=restaurante-san-jose
www.misitio.com/local/restaurante-san-jose/

La cantidad de parámetros y de nombres de las variables depende de cada caso en concreto

Uso de las variables

Todas las variables GET que creamos tanto con friendly URL como sin esta mantienen sus nombres por ejemplo en el caso:
index.php?page=local&link=restaurante-san-jose
www.misitio.com/local/restaurante-san-jose/

Las variables creadas en ambas direcciones son: page que tiene el valor local y la variable link que tiene el valor restaurante-san-jose

Debemos tener claro que con url amigable lo único que estamos haciendo es disfrazar la dirección pero este disfraz altera las rutas relativas por lo que posiblemente fallen todas las invocaciones a hojas de estilos, javascripts e imágenes que se hayan hecho sin usar una ruta absoluta, para remediar esto hay 2 posibles soluciones:

Alterando la ruta base(basepath)

Esta es la más simple y rápida basta con agregar la siguiente linea HTML en el encabezado de nuestra página web

1
<base href="http://www.misitio.com/" />

Usando un path absoluto

Esta es la solución que más se utiliza debido a que la otra solución puede no funcionar en algunos navegadores especialmente en los antiguos (IE6 por ejemplo tiene varios peros), lo que hacemos es guardar la ruta absoluta en una constante que luego usaremos cada vez que invoquemos una imagen, css o javascript.

1
2
3
define("_path", "http://misitio.com/");
// Para invocar una imagen por ejemplo
<img src="<?php echo _path; ?>miimagen.jpg" />

De esta forma hay algunas variantes usando short open tags, templates, funciones, etc pero la idea básica es la misma.

Pueden ver un ejemplo funcionado AQUI
No doy link a los archivos del ejemplo ya que su funcionamiento varía según la carpeta donde se le coloque, por lo que terminarían dando más problemas que soluciones.

Templates PHP parte 2

Categories: PHP - Tags: , , ,

En el post anterior hablé sobre los sistemas de templates y en especial de Smarty, la idea general es que no hace falta aprender un nuevo lenguaje de programación intermedio para las plantillas sino que con PHP puro es suficiente.

Yo considero que lo más importante es ser ordenado y de esta forma podemos separar la lógica de la programación del diseño.

Usando Savant 3

Lo que me gusta de este sistema de templates es que tiene las ventajas de Smarty sin sus problemas, en primer lugar nos ofrece las ventajas del uso de cache y sobre todo no exige que aprendamos un nuevo lenguaje de programación sino que usa nuestro PHP de siempre para mantener el esquema de programación MVC, lo pueden bajar AQUI

Uso de clases

Como dije antes ser ordenado permite separar la lógica de la programación del diseño, esto sumado al uso de clases y web modular. Veamos un ejemplo primero de lo que NO debemos hacer:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$link = mysql_connect("localhost", "nobody"odigo">$link = mysql_connect("localhost", "nobody");
mysql_select_db("
mydb", $link);
$result = mysql_query("
SELECT nombre, email FROM agenda", $link);
echo "
<table border = '1'> \n";
echo "
<tr> \n";
echo "
<td><b>Nombre</b></td> \n";
echo "
<td><b>E-Mail</b></td> \n";
echo "
</tr> \n";
while ($row = mysql_fetch_row($result)){
echo "
<tr> \n";
echo "
<td>$row[0]</td> \n";
echo "
<td>$row[1]</td> \n";
echo "
</tr> \n";
}
echo "
</table> \n";
?>

Ese desastre esta bien como ejemplo o cuando recién empezamos con PHP, esa ensalada de código no le sirve de nada al diseñador, veamos como sería eso mismo pero separando la lógica del diseño:

1
2
3
4
5
6
7
8
9
10
11
12
<?php query_posts($query_string); ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="post">
<h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<div class="entry">
   <?php the_content(); ?>
</div>
<p class="postmetadata">Posted in <?php the_category(', '); ?></p>
</div>
<?php endwhile; else: ?>
<p>Sorry, no posts matched your criteria.</p>
<?php endif; ?>

En este caso copiado de WordPress, que para mi es uno de los mejores en lo que refiere al uso de MVC, si abrimos el archivo usando Dreamweaver, el diseñador podrá editarlo sin problemas basta que respete la ubicacion de las condiciones if y el bucle while (tal como ocurriría con Smarty pero sin sus complicaciones).

La conexión de base de datos se coloca en un archivo config.inc.php por ejemplo, y el manejo de la conexión en si se hace mediante una clase destinada a dicho fin, también es posible mediante clases separarlo en una cabecera PHP con la creación del objeto y luego el código html:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
///// no tocar /////
$noticia = new noticia();
if ($noticia->cuantos<=0) {
///// no tocar /////
?>
   <p><b>No se encontraron noticias</b></p>
<?php } else { for ($i=0; $i<$noticia->cuantos; $i++) { ?>
   <h2><?=$noticia->titulo?></h2>
   <p><span class="fecha"><?=$noticia->fecha?></span></p>
   <p><?=$noticia->texto?></p>
<?php } ?>

Con dejarle algunas indicaciones al diseñador que no debe tocar ciertas líneas, además de usar nombres muy claros para nuestra variables (titulo, fecha, texto, etc) le damos suficiente ayuda para que sepa que parte tocar y como organizarlo.

Diferencias entre envio GET y POST

Categories: PHP - Tags: ,

Este es un tema bastante básico pero ya que han habido varias consultas al respecto me pareció interesante comentarlo y sobre todo explicar como aplicarlo, por cierto los conceptos usados aquí son iguales cuando se usa una web modular.

Método GET

Este método envia las variables dentro de la propia URL (dirección) de la página, concatenadas(unidas) por ampertands(&) quedando algo así:

1
http://www.mipagina.com/index.php?page=mia&variable2=valor2&variable3=valor3......

Hasta ahí muy interesante, seguro ya lo leiste mil veces pero ¿para qué sirve eso? pues lo bueno es que podemos enviarle variables a PHP desde links simples sin necesidad de usar formularios o podríamos guardar estas cadenas en un mapa del sitio y google indexaría nuestras busquedas, muy util tambien para crear esos botones de editar donde queremos que se envie el ID del objeto para editar, si fuera mySQL sería algo así.

1
echo '<a href="editar.php?id='.$row[miId].'">Editar</a>';

Método POST

Este método sólo se puede usar con formularios, y la información no se envía por la URL sino que es invisible al usuario (eso en teoría porque usando firebug podríamos ver que se envía en realidad).
¿Para qué sirve POST?
pues para enviar grandes campos de texto, subir imágenes, para no distorcionar nuestra URL amigable con un colección de variables.

¿Cómo las envío?
Pues así:

1
2
3
<form name="miformulario" action="mipagina.php" method="POST">
 <input type="text" size="20" name="mivariable1">
</form>

¿Cómo recibo las variables?

Pues depende si usamos GET o POST, quedaría algo así

1
2
echo $_GET['mivariable']:
echo $_POST['mivariable']:

Variables en una web modular

Es exactamente igual que si no fuera modular, tengamos presente que los valores GET y POST se comparten entre todos los archivos que fueron incluidos en la web modular ya que estos se unen como un todo, de tal forma que si envio esto:

1
2
3
<form name="miformulario" action="index.php?page=mipagina" method="POST">
 <input type="text" size="20" name="mivariable1">
</form>

Puedo invocar a la variable POST en cualquiera de los archivos que la componen, header, footer y por supuesto contenido

Mitos y preguntas sobre web modular PHP

Categories: PHP - Tags: ,

Usualmente recibo comentarios y correos preguntándome algunos detalles sobre la web modular, para qué sirven, cómo funcionan, ventajas, etc. Así que a idea de este post es ir respondiendo a estas dudas, si tienen alguna otra sería bueno que la pongan para ir actualizando el post y así todos aprendemos.

Bueno vamos al grano.


¿La página modular se recargará totalmente cada vez que clickeo un link?

Si exactamente lo va a recargar todo nuevamente. ¿Eso es mas lento?(imagino que tambien te preguntaras eso) No necesariamente ya que si maquetamos adecuadamente todo esta en cache (incluso archivos flash) y la página cargará sin problemas.

¿Los frames son mejores que una web modular?

Si bien es cierto podemos poner el encabezado, pie de página y otros elementos en frames y evitar que se recargue toda la página y esto puede ser más rápido, las desventajas superan a esa ventaja:

  • La página con frames puede distorcionarse con la aparición de barras de desplazamiento o si no aparecen estas, ciertos contenidos podrían estar cortados, eso es algo no sucederá nunca con web modular
  • Creo que el más grave problema con frames es que google no va a indexar nuestro sitio web y si no apareces en los buscadores es prácticamente como si no existieras, dificilmente tendrás nuevos visitantes
  • Los frames son tecnología desfasada, muy antigua aunque admito que combinados con los modernos modalbox pueden hacer cosas muy utiles
  • Los frames consumen más memoria ya que son varias páginas independientes abiertas todas juntas
  • Una página modular permite compartir recursos y clases a través de la página(esa su mayor ventaja), mientras que los frames actúan de forma separada

¿Cómo envío formularios en una web modular?

Supongamos que tu formulario esta en la dirección index.php?page=formulario, tu formulario sería

1
<form name="miformulario" method="post" action="index.php?page=formulario">

Eso enviará los datos a esa misma página pero ojo no puedes usar el método GET o este sobreescribirá la variable page, sin embargo se puede salvar ese inconveniente asi:

1
2
<form name="miformulario" method="get" action="index.php">
<input type="hidden" name="page" value="formulario">

¿Qué ventaja tiene usar una web modular?

La web modular no sólo sirve para tener un sólo encabezado, menu y pie de página común a todas las páginas de nuestro sitio ese es el uso más básico, los verdaderos alcances van al momento de usar una programación OOP (programación orientada a objetos) ya que las clases al formar parte de la web modular podrán ser compartidos por todo el sitio, podemos tener una sóla conexion de base de datos que sea universal a todo el sitio y así cuando cambies de servidor sólo alterarás un único archivo.
También es muy util esta web modular para crear sitios con varios idiomas

¿Se puede crear una web modular con elementos ajax?

Si, aunque yo recomendaría limitarlo sólo a algunos elementos para no perder indexación por parte de google como en este ejemplo