lunes, 26 de marzo de 2012

¿Te desapareció el gadget de Seguidores? [Solución]

La mayoría ya sabíamos que desde el 1 de marzo de 2012 Google Friend Connect dejaría de estar accesible para los webmasters, excepto para los usuarios de Blogger.
Lo que nadie sabía es que a raíz de este cambio se iban a venir una serie de problemas relacionados con este servicio, incluyendo el gadget de Seguidores.


A mí como a muchos el gadget de Seguidores nos dejó de aparecer, se veía en blanco, con sólo el título del gadget y nada más.
Muchos pensaron que algo habían modificado y con ello se habían llevado sin querer el gadget, o que había algún script que estaba siendo incompatible. Y como Blogger tiene la mala costumbre de quedarse callado era normal pensar que algo habíamos hecho mal.


En algunas partes decían que sólo nos pasaba a los que usamos dominio propio pero no es así, esto se da a blogs con o sin dominio personalizado. También decían que eliminando cookies y caché se arreglaría pero eso tampoco funciona.


Dante Linares me comentó cómo lo solucionó y he corroborado que en el Foro de Ayuda de Blogger hablan de esta solución, misma que he aplicado y me ha funcionado muy bien.


Lo único que hay que hacer es cambiar el nombre del blog, guardar los cambios, y luego cambiar de nuevo al nombre original que tenías antes. Esto hará que el gadget de Seguidores aparezca otra vez.




Para cambiar el nombre del blog entra en Configuración | Básico. Por ejemplo, si tu blog es Nombre de mi blog cámbialo a Lo que sea
Guarda los cambios, y luego cámbialo de nuevo a Nombre de mi blog y listo, el Gadget de Seguidores estará visible y funcionando nuevamente.


También funciona si se cambia la dirección del blog por otra y luego se regresa a la dirección original.

Spoiler para ocultar y mostrar contenido en una entrada

Algunas veces tenemos mucho contenido que agregar en una entrada pero no queremos mostrarlo todo de un solo golpe, ya sea porque no queremos que la entrada se haga demasiado larga o porque queremos que el contenido se vaya descubriendo poco a poco.

Y sí, ya antes habíamos visto cómo expandir y contraer partes de una entrada usando Scriptaculous y que le da un efecto deslizante, pero como a muchos no les gusta usar Scriptaculous vamos a ver otra forma de hacerlo usando un simple javascript que aunque no tendrá efecto alguno cumple su función muy bien, que será la de mostrar y ocultar contenido.


Puedes ver un ejemplo haciendo click en el siguiente botón.












Podemos incluir dentro cualquier cosa que se nos ocurra, ya sea una tabla, una imagen, un reproductor de audio, un video, etc.














Para usarlo en tu blog sólo basta con poner este código en una entrada cada vez que lo quieras usar:

<div class="divspoiler">

<input type="button" value="Mostrar" onclick="if (this.parentNode.nextSibling.childNodes[0].style.display != '') { this.parentNode.nextSibling.childNodes[0].style.display = ''; this.value = 'Ocultar'; } else { this.parentNode.nextSibling.childNodes[0].style.display = 'none'; this.value = 'Mostrar'; }" />

</div><div><div class="spoiler" style="display: none;">

Aquí el contenido que queremos ocultar

</div></div>


Ahí sólo tienes que agregar donde se indica el contenido que quieres ocultar. Si el botón no te gusta mucho puedes leer esta entrada para saber cómo personalizar los botones.

O bien, puedes usar un enlace de texto en lugar de un botón










En ese caso el código a usar es este:

<div class="divspoiler">

<a href="javascript:void(0);" onclick="if (this.parentNode.nextSibling.childNodes[0].style.display != '') { this.parentNode.nextSibling.childNodes[0].style.display = ''; } else { this.parentNode.nextSibling.childNodes[0].style.display = 'none';}" >Mostrar / Ocultar &#9660;&#9650;</a>

</div><div><div class="spoiler" style="display: none;">

Aquí el contenido que queremos ocultar

