JMiur [E]

Condicionar algo significa que en función de cierto dato, ocurrirán ciertas cosas o no. En Blogger, las condiciones están limitadas a que ese dato a evaluar sea alguno a los que ellos nos permiten acceder y no cualquier otro de allí que ciertas ideas no puedan ser aplicadas de manera simple porque carecemos de esa información y por lo tanto, debemos usar JavaScript que es el otro método disponible.

No es lo mismo en absoluto ya que, cuando se condiciona usando las etiquetas propias de Blogger, la página web resultante se crea en función de esas condiciones, si por ejemplo, decidimos que tal parte no forme parte de ella, el código fuente resultante, eso que muestra el navegador, no lo incluirá. Por el contrario, usando JavaScript, sólo podemos "ocultar" cosas pero eso que ocultamos, será parte de la página y se ejecutará aunque no lo veamos.

Partiendo de la idea de colocar una imagen asociada a una etiqueta en la sidebar, Adrián J. Messina preguntaba si era posible que, en lugar de mostrar una imagen, lo que se condicionara fuera un widget o gadget.

Como para hacer eso necesitamos conocer la etiqueta de esa entrada y este dato sólo es accesible dentro del LOOP que muestra los posts, no queda otro remedio que usar JavaScript lo que implica que sólo podremos mostrarlo u ocultarlo pero siempre estará allí así que su contenido será cargado por lo que es aconsejable que sean cosas relativamente livianas.

Hacer esto implica varios pasos. Para empezar, vamos a guardar en alguna variable, el dato que necesitamos; hay que ir a la plantilla y buscar:
<b:includable id='post' var='post'>
Allí, en alguna parte, veremos un código de Blogger que es el que muestra las etiquetas de la entrada y que tiene distintos formatos pero, básicamente, dice algo así:
<b:loop values='data:post.labels' var='label'>
  <a expr:href='data:label.url' rel='tag'><data:label.name/></a>
  <b:if cond='data:label.isLast != "true"'>,</b:if>
</b:loop>
donde data:label.name es la etiqueta de la entrada; allí es donde deberemos guardar ese dato; por ejemplo:
<b:loop values='data:post.labels' var='label'>
  <script>var etiquetaPOST=&#39;<data:label.name/>&#39;;</script>
  <a expr:href='data:label.url' rel='tag'><data:label.name/></a>
  <b:if cond='data:label.isLast != "true"'>,</b:if>
</b:loop>
Esto está pensado para entradas donde sólo hay una etiqueta, si son varias, empieza a carecer de sentido y debería pulirse el método, usar arrays o cualquier otro sistema.

Ahora, necesitamos agregar lo widgtes, uno, dos, los que queramos. Lo hacemos como lo hacemos siempre y luego, los buscamos; cualquiera sea siempre tendrá un ID que los identifica:
<b:widget id='XXXXX' locked='false' title='XXXXXXXX' type='XXXX'>
   .......
</b:widget>
Por defecto, los ocultaremos; suponiendo que uno de ellos es un elemento HTML cuyo id es HTML7 y el otro es una lista de enlaces cuyo id es LinkList3, pondremos lo siguiente antes de </head>
<style>
  #HTML7 {display:none;}
  #LinkList3 {display:none;}
</style>
Con esto, ya estamos listos para condicionar la visibilidad de los gadgets y se me ocurre que lo mejor es agregar el script dentro de cada uno de ellos. Suponiendo que el elemento HTML sólo se mostrará cuando la etiqueta sea "Fotos"; haríamos algo así:
<b:widget id='HTML7' locked='false' title='XXXXXXXX' type='HTML'>
<b:includable id='main'>
  <script>
  //<![CDATA[
    if(etiquetaPOST=="fotos") {
    document.getElementById("HTML7").style.display = "block";
    }
  //]]>
  </script>
   .......
