Posts Relacionados en Blogger/Blogspot

Publicado por: Diego Cabai el 03-ene-2008 a las 12:30 con 19 comentarios

warehause Arrancamos el año con todo, por eso estoy estrenando una nueva función en el Blog. Cuando ingreses a un artículo, verás en la parte inferior del mismo y luego de los comentarios, un cuadro con una lista de artículos relacionados al que estas leyendo. De esta manera se puede seguir navegando por el Blog dentro de los mismos temas o categorías de tu interés. Adicionalmente a eso se agregará la posibilidad de que ingreses tu banner por cierto tiempo a un bajísimo costo, lo que puede representar gran publicidad para tu sitio. Este último feature todavía está en etapa beta, pero pronto lo verás en la misma sección.

El código para implementar esto lo saqué del sitio de PurpleMoggy, mas abajo agrego algunos comentarios sobre la variante en cuanto a diseño que hice, pero en principio traduzco el tutorial para aquellos que les sea complicado seguirlo.

Antes de empezar nos tenemos que asegurar que nuestras etiquetas no tienen ningún caracter extraño como (?) o (/).
Para empezar agregaremos el código JavaScript al sitio y para eso tenemos que ir a nuestro panel de Blogger, elegir la solapa "Plantilla" y luego "Edición HTML". Ahí buscamos el tag "</head>" y justo antes de esta línea colocamos el siguiente código:

<script type="text/javascript">
//<![CDATA[
var relatedTitles = new Array();
var relatedTitlesNum = 0;
var relatedUrls = new Array();
function related_results_labels(json) {
for (var i = 0; i < json.feed.entry.length; i++) {
var entry = json.feed.entry[i];
relatedTitles[relatedTitlesNum] = entry.title.$t;
for (var k = 0; k < entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
relatedUrls[relatedTitlesNum] = entry.link[k].href;
relatedTitlesNum++;
break;
}
}
}
}
function removeRelatedDuplicates() {
var tmp = new Array(0);
var tmp2 = new Array(0);
for(var i = 0; i < relatedUrls.length; i++) {
if(!contains(tmp, relatedUrls[i])) {
tmp.length += 1;
tmp[tmp.length - 1] = relatedUrls[i];
tmp2.length += 1;
tmp2[tmp2.length - 1] = relatedTitles[i];
}
}
relatedTitles = tmp2;
relatedUrls = tmp;
}
function contains(a, e) {
for(var j = 0; j < a.length; j++) if (a[j]==e) return true;
return false;
}
function printRelatedLabels() {
var r = Math.floor((relatedTitles.length - 1) * Math.random());
var i = 0;
document.write('<ul>');
while (i < relatedTitles.length && i < 20) {
document.write('<li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a></li>');
if (r < relatedTitles.length - 1) {
r++;
} else {
r = 0;
}
i++;
}
document.write('</ul>');
}
//]]>
</script>


Guardamos y marcamos la opción "Expandir plantillas de artilugios". Ahí buscamos el siguiente código que seguramente se encuentre en la sección post-footer-line-1, 2 o 3.

<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<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>
</b:if>

Ese código debemos cambiarlo por el siguiente o bien agregar las líneas adicionales.

<b:if cond='data:post.labels'>
<data:postLabelsLabel/>
<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:if cond='data:blog.pageType == "item"'>
<script expr:src='"/feeds/posts/default/-/" + data:label.name + "?alt=json-in-script&amp;callback=related_results_labels&amp;max-results=10"' type='text/javascript'/>
</b:if>
</b:loop>
</b:if>

Guardamos la plantilla y vamos a "Elementos de Página" para agregar el código que nos va a mostrar los Posts Relacionados. Agregamos un nuevo HTML/Javascript Widget y lo ubicamos donde querramos. El código que debe tener es el siguiente:

<script type="text/javascript">
removeRelatedDuplicates();
printRelatedLabels();
</script>

Grabamos y ahora volvemos a la solapa "Edición HTML" para hacer la última modificación. Debemos buscar el HTML Widget que recien agregamos. Si le pusiste un título, buscalo por ese título, si no le pusiste un título tenes que buscarlo como HTML# donde # es el último número de HTML que encuentres. El formato sería como el siguiente y en este caso es el widget HTML13 pero puede variar. Debemos agregar las líneas que estan en negrita al código de nuestro Widget.