</div></div>


O si lo prefieres también puedes usar una imagen.










Ahí el código sería este:

<div class="divspoiler">

<img src="URL de la imagen" onclick="if (this.parentNode.nextSibling.childNodes[0].style.display != '') { this.parentNode.nextSibling.childNodes[0].style.display = ''; } else { this.parentNode.nextSibling.childNodes[0].style.display = 'none';}" />

</div><div><div class="spoiler" style="display: none;">

Aquí el contenido que queremos ocultar

</div></div>


Bastante práctico y fácil de usar ¿no? Puedes agregar varios en la misma entrada sin necesidad de cambiar alguna ID ni nada de eso. Sólo procura no cambiar a la pestaña Redactar una vez que lo pongas y no modifiques los espacios del código para que funcione correctamente.

Cambiar el color a los botones INPUT

Aunque esto la mayoría lo sabe hacer, aun me siguen preguntando seguido cómo hacer para cambiar el color de los botones de algunos gadgets, por ejemplo el botón de Buscar, el de Suscribir, etc.
El código común de un botón es como este:

<input value="Buscar" name="button" type="submit"/>



Lo único que hay que hacer es agregarle un estilo para que tenga un color de fondo:

<input style="background-color: #FF9900" value="Buscar" name="button" type="submit"/>


También puedes modificar el color de la letra, para ello agregamos el estilo "color":

<input style="color: #FF0000" value="Buscar" name="button" type="submit"/>


O bien, puedes cambiar ambos:

<input style="color: #003366; background-color: #99CCFF" value="Buscar" name="button" type="submit"/>


O si lo prefieres, puedes usar una imagen de fondo:

<input style="color: #ffffff; background: url('URL de la imagen')" value="Buscar" name="button" type="submit">


Puedes también ponerle un borde al botón del grueso y el color que quieras:

<input style="border: #000 1px solid; background-color: #FF99FF" value="Buscar" name="button" type="submit">




Como ves, puedes hacer muchas variaciones para decorar tus botones, sólo es cuestión de que eches a andar tu creatividad y dejarás de tener los típicos botones grises.
Recuerda que donde dice value="Buscar" es el texto que aparece en el botón, también puedes jugar un poco con él y cambiar ese texto por otro.

Expandir y contraer partes de una entrada

Este truco permite esconder partes de una entrada y con la posibilidad de mostrarlos cuando el lector quiera. Se puede esconder texto, imágenes o video y sirve para ahorrar espacio cuando tenemos un elemento muy largo dentro de la entrada.
Este es un ejemplo con una imagen:

[+/-] Ver / Ocultar

Lo mismo se puede hacer para un texto:

[+/-] Ver / Ocultar

O incluso con un video:

[+/-] Ver / Ocultar

Primero vamos a Diseño > Edición de HTML y antes de </head> pegamos lo siguiente:
<!-- Prototype y Scriptaculous-->
<script src='http://www.google.com/jsapi'/>
<script>
google.load(&quot;prototype&quot;,&quot;1.6.0.3&quot;);
google.load(&quot;scriptaculous&quot;, &quot;1.8.2&quot;);
</script>
<!-- Prototype y Scriptaculous-->


Antes de pegar lo anterior verifica si tu plantilla ya lo tiene, de ser así omite ese paso.
Lo siguiente será usar el código que es el que ocultará las partes dentro de un post. Así que cuando quieras ocultar algún elemento de la entrada deberás usar este código:
<a href='#' onclick='Effect.toggle("expandir1","slide"); return false'>[+/-] Ver / Ocultar</a><div id='expandir1' style='display: none;'>Aquí va el contenido que se ocultará</div>

Toma en cuenta que donde dice expandir1 deberás cambiarlo cada vez que quieras usar este efecto, puedes modificarlos por expandir2, expandir3, etc. Lo que está en color rojo es el contenido que estará oculto, puede ser texto, imágenes, tablas, videos, etc. cualquier elemento que tengas dentro de un post podrás ocultarlo.