</b:includable>
</b:widget>
Esto, sólo es uno de muchos métodos que deberán ser adaptados a cada situación; como dije antes, si las entradas poseen varias etiquetas habría que buscar variantes como usar arrays o variables auxiliares en el LOOP, por ejemplo:
<script>
  etiquetaPOST=&#39;<data:label.name/>&#39;;
  if(etiquetaPOST==#39;Fotos#39;) {
    flagFotos = 1;
  } else if (etiquetaPOST==#39;Videos#39;) {
    flagVideos = 1;
  }
</script>
y en el widget colocaríamos:
if(flagFotos==1) {
  document.getElementById("HTML7").style.display = "block";
}
Sea como sea, siempre hay que tener en cuenta que mostrar ese widget oculto es algo que deberá hacerse una vez que se haya creado así que, si la sidebar está a la izquierda y se genera ANTES que los posts, la condición deberá colocarse en otro lado, al final de la plantilla o en el mismo LOOP de los posts, caso contrario, no funcionará porque estaremos evaluando un dato que aún se desconoce.

Claro, todo se resolvería si Blogger nos permitiera acceder a ese dato desde cualquier parte de la plantilla pero, eso es pedirle peras al olmo.

16 comentarios:

Adrián J. Messina  

¡Vaya! ¡Si sabía que ibas a nombrar me ponía el traje y corbata!
Un verdadero honor.

Me ha resultado tremendamente útil y pude escribir el script para que asocie los widget según las etiquetas que tengo en el sitio y me funcionó sin problemas. Lo que me sorprendió es que pude hacerlo (¿Estaré entiendo un poco de esto?) con la ayuda que me habías proporcionado en aquel comentario.
Es bueno que hayas compartido esta entrada leí en muchos foros blogger que necesitaban este tipo de ayuda, como siempre no podía ser en otro lugar que en Vagabundia.

Gracias totales, un abrazo.

Responder
JMiur  

Voy a hacer una excepción y le responderé aunque no esté adecuadamente vestido :-D

No, me sorprende que lo hayas conseguido con sólo alguna guía básica. Eso de "ir entendiendo" es tal cual, a uno se le van aclarando conceptos que, en realidad, no son tan complicados como aparentan y una vez que se cruza la línea, ya no hay retorno :-D

Responder
Adrián J. Messina  

Es tu entusiasmo que provoca entusiasmo y nos vamos animando.
Es como cuando nos soltaban por primera vez para pedalear en la bici sin las rueditas. Nuevamente, gracias y un honor.

Responder
JMiur  

Gracias a ti, Adrian :D

Responder
Admin  

Hola Jmiur, perdón por el Off-topic, pero hace unos días había tenido mi plantilla bien sin ningún problema,pero desde ayer y ahora, cada vez que quiero editar algo de la plantilla y guardar el cambio e incluso cambiarla por otra me lanza el siguiente error:

Imagen: https://lh3.googleusercontent.com/-mK35GLakDng/TmvZntMV1CI/AAAAAAAADBM/7gyyiliN1Uk/error.jpg

Había tenido esa plantilla desde hace meses y hasta ahora me aparecen una serie de errores que jamas me habían aparecido, he intentado hacer todo pero sin ningún resultado, por eso recurro a ti, el blog es www.juegosfb.org.

Espero tu ayuda, saludos y de antemano gracias!

Responder
JMiur  

No sabría decirte. El blog parece verse bien pero eso que muestras en la imagen es raro; es el código de la plantilla con algún formato donde se cambian los caracteres < > y otros.

Desconozco el motivo ¿Has probado con otro navegador o borrando la caché? No parece ser un problema de la plantilla en si misma sino de la forma qen que se muestra.

Responder
Admin  

