martes, 16 de agosto de 2011

La plantilla de Blogger no es una página web

Suele ser común que pregunten por qué no funcionan ciertos códigos que vemos en la plantilla cuando se intenta agregarlos en un elemento HTML, en una entrada o incluso en alguna parte distinta de la misma plantilla. Esto, puede ser confuso si no se comprende cómo funciona un blog.

Hay una diferencia sustantiva entre eso que uno ve en la plantilla y el código fuente del sitio; es algo obvio si comparamos ambas cosas; en ambas veremos etiquetas que están delimitadas por los caracteres < y > pero, en la primera hay muchas de ellas que no son "comunes", es decir, que no son etiquetas HTML sino propias del Blogger; en cambio, en el código fuente, sólo veremos etiquetas HTML "normales".

La plantilla de un blog está formada por una serie de instrucciones que le damos al servidor para que "escriba" el código HTML de nuestro sitio. A diferencia de una página común, eso no lo hace el navegador sino que se ejecuta ANTES. Es el servidor (Blogger en este caso) el que interpreta y procesa esas instrucciones, arma la página y luego la envía al navegador para que este la muestre como pueda.

Que eso ocurra antes es lo que permite, por ejemplo, que una plantilla pueda ser condicionada; que ciertas cosas sean mostradas o no. Es una diferencia importante porque de ese modo, se evita la carga de códigos inútiles.

Si por ejemplo, yo quisiera ocultar la sidebar en una página estática, podría usar CSS poniendo algo como:
<!-- esto sólo se ejecutará en las páginas estáticas -->

<b:if cond='data:blog.pageType == "static_page"'>

<style>

#sidebar-wrapper { display: none; }

</style>

</b:if>
Suponiendo que la sidebar de mi blog tuviera ese ID, el código fuente de mi página estática mostraría esto y, efectivamente, la sidebar estaría oculta :
<style>

#sidebar-wrapper { display: none; }

</style>
Pero estaría allí. No la vería pero todo su contenido sería parte del código fuente y por lo tanto, cada cosa que tuviera agregada, sería cargada y ejecutada.

Por el contrario, usara un condicional inverso en TODO el código:
<!-- esto sólo se ejecutará en cualquier pa´gina que no sea una página estática -->

<b:if cond='data:blog.pageType != "static_page"'>

<div id='sidebar-wrapper'>

.......

</div>

</b:if>
ese DIV, con toda la sidebar, no sólo no se vería en una página estática sino que tampoco sería parte del código fuente. Al interpretar nuestra plantilla, el servidor recibe la instruccíon de ignorar toda esa parte y por lo tanto, simplemente se la saltea y continua con el resto.

Esto mismo es lo que ocurre con el uso de ciertos códigos específicos que son todos aquellos que comienzan con <b: o con <data:

Todos ellos, son instrucciones o datos que se le da al servidor y se ejecutan ANTES de ver la página en el navegador. Todo eso que nosotros agregamos en un elemento HTML o en una entrada, se ejecuta DESPUES y no lo hace el servidor sino el navegador por lo tanto, si en un elemento HTML o una entrada, queremos usar alguna de esas cosas, no funcionará, será ignorado ya que el navegador, que es quien toma el control, no tiene la menor idea de qué significan ya que desconoce ese lenguaje.

Para complicar un poquito más las cosas, ciertos datos de Blogger, sólo son interpretados en determinados contextos.

Por ejemplo, <data:post.url/> nos dice cuál es la URL de una entrada pero, sólo es accesible dentro de un includable del elemento Blog y no afuera; es por eso que no podemos usar widgets o gadgets de Blogger en una entrada; de nada sirve copiar y pegar el código de la plantilla; el resultado será nulo.

No hay comentarios:

Publicar un comentario