Últimas entradas por categorías con imagen en miniatura

Algunas veces queremos tener todo muy organizado para que nuestros lectores puedan encontrar con mayor facilidad los temas de su interés, y es ahí cuando en lugar de poner un gadget con las últimas entradas queremos poner sí las últimas entradas pero por categorías, de manera que puedas mostrar las últimas entradas por cada etiqueta que quieras y además mostrar la miniatura de dicho elemento.








Para poner en tu blog este gadget de últimas entradas por categorías realizaremos estos sencillos pasos:

1.- Entra en Diseño | Edición de HTML y antes de ]]></b:skin> pega lo siguiente:

/* Últimas entradas por categorías

--------------------------------- */

img.label_thumb{

float:left;

border:1px solid #8f8f8f; /* Borde de las miniaturas */

margin-right:10px !important;

height:55px; /* Alto de las miniaturas */

width:55px; /* Ancho de las miniaturas */

}

.label_with_thumbs {

float: left;

width: 100%;

min-height: 70px;

margin: 0px 10px 2px 0px;

padding: 0;

}

ul.label_with_thumbs li {

padding:8px 0;

min-height:65px;

margin-bottom:10px;

}

.label_with_thumbs a {}

.label_with_thumbs strong {padding-left:0px;}
2.- Luego antes de </head> pega este script:

<script type='text/javascript'>

//<![CDATA[

function labelthumbs(json){document.write('<ul class="label_with_thumbs">');for(var i=0;i<numposts;i++){var entry=json.feed.entry[i];var posttitle=entry.title.$t;var posturl;if(i==json.feed.entry.length)break;for(var k=0;k<entry.link.length;k++){if(entry.link[k].rel=='replies'&&entry.link[k].type=='text/html'){var commenttext=entry.link[k].title;var commenturl=entry.link[k].href;}

if(entry.link[k].rel=='alternate'){posturl=entry.link[k].href;break;}}var thumburl;try{thumburl=entry.media$thumbnail.url;}catch(error)

{s=entry.content.$t;a=s.indexOf("<img");b=s.indexOf("src=\"",a);c=s.indexOf("\"",b+5);d=s.substr(b+5,c-b-5);if((a!=-1)&&(b!=-1)&&(c!=-1)&&(d!="")){thumburl=d;}else thumburl='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7MsnxAQkNExh2X_JEZLw52ff78eno0qPVFqTXcjlqtlPXqnjjg2Yei-9_a9ycl9ZGeqUbuo0dWq6vj_TefUWfpQwUyjnmbw5TaxNF1ETPzTwkSjPlU3DC4CjIG8GA5xPB7psyS7XF9Tc/';}

var postdate=entry.published.$t;var cdyear=postdate.substring(0,4);var cdmonth=postdate.substring(5,7);var cdday=postdate.substring(8,10);var monthnames=new Array();monthnames[1]="Ene";monthnames[2]="Feb";monthnames[3]="Mar";monthnames[4]="Abr";monthnames[5]="May";monthnames[6]="Jun";monthnames[7]="Jul";monthnames[8]="Ago";monthnames[9]="Sep";monthnames[10]="Oct";monthnames[11]="Nov";monthnames[12]="Dic";document.write('<li class="clearfix">');if(showpostthumbnails==true)

document.write('<a href="'+posturl+'" target ="_top"><img class="label_thumb" src="'+thumburl+'"/></a>');document.write('<strong><a href="'+posturl+'" target ="_top">'+posttitle+'</a></strong><br>');if("content"in entry){var postcontent=entry.content.$t;}

else

if("summary"in entry){var postcontent=entry.summary.$t;}

else var postcontent="";var re=/<\S[^>]*>/g;postcontent=postcontent.replace(re,"");if(showpostsummary==true){if(postcontent.length<numchars){document.write('');document.write(postcontent);document.write('');}

else{document.write('');postcontent=postcontent.substring(0,numchars);var quoteEnd=postcontent.lastIndexOf(" ");postcontent=postcontent.substring(0,quoteEnd);document.write(postcontent+'...');document.write('');}}

var towrite='';var flag=0;document.write('<br>');if(showpostdate==true){towrite=towrite+monthnames[parseInt(cdmonth,10)]+'-'+cdday+' - '+cdyear;flag=1;}

if(showcommentnum==true)

{if(flag==1){towrite=towrite+' | ';}

if(commenttext=='1 Comments')commenttext='1 Comment';if(commenttext=='0 Comments')commenttext='No Comments';commenttext='<a href="'+commenturl+'" target ="_top">'+commenttext+'</a>';towrite=towrite+commenttext;flag=1;;}

if(displaymore==true)

{if(flag==1)towrite=towrite+' | ';towrite=towrite+'<a href="'+posturl+'" class="url" target ="_top">Más »</a>';flag=1;;}

document.write(towrite);document.write('</li>');if(displayseparator==true)

if(i!=(numposts-1))

document.write('');}document.write('</ul>');}