<b:widget id='HTML13' locked='false' title='Related Posts' type='HTML'>
<b:includable id='main'>
<b:if cond='data:blog.pageType == "item"'>
<!-- only display title if it's non-empty -->
<b:if cond='data:title != ""'>
<h2 class='title'><data:title/></h2>
</b:if>
<div class='widget-content'>
<data:content/>
</div>

<b:include name='quickedit'/>
</b:if>
</b:includable>
</b:widget>

Para controlar la cantidad de artículos que se listan hay dos parámetros con los que podemos jugar. El primero se encuentra en el primer cuadro de código y dice algo como i < 20. El segundo número está en el tercer cuadro de código y dice algo como max-results=10. Con estos números podemos controlar la cantidad de posts que van a aparecer. También debemos controlar esa cantidad porque puede afectar a la velocidad de carga del sitio.


Modificaciones Personales

En principio lo que hice fue controlar la cantidad máxima de posts a mostrar en 5 para ambos valores. Creo que con 5 artículos relacionados estamos bien y es una buena cantidad.
Luego le quise dar un aspecto un poco mas agradable utilizando CSS, el código es el siguiente:

#relatedposts {width:600px;text-align:left;padding:0px; margin-left:15px;}
.relatedpostbox{border:1px solid #3399ff;width:580px;background-color:#e9f8ff;}
.relposttitle {height:12px;padding:5px 10px 5px 10px;color:#000;font-style:normal;font-size:12px;text-ransform:uppercase;}
.relposttxt {padding:0px 0pt 5px 15px; font-size:14px;}
.relpostlink {font-size:10px;color:#666666;font-weight:normal;}
.relposttxt p {margin-right:10px;margin-bottom:10px;}
.relposttxt ul {list-style-type: none;list-style-image: none;padding-left: 0;}
.relposttxt li {list-style-type: none;list-style-image: none;padding-left: 0;}

Luego modifiqué el contenido del Widget HTML que está representado por el 4to cuadro de código para poder asociar esos tags CSS. A esto se le puede agregar publicidad Adsense por ejemplo con el mismo formato o algún banner que quieras. El código sería el siguiente:

<br />
<div id="relatedposts">
<div class='relatedpostbox'>
<div class='relposttitle'><strong>Temas Relacionados</strong></div>

<div class='relposttxt'>
<script type="text/javascript">
removeRelatedDuplicates();
printRelatedLabels();
</script>
## ACA PODES AGREGAR TU CODIGO ADSENSE ##
</div></div></div>

La última modificación que hice fue agregar la URL debajo del título del post para hacerlo mas parecido al look de Adsense. Esto lo hice modificando el código del 1er cuadro. Si te interesa hacer lo mismo debemos buscar la línea <li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a></li> y modificarla por lo siguiente:

<li><a href="' + relatedUrls[r] + '">' + relatedTitles[r] + '</a><br /><span class="relpostlink">' + relatedUrls[r] + '</span></li>

Para ver cómo queda implementado ingresá a cualquier artículo y navegá hasta el final pasando los comentarios.

Este artículo tiene 19 Comentarios Agregá el tuyo!
Lucía - 3 de enero de 2008 18:31

Hace tiempo que buscaba algo así y al leer tu post ya me estaba emocionando.

Pero nada, después de seguir los primeros pasos sin hacer tus modificaciones, no me funciona. No aparece nada después de los comentarios en la entrada.

Alguna idea??

Yo es que no soy precisamente experta en el tema, pero he seguido tus indicaciones al pie de la letra.

Gracias de antemano por la ayuda.

Saludos

Diego Cabai - 3 de enero de 2008 21:19

Lucía, gracias por el comentario. Está bien que te emociones porque funciona, yo lo tengo implementado de esta manera. Vamos por parte:

1- 1era parte del código hiciste copy y paste en el renglón antes del </head>?

2- Expandiste los artilugios y buscaste <b:if cond='data:post.labels'> para pisar el contenido con el 3er bloque de código

3- Agregaste un nuevo Widget HTML y lo moviste debajo del cuadro del Blog donde aparecen las entradas

4- Le pusiste como contenido el 4to bloque de código

5- Buscaste ese bloque recien agregado y agregaste las líneas en negrita del 5to bloque.

Si hiciste eso y además tenes mas de una categoría asignada a los posts en tu blog debería funcionar. A cuál de tus dos blogs lo asignaste? Para revisar si el código Javascript está bien agregado.

Saludos!

Lucía - 5 de enero de 2008 9:05

He estado revisando todos los pasos Diego y resulta que no había colocado el elemento de página en el lugar adecuado.

Ahora ya funciona perfecto.

Aunque claro, lo fantástico sería que apareciera al final del texto de la entrada y no hubiera que entrar en la página indivudual de dicha entrada, porque no creo que todo el mundo lo haga.

Muchísimas gracias por la ayuda y por el descubrimiento de este sistema.

Te importa si lo comento en mi blog (con las debidas referencias al tuyo claro)??

Diego Cabai - 5 de enero de 2008 13:33

Me alegro mucho Lucía que haya funcionado. Es lo unico que podemos hacer desde Blogger. Sino ya habría que hacer un desarrollo mas avanzado.

No tengo problemas en que hagas un link, al contrario, pero recuerda que yo no lo descubrí, en la web hago referencia al sitio original. Yo solo hice una traducción del mismo y agregué los ultimos tips para el diseño.

Saludos!

eze.racing.rnr - 9 de enero de 2008 16:37

hola diego.

segui los pasos, todo bien. Pero el tema es que yo no quiero que el recaudro de temas relacionados me aparezca dentro del footer (parte celeste de abajo) sino que quiero que aparezca en la parte de abajo de las entradas del blog; cosa que logré, pero no me pone ningún tema relacionado, nunca un link. entonces ahi esta el error, pero no me doy cuenta cual es. Si me podes ayudar solucionar este problema te lo agaradeceria.

mi blog es http://dinerofacilptc.blogspot.com

me gustaria intercambiar links con tu blgo tambien.

te dejo mi msn asi hablamos, eze.racing.rnr@hotmail.com

saludos

Diego Cabai - 9 de enero de 2008 17:13

eze.racing.rnr, gracias por el comentario y muy bueno tu blog, estaba en algunos PTC pero no conocía otros.

Te cuento que el sistema de Post Relacionados trabaja a través de las etiquetas de la entrada y para eso debe saber en qué entrada está. Si agregás el código HTML en el post-footer-section por ejemplo no puede detectar las etiquetas de cada entrada ya que es el mismo código para una página individual. Si bien no funciona ni tiene todos los features de Wordpress, al menos podemos ver las entradas relacionadas cuando ingresan a una. Creo que hay otros sistemas dando vueltas con una programación mas avanzada. Esta es la mas sencilla y que funciona siempre. Por ahora lamento no poder ayudarte, no se como hacer para que en la página principal se vean los temas relacionados de cada una.

En cuanto al intercambio de links, ya te agregué al Blogroll. Saludos!

Fernando Ferrari AKA jago_ff - 10 de enero de 2008 11:08

Muchas gracias Diego, me a sido super util :D

Diego Cabai - 10 de enero de 2008 12:01

Gracias a vos Fernando y muy bueno tu Blog !!

Saludos!

Lucalex - 13 de enero de 2008 17:17

Hola Diego,

este post es fantastico. He intentado aplicarlo a mi web Blogger's interview,pero no enseña los temas relacionados. Es muy raro, ya que he seguido tus indicaciones a la letra. Además hay posts que están relacionados entre ellos según la etiqueta...bueno a ver si puedes ayudarme y sino..no pasa nada. Ah, mañana voy a postear tu artículo...prometido!

Diego Cabai - 13 de enero de 2008 19:48

Hola Lucalex, gracias por el comentario, pero te digo que es raro, si seguís los pasos debe funcionar. Los pasos mas importantes son agregar el código Javascript ANTES del </head>, modificar el código de categorías y agregar el código HTML en un widget justo debajo del Blog. Después se agregan dos líneas a ese widget simplemente para que se vea cuando se ingrese en una noticia únicamente, pero algo ya deberías ver. Revisa los pasos para verificar que todo esté correcto.

Saludos!

FlorMaría - 20 de enero de 2008 5:30

Hola Diego,hice una pregunta a google, de como hacer para que mi blog estuviera en una página pública junto a otros blogs,me enviaron tu links, en donde dices que si no me molesta que éste en tú página, pues claro que no , además me das instrucciones de como perfeccionar mi blog, ya que lo tengo en construcción , pero con personas como tú y las que aparecen en tus comentarios , creo que es el mejor lugar que he encontrado. http://seguircreciendoalamitaddemivida.blogspot.com espero con tus consejos poder aprender y lograr hacer un diario hermoso para compartir. Saludos a todos desde Venezuela.

Diego Cabai - 20 de enero de 2008 11:10

Flormaría, gracias por tus comentarios, de verdad. Estamos para lo que necesites así que pregunta tranquila y sin miedo. Muy bueno tu blog! Te hago una sugerencia, trata que la publicidad de adsense tenga los mismos colores que el resto de tu página, así no se nota tanto y puedes recibir mas clicks.

Saludos!

Adrian - 2 de marzo de 2008 6:33

Muchas gracias por este estupendo aporte ya lo he implementado ahora cambiare su estilo CSS y haber que mas le puedo hacer
Saludos
visita mi blog http://ajedrezmagico.blogspot.com

Diego Cabai - 2 de marzo de 2008 16:13

Gracias Adrian por el comentario, te quedó muy bueno en tu blog y me gusta mucho el diseño que tiene en general. Además me gusta jugar al Ajedrez así que tal vez ganaste un lector mas. :)

Saludos!

Punto Baires - 28 de marzo de 2008 13:25

diego tenfgo muchos problemas, no me salen los temas relacionado y segui paso por paso tus indicaciones, ahora bien una explicacion tuya me perdio, son las lineas en negrita, dado quer solo una linea me faltaba y que no vi ninguna negrita dentro de ese codigo

Punto Baires - 28 de marzo de 2008 13:48

primer problema, cunado guardo la platilla todas las comillas de tus codigos se convierten en algo parecido a esto " segundo problema cubnado guardo despuyes de customizar el nuevo elemto html me sale este mensaje
"The value of attribute "cond" associated with an element type "null" must not contain the '<' character"

Diego Cabai - 29 de marzo de 2008 17:08

Punto Baires, bueno, paso a responder tus consultas:

* Negritas: En el cuadro de código que habla de negritas, hay dos líneas así. La que está arriba del comentario, que dice algo así:
<b:if cond='data:blog.pageType == "item"'>

Y la tercera antes del final que dice algo así para cerrar la línea anterior:
</b:if>

* Código: Fijate que el código Javascript te está quedando en una sola línea todo junto. Tratá de que quede igual que lo publico yo. Tal vez estes teniendo problemas con el copy/paste desde el browser al editor de Blogger y los enters o espacios no los tome igual. Fijate si podes primero copiarlo a un notepad a ver cómo te queda y después volcarlo a Blogger. Esto te das cuenta cuando haces View -> Page Source desde tu navegador. Si ves mi blog se ve el código saltado por líneas, el tuyo se ve todo junto y pegado, por ahí debe venir el problema.

Saludos!

*D@S - 30 de marzo de 2008 0:28

me salio muy bien aca lo pueden ver en mi blog http://daslive.blogspot.com/

Lo q no me quedo muy claro en lo de codigo CSS donde lo pongo para q quede con un recuadro los temas relaciona2, lo demas todo bien.

Diego Cabai - 30 de marzo de 2008 16:12

D@S, gracias por el comentario. Muy bueno tu Blog y vi que te funcionaron perfectamente. Lo que decía del código CSS para darle un poco de formato es así:

Una vez que lo tenes funcionando como vos, podes darle formato agregando algo de código CSS. El código CSS va en tu sección de <style> dentro del <head>. Hoy ya tenes algo de este código para otras cosas de diseño. Yo cree el ID #relatedposts y a partir de ahí le di formato a las listas, links, etc. Luego para asociar dicho código de formato a tus posts relacionados que ya estan funcionando, tenes que volver a donde pusiste el código HTML/Javascript Widget. Ahí modificas ese código por el que te puse mas arriba agregando unos <div> con la clase de CSS que generé. Para probar podes usar el código CSS que yo hice, modificar tu Widget y vas a tener un cuadro parecido al que tengo hoy yo. Después podes volver al código CSS y empezar a modificar parámetros para darle un formato que vos quieras, como por ejemplo los códigos de color, o el ancho total de 600px al tamaño tuyo, etc.

Ahora, te hago una sugerencia para tu blog para que quede un poco mejor, sacale la barra de Google de arriba de todo. Si queres saber como, son un par de líneas nada mas que las comenté acá: Cómo Sacar el Título y la Descripción de Blogger/Blogspot

Saludos!

Publicar un comentario en la entrada





  Blogaritmo Natural
 
  Sobredosis de Cafeína Blog de JR