Hola Jmiur, ya realice lo que me aconsejaste, pero nada :( siguen apareciendo errores y lo peor que si me acepto una plantilla nueva y ahora al querer poner otra me sale un error diferente y luego el mismo que el de la imagen. Mucho peor aún es que estoy perdiendo trafico, no se que hacer!

Responder
JMiur  

El blog se ve normalmente así que el tema del tráfico no se debe a eso.

No me has respondido si ves lo mismo en otro navegador o no.

Eso que ves está codificado con caracteres Unicode ¿por qué? lo desconozco. Los primeros dos dicen:
%3C%3F
que es lo mismo que escribir:
<?

Puedes decodificarlo en muchos sitios online como este y pegar el resultado para que vuelva a ser legible.

Responder
Admin  

Jmiur, ya por una parte lo resolví, es que en la entrada http://vagabundia.blogspot.com/2009/08/blogger-editar-los-elementos-ocultos.html, realice ese truco, para ocultar un anuncio para que este no se mostrará en la edición html del panel de blogger. Entonces desde ahí comenzó todo los problemas. Como no lo solucione en mi PC, edite la plantilla en otra PC y borre los códigos que había agregado en esa entrada y funciono. Ahora ya lo puedo editar normalmente, en mi otro blog también tendré que hacer lo mismo ya que me aparece el mismo error.

El codigo que agregue fue el siguiente antes de

body#layout #ads {display:none;}

Borre ese codigo y ya no me apareció el error y ya pude editar la plantilla, aclarando que tuve que hacerlo en otra PC porque en la mía me aparecia el mismo error, ademas tuve que reinstalar el navegador, porque borrar el cache y probar en otro navegadores no me funcionó. No tengo idea porque me sucedió esto, pero bueno ya lo resolví, gracias Jmiur una vez más, saludos.

Responder
Admin  

Hola de nuevo Jmiur, después de tanto buscar, por fin encontré la solución, actualizar mi sitio a la nueva interface de blogger y listo. Hasta el momento ne me ha aparecido ningún error. No se porque pasará esto... Pero gracias por todo Jmiur, saludos

Responder
adm100388  

JMiur, vengo a recurrir a tu ayuda nuevamente. Es justamente con las etiquetas, veo que las podés condicionar, mi pregunta es si podría condicionar una etiqueta y a la vez mostrar dos juntas, ¿por qué esto? Porque Blogger restringe la cantidad máxima de caracteres permitidos y me molesta mucho, tengo que reducir algunas etiquetas, que para mí sin imprescindibles.

Además, ¿hay manera de cambiar ese límite?

Responder
JMiur  

Los límites no pueden cambiarse. Lo que no entiendo es eso de poner dos etiquetas juntas, ¿a qué te refieres?

Responder
adm100388  

Me refiero a lo siguiente, con un ejemplo: Tengo las etiquetas E1 y E2, ahora bien, si desde la publicación de la entrada yo agrego sólo la E1, entonces que muestre no sólo la E1, sino también la E2.
Es decir, estaría condicionado por un if, y además se sumaría para para mostrar el típico E1 (5).

La idea es mostrar una, dos, o varias etiquetas juntas a partir de una.

¿Será posible hacer esto?

Digo, ya que de esta manera estaríamos "superando" el límite que nos impone Blogger. No sé qué tan viable sea.

Responder
JMiur  

No veo de qué forma puedes hacer eso.

Responder
Rockero777  

Hola Jmiur, no encuentro la forma de como agregar etiquetas data de blogger dentro de un script, tienes alguna idea de como empezar haciendolo?, ya que cuando yo lo hago, no reconoce las etiquetas :( saludos

Responder
JMiur  

Dependerá del dato; en principio, se ponen entre comillas y no el script no debe incluir CDATA ya que se colocan usando < y &lg;

Así que, tal como muestra un ejemplo en el post, se escriben con entities:

var etiqueta = '<data:label.name/>';

Responder

¿Quiere dejar un comentario?

recuerde que los comentarios están siendo moderados y serán publicados a la brevedad ...

Todos los archivos y demos alojados en Fileden han sido redireccionados y deberían estar funcionando correctamente.
De todos modos, también puede accederse a ellos a través de SkyDrive

Nota: sólo los miembros de este blog pueden publicar comentarios.

Si le gusta ir a lo seguro utilice este botón para abrir los comentarios en una ventana modal en esta misma pagina.

Si añora tiempos idos, use este enlace para agregar un comentario al viejo estilo ...

 
CERRAR