//]]>

</script>


3.- Por último entra en Diseño | Elementos de la página | Añadir un gadget | HTML/Javascript y ahí pega esto:

<script type='text/javascript'>var numposts = 3;var showpostthumbnails = true;var displaymore = false;var displayseparator = true;var showcommentnum = false;var showpostdate = false;var showpostsummary = true;var numchars = 100;</script>

<script type="text/javascript" src="/feeds/posts/default/-/Nombre-de-la-etiqueta?published&alt=json-in-script&callback=labelthumbs"></script>
En donde dice Nombre-de-la-etiqueta va el nombre de la etiqueta que quieres mostrar, tal como es, respetando mayúsculas y minúsculas. En el caso que la etiqueta contenga espacios o acentos lo mejor es que ingreses a la etiqueta y te fijes en la URL que aparece en la barra de direcciones del navegador, al final de la URL vendrá el nombre de la etiqueta tal como debe ponerse, por ejemplo, si tuviera espacios se vería así:
http://Nombre-de-mi-blog.blogspot.com/search/label/Nombre%20etiqueta


También dentro de éste último código hay unas áreas que podemos personalizar, true significa que lo mostrará y false que no lo mostrará.

var numposts ← Número de entradas a mostrar

var showpostthumbnails Mostrar o no las miniaturas

var displaymore Mostrar o no el enlace para leer más

var displayseparator Mostrar o no un separador

var showcommentnum Mostrar o no el número de comentarios

var showpostdate Mostrar o no la fecha de las entradas

var showpostsummary Mostrar o no el resumen de las entradas

var numchars Número de caracteres en los resúmenes


Y en el segundo código hay una URL en color naranja, esa es la imagen que se mostrará cuando la entrada no contenga ninguna imagen, puedes cambiarla por otra imagen si lo deseas.



Recuerda que el gadget muestra las ultimas entradas de una etiqueta en particular, por lo tanto, si quieres mostrar las últimas entradas de otras etiquetas entonces sólo tienes que repetir el paso #3 por cada categoría adicional que quieras agregar.

Quitar el Leer más automático en las entradas

Por la red abundan miles de plantillas personalizadas para Blogger y muchas de ellas tienen incluido sl script que genera resúmenes automatizados con imágenes en miniatura. Pero a veces quienes descargan estas plantillas no desean utilizar esta característica. Así que sí deseas eliminar el Leer más automático sólo hay que seguir unos cuantos pasos para dejar las entradas "normales". En realidad lo que haremos será lo inverso a lo que haríamos si quisiéramos instalar por primera vez esta característica.


Primero que nada, como tocaremos partes importantes de la plantilla haz un respaldo de la misma, luego entra en Diseño | Edición de HTML, marca la casilla Expandir plantillas de artilugios y busca un código como este:

<b:if cond='data:blog.pageType != &quot;item&quot;'>

<b:if cond='data:blog.pageType != &quot;static_page&quot;'>

<div expr:id='&quot;summary&quot; + data:post.id'><data:post.body/></div>

