Lo cuenta
Enrique Dans en su blog citando a
Blog On Travel: AC Hoteles ha sido baneado de Google.
La causa: una web completamente en Flash (nada de contenido para indexar), + palabras clave=texto de la descripción, que no se encuentran en el contenido (que para Google no existe) + 92 dominios todos con la misma IP, interconectados entre sí, y todos (menos uno) con el mismo contenido: nada.
Sería interesante ver que cara pone el diseñador de la web cuando le pregunten por qué ha pasado esto....
Y también sería interesante (mirando un poco de manera más local), que tomasen nota, por ejemplo, los responsables de comunicación del
Teatro Pérez Galdós, y pensasen en rehacer su nueva, flamante e
ilegal web 100% Flash.
(actualización 22/03/07: AC Hoteles ya vuelve a estar en Google.
Hotel Blog tiene un interesante análisis del caso).
(otra actualización 19/09/07: la web del Tatro Pérez Galdós ya ha cambiado, por una versión que apenitas usa Flash, lo cual es de agradecer)
Respondiendo a un comentario en otro post, aprovecho para comentar aquí una solución sencilla (al menos, la más sencilla que yo he encontrado) a un problema con el que nos encontramos a menudo: dada una lista de resultados, seleccionar mediante
checkbox
algunos de ellos para pasárselos vía formulario a otro script. Yo lo uso mucho para seleccionar elementos que deben ser eliminados en paneles de control, para selección de los temas de suscripción en listas de correo, y cosas por el estilo...
Partimos de tres detalles a tener en cuenta:
- ColdFusion permite recuperar en una variable,
form.fieldnames
, una lista de todas las variables enviadas por el formulario (usando el método post, que, por otro lado, es el más recomendable).
- los checkbox no marcados no se envían al programa que trata el formulario. Un input tipo texto en el que no se escriba nada envía el nombre de la variable, con el contenido vacío. Un checkbox no. Sólo se envía, con el valor 'on', si está marcado. Si no lo está, no envía nada, nisquiera el nombre de la variable.
- ColdFusion permite hacer bucles sobre listas, dándole el valor de cada uno de sus elementos a una variable en cada iteración.
El primer paso es construir el formulario. Suponemos que tenemos una consulta que nos devuelve una lista de empleados, llamada
empleados
, cada uno con un identificador único (
id
) y su nombre (
nombre
):
<form action="recibe.cfm" method="post">
(... otros campos ...)
<ul>
<cfoutput query="empleados">
<li><input type="checkbox" name="codigo#empleados.Id#">#empleados.nombre#</li>
</cfoutput>
</ul>
(... otros campos ...)
</form>
(dado que se trata de una lista de empleados, parece que meterlo en una lista es lo más adecuado. Es irrelevante para lo que nos interesa)
Esto generará una lista tal que, por ejemplo:
<form action="recibe.cfm" method="post">
(... otros campos ...)
<ul>
<li><input type="checkbox" name="codigo15">Pedro</li>
<li><input type="checkbox" name="codigo26">Juan</li>
<li><input type="checkbox" name="codigo32">Felipe</li>
</ul>
(... otros campos ...)
</form>
El meollo de la cuestión está en el nombre que tienen los checkbox, compuesto por una cadena de caracteres, más el identificador que devuelve la consulta. Esta cadena puede ser cualquier cosa al gusto del chef, siempre que no coincida con el nombre de ningún otro campo en el formulario, y siempre que no comience por un número (CF no se lleva bien con las variables que empiezan por un número) (tampoco se recomienda usar caracteres no ingleses, ni, en general, nada que no deba ir en un nombre de variable). Y en concreto, es importante fijarse en la longitud que tiene esta cadena. En este ejemplo, la longitud de "codigo" es 6.
recibe.cfm
, el script que trata los datos del formulario, recibirá los checkbox que hayamos marcado, el resto de campos del formulario, y un par más de variables, de las cuales la que más nos interesa es
form.fieldnames
(si se dispone de la versión 6 o superior de CF, es interesante hacer un
<cfdump var="#form#">
, para ver qué es exactamente lo que envía el formulario).
Suponiendo que hayamos marcado las casillas de Pedro y Felipe, y que hayan dos campos más en el formulario llamados
autorizado
y
horario
(por poner algo),
form.fieldnames
tendrá el valor "autorizado,codigo15,codigo32,horario"
La idea es ir recorriendo esa cadena e ir viendo que nombres de campo corresponden en su parte izquierda con la cadena que asignamos en el formulario, y tomar los valores que quedan en la parte derecha:
<cfloop list="#form.FieldNames#" index="indice">
<cfif (Left(indice,6) eq "codigo")>
<cfset Id=Right(indice,Len(indice)-6)>
(... hacer cosas con el código recuperado, por ejemplo, ListAdd() para crear una lista sólo con los identificadores seleccionados ...)
</cfif>
</cfloop>
La traza es muy sencilla: en la primera iteración, la variable
indice
toma el valor
autorizado
. No se cumple la condición, y pasa al segundo valor de la lista,
codigo15
. Cumple la condición, por lo que la variable
Id
toma el valor
15
. Hace lo que tenga que hacer con ella, y pasa al tercer elemento de la lista,
codigo32
, que también cumple la condición, etc, etc...
El "número mágico" que aparece, el 6, es la longitud de la cadena usada.
Al final del bucle, habremos tratado todos los campos del formulario que se corresponden con los elementos checkbox marcados, y habremos extraído los valores que nos interesaban.
Nótese que no nos hemos interesado para nada en el valor de las variables del formulario (que por otro lado, es siempre el mismo para los checkbox:
on
). No nos hace falta, toda la información que necesitamos de estos campos se transmite en el nombre del mismo.
Espero que les sea útil. Puede parecer algo rebuscado, pero no he encontrado manera más sencilla. Si alguien la conoce, se agradecen comentarios y sugerencias ;)