Los códigos condicionales

Blogger'Sphera muestra una serie de entradas que explican de manera muy interesante, cómo funcionan los códigos condicionales en Blogger. Aquí intento traducirlos.

Primero, entendamos qué es un condicional.

Cuando se usa un IF, lo que hacemos es comparar dos cosas y obtener como respuesta VERDADERO (true) o FALSO (false). Lo utilizamos para "tomar una decisión"; si la respuesta es VERDADERO hacemos algo y si es FALSO, eventualmente, hacemos otra cosa. Este es un ejemplo:
<b:if cond='clima == llueve'>
... me quedo en casa porque la respuesta es VERDADERA, llueve ...
<b:else/>
... me voy a pasear porque la respuesta es FALSE, no llueve ...
</b:if>
Lo mismo podríamos hacer al revés si, en lugar de == que indica igualdad, usamos != que indica una desigualdad. Por ejemplo, en lugar de preguntarnos si llueve, podríamos preguntarnos si NO llueve:
<b:if cond='clima != llueve'>
... me voy a pasear porque la respuesta es VERDADERA, no llueve ...
<b:else/>
... me quedo en casa porque la respuesta es FALSA, llueve ...
</b:if>
No necesariamente debo tener una respuesta para cada situación, podría tener sólo una:
<b:if cond='clima == llueve'>
... me quedo en casa porque la respuesta es VERDADERA, llueve ...
</b:if>
En los lenguajes de programación, este tipo de instrucciones es fundamental, todo termina siendo una larga lista de condiciones. En Blogger, las cosas son mucho más limitadas porque no podemos comparar cualquier cosa, sólo podemos comparar los datos a los que ellos nos dan acceso y sólo pdoemos hacerlo en ciertos lugares ya que muchos de ellos no estan disponibles en cualquier parte de la plantilla.

De todos modos, hay algunos que podemos usar para muchas cosas, los que nos indican en que tipo de página estamos; de este modo, ciertas cosas se ejecutarán o no, dependiendo de donde estemos.

El dato que indica eso es data:blog.pageType que puede tener tres posibles valores:
<b:if cond='data:blog.pageType == &quot;item&quot;'>
esto sólo se mostrará en una entrada individual
</b:if>

<b:if cond='data:blog.pageType == &quot;archive&quot;'>
esto sólo se mostrará en las páginas que listan entradas
</b:if>

<b:if cond='data:blog.pageType == &quot;index&quot;'>
esto se mostrará en todas las demás
</b:if>
La combinaciones de igualdad y desigualdad, hará que podamos mostrar u ocultar algo con bastante precisión:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
esto se mostrará en cualquier página excepto en las entradas individuales
</b:if>
Hay más posibilidades. Con esta condición, verificamos que estemos en el home de nuestro blog:
<b:if cond='data:blog.url == data:blog.homepageUrl'>
esto se mostrará sólo en el home
</b:if>
Si bien hablo de "mostrar", las condiciones no sólo sirven para eso. Podemos condicionar casi cualquier otra cosa:
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<style>
... estas propiedades de estilo sólo se aplicararán al home ...
</style>
</b:if>

<b:if cond='data:blog.url == data:blog.homepageUrl'>
<script>
... este script sólo se cargará en el home ...
</script>
</b:if>
Hay varias posibilidades más. Una de ellas nos permite detectar una entrada individual especifica. Supongamos que quisiera hacer algo en esta entrada: http://vagabundia.blogspot.com/2009/04/ocultando-codigos-mientras-los-probamos.html

Tenemos tres alternativas:
<b:if cond='data:blog.pageTitle == &quot;Ocultando códigos mientras los probamos : Vagabundia&quot;'>
data:blog.pageTitle es el contenido de la etiqueta TITLE del HEAD.
<b:if cond='data:blog.url == &quot;http://vagabundia.blogspot.com/2009/04/ocultando-codigos-mientras-los-probamos.html&quot;'>
data:blog.url es la dirección URL de la entrada que podemos averiguar cuando publicamos el post.
<b:if cond='data:blog.pageName == &quot;Ocultando códigos mientras los probamos&quot;'>
data:blog.pageName es el título de la entrada individual y es la forma más sencilla de filtrar entradas.

Algo similar podemos hacer con las etiquetas:
<b:if cond='data:blog.pageName == &quot;NOMBRE_ETIQUETA&quot;'>
o bien:
<b:if cond='data:blog.url == &quot;http://miBlog.blogspot.com/search/label/NOMBRE_ETIQUETA&quot;'>
Si bien Blogger no nos permite tener condiciones múltiples en una sola instrucción, las podemos anidar, o sea, colocar una dentro de otra. Por ejemplo si quisiera que algo se mostrara en todas las páginas excepto en las páginas individuales y en el home, podría hacer esto:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
... NO es una página de entradas, puede ser el home o cualquier otra
<b:if cond='data:blog.url != data:blog.homepageUrl'>
... NO es el home así que es el tipo de página que estoy buscando
</b:if>
</b:if>
Un ejercicio más complejo. Condicionamos el color de los textos de las entradas:
<b:if cond='data:blog.pageType != &quot;item&quot;'>
<b:if cond='data:blog.url == data:blog.homepageUrl'>
<style type='text/css'>
.post-body {color: black;}
</style>
<b:else/>
<b:if cond='data:blog.pageName == &quot;BLOGGER&quot;'>
<style type='text/css'>
.post-body {color: blue;}
</style>
<b:else/>
<style type='text/css'>
.post-body {color: red;}
</style>
</b:if>
</b:if>
<b:else/>
<style type='text/css'>
.post-body {color: green;}
</style>
</b:if>
¿De que color serán en las entradas individuales? ¿Y en la página de inicio? ¿Y cuando naveguemos la etiqueta BLOGGER? ¿Y en el resto de las páginas? No es un concurso así que la respuesta puede verse online.

0 comentarios:

Publicar un comentario