<script type='text/javascript'>createSummaryAndThumb(&quot;summary<data:post.id/>&quot;);</script>

<span class='rmlink' style='float:right'><a expr:href='data:post.url'>Leer más...</a></span>

</b:if></b:if>

<b:if cond='data:blog.pageType == &quot;item&quot;'><data:post.body/></b:if>

<b:if cond='data:blog.pageType == &quot;static_page&quot;'><data:post.body/></b:if>
Si te pierdes un poco en encontrar el código busca lo que está en color rojo y de esa forma reconocerás todo lo demás.
Algunas veces puede variar un poco el código y quizá no sea exactamente idéntico, pero deberá tener mucha similitud.
Cuando lo encuentres elimínalo con mucho cuidado, y en su lugar pon esto:

<data:post.body/>
Una vez hecho esto dale Vista Previa, si todo ha salido bien ya deberán verse las entradas completas sin ningún resumen. Ahora vamos a quitar el script de la plantilla para que no tenga que estar cargando inutilmente.

Para ello busca antes de </head> o después de <head> un código como este y elimínalo:

<script type='text/javascript'>

summary_noimg = 400;

summary_img = 300;

img_thumb_height = 125;

img_thumb_width = 125;

</script>



<script type='text/javascript'>

//<![CDATA[



/******************************************



(C)2008 by Anhvo



visit http://en.vietwebguide.com to get more cool hacks

********************************************/

function removeHtmlTag(strx,chop){

if(strx.indexOf("<")!=-1)

{

var s = strx.split("<");

for(var i=0;i<s.length;i++){

if(s[i].indexOf(">")!=-1){

s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length);

}

}

strx = s.join("");

}

chop = (chop < strx.length-1) ? chop : strx.length-2;

while(strx.charAt(chop-1)!=' ' && strx.indexOf(' ',chop)!=-1) chop++;

strx = strx.substring(0,chop-1);

return strx+'...';

}



function createSummaryAndThumb(pID){

var div = document.getElementById(pID);

var imgtag = "";

var img = div.getElementsByTagName("img");

var summ = summary_noimg;

if(img.length>=1) {

imgtag = '<span style="float:left; padding:0px 10px 5px 0px;"><img src="'+img[0].src+'" width="'+img_thumb_width+'px" height="'+img_thumb_height+'px"/></span>';

summ = summary_img;

}



var summary = imgtag + '<div>' + removeHtmlTag(div.innerHTML,summ) + '</div>';

div.innerHTML = summary;

}



//]]>

</script>
Con eso habrás quitado por completo el Leer más automático con imágenes en miniatura y tus entradas se mostrarán de forma completa.

Leer más con imágenes en miniatura mejorado

Anteriormente vimos cómo tener el Leer más con imágenes en miniatura que hace que todas las entradas tengan un resumen de forma automática, sin tener que estar ingresando códigos extra cada vez que redactamos una entrada.
Si bien ese script funciona muy bien muchos han sido quienes han preguntado si es posible mostrar una imagen aun cuando la entrada no la tenga; y si había alguna forma para que las imágenes en miniatura no quedaran fuera de proporción, pues usualmente no subimos imágenes perfectamente cuadradas sino más bien rectangulares y al mostrarse en miniatura se deformaban.


Bien, después de un par de horas de pelearme con la computadora pude hacerle tres mejoras al script de modo que si una entrada no tiene una imagen podrá mostrar una imagen predeterminada para ilustrar el resumen.
Luego, las imágenes en miniatura ya no perderán su proporción, por lo que una imagen rectangular podrá verse más pequeña pero igualmente rectangular.
Y además, las imágenes en miniatura tendrán un enlace a la entrada, así que podrás acceder al post completo desde el link de Leer más, o desde el título de la entrada, o bien, haciendo click en la imagen en miniatura.






El procedimiento es el mismo, primero entramos en Diseño | Edición de HTML, marca la casilla Expandir plantillas de artilugios, y busca esta línea:
<data:post.body/>
Elimínala y en su lugar agrega esto:

<b:if cond='data:blog.pageType != &quot;item&quot;'>

<b:if cond='data:blog.pageType != &quot;static_page&quot;'>

<div expr:id='&quot;summary&quot; + data:post.id' style='font-size:13px; text-align:justify;'><data:post.body/></div>

<script type='text/javascript'>createSummaryAndThumb(&quot;summary<data:post.id/>&quot;,&quot;<data:post.url/>&quot;);</script>

<span class='rmlink' style='float:right'><a expr:href='data:post.url'>Leer más...</a></span>

</b:if></b:if>

<b:if cond='data:blog.pageType == &quot;item&quot;'><data:post.body/></b:if>

<b:if cond='data:blog.pageType == &quot;static_page&quot;'><data:post.body/></b:if>
Ahora antes de </head> pega lo siguiente:

<script type='text/javascript'>

summary_txt = 410;

img_thumb_width = 120;

</script>



<script type='text/javascript'>

//<![CDATA[

// Script original de Anhvo, modificado por ciudadblogger.com

function removeHtmlTag(strx,chop){

if(strx.indexOf("<")!=-1)

{

var s = strx.split("<");

for(var i=0;i<s.length;i++){

if(s[i].indexOf(">")!=-1){

s[i] = s[i].substring(s[i].indexOf(">")+1,s[i].length);

}

}

strx = s.join("");

}

chop = (chop < strx.length-1) ? chop : strx.length-2;

while(strx.charAt(chop-1)!=' ' && strx.indexOf(' ',chop)!=-1) chop++;

strx = strx.substring(0,chop-1);

return strx+'...';

}

function createSummaryAndThumb(pID, pURL){

var div = document.getElementById(pID);

var imgtag = "";

var img = div.getElementsByTagName("img");

if(img.length<=0) {

imgtag = '<span style="float:left; padding:0px 10px 5px 0px;"><a href="'+ pURL +'"><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyyPuhw5u0K-rAC0DdPV6R08aX2m9iAKfH-vN74cNfNQQcKy7eQ5dsjYDDeAePXq2S2eZKfDxlK1vUaTgpfP_7e6lCGYSTrWGEdnYlg2YduW8uux1fyhpP4Q7pHq1girQD-aITmOJZskI/" width="'+img_thumb_width+'px" /></a></span>';

summ = summary_txt;

}

if(img.length>=1) {

imgtag = '<span style="float:left; padding:0px 10px 5px 0px;"><a href="'+ pURL +'"><img src="'+img[0].src+'" width="'+img_thumb_width+'px"/></a></span>';

summ = summary_txt;

}

var summary = imgtag + '<div>' + removeHtmlTag(div.innerHTML,summ) + '</div>';

div.innerHTML = summary;

}

//]]>

</script>
Guarda los cambios y listo. Ahora veamos las modificaciones que se le puede hacer para personalizarlo.



En el primer código que hemos agregado, he puesto en negrita los estilos para el resumen, ahí se puede cambiar el tamaño de la letra, la alineación del texto, y se le pueden agregar más estilos como el color de la letra, color de fondo, etc.
En donde dice Leer más puedes cambiarlo por otro texto o bien, por una imagen, si ese es el caso entonces elimina ese texto y en su lugar agrega esto cambiando la URL de la imagen donde se indica:
<img src="URL de la imagen" border="0" />


En el segundo código que hemos agregado veremos al inicio dos variables:

summary_txt = 410; indica el número de caracteres que tendrá el resumen.

img_thumb_width = 120; es el ancho que tendrán las imágenes en miniatura.



Un poco más abajo está una URL en color azul, esa es la imagen que se mostrará en el resumen cuando la entrada no tenga una imagen, y será esta:





Esa imagen la puedes cambiar por cualquier otra que elijas, sólo cambia la URL en color azul por la de la imagen que quieres.
Como has podido notar los códigos son bastantes similares al método anterior sólo que con unas pequeñas modificaciones que aunque parecen insignificantes mejoran por mucho la funcionalidad del script.