miércoles, octubre 24, 2007

Blogger: Posts relacionados (2)

Esta es una variante para mostrar Posts Relacionados. En este caso, lo único que debemos hacer es agregar el script en la plantilla.

La ubicación depende de cada caso pero, por ejemplo, podemos agregarla como un nuevo bloque dentro del pie de página de los posts. Estos, se identifican con el siguiente código:
<p class='post-footer-line post-footer-line-1'>
.......
</p>
Y, normalmente, en una plantilla standard, hay tres:

<p class='post-footer-line post-footer-line-1'> </p>
<p class='post-footer-line post-footer-line-2'> </p>
<p class='post-footer-line post-footer-line-3'> </p>

El primero, contiene los datos el autor, el segundo las etiquetas y el tercero no tiene uso y es el que suele emplearse para agregar marcadores sociales y otro tipo de detalles personales.

Busquemos:

<p class='post-footer-line post-footer-line-3'>
   .......
</p>

o bien

<p class='post-footer-line post-footer-line-3'/>

en el primer caso, agregamos el script justo debajo de </p> en el segundo caso, en la línea inmediata ya que quiere decir que no hay contenido.

El código es el siguiente:
<b:if cond='data:blog.pageType == "item"'>
<div class='post-footer-line post-footer-line-4'>
<h2>Posts Relacionados</h2>
<div id='post-relacionados'/>
<script type='text/javascript'>
var inicioBlog = "<data:blog.homepageUrl/>";
var maxNumberOfPostsPerLabel = 4;
var maxNumberOfLabels = 10;
maxNumberOfPostsPerLabel = 100;
maxNumberOfLabels = 3;
function listarEntradas(json) {
var ul = document.createElement('ul');
var maxPosts = (json.feed.entry.length &lt;= maxNumberOfPostsPerLabel) ?
json.feed.entry.length : maxNumberOfPostsPerLabel;
for (var i = 0; i &lt; maxPosts; i++) {
var entry = json.feed.entry[i];
var alturl;
for (var k = 0; k &lt; entry.link.length; k++) {
if (entry.link[k].rel == 'alternate') {
alturl = entry.link[k].href;
break;
}
}
var li = document.createElement('li');
var a = document.createElement('a');
a.href = alturl;
if(a.href!=location.href) {
var txt = document.createTextNode(entry.title.$t);
a.appendChild(txt);
li.appendChild(a);
ul.appendChild(li);
}
}
for (var l = 0; l &lt; json.feed.link.length; l++) {
if (json.feed.link[l].rel == 'alternate') {
var raw = json.feed.link[l].href;
var label = raw.substr(inicioBlog.length+13);
var k;
for (k=0; k&lt;20; k++) label = label.replace("%20", " ");
var txt = document.createTextNode(label);
var h = document.createElement('b');
h.appendChild(txt);
var div1 = document.createElement('div');
div1.appendChild(h);
div1.appendChild(ul);
document.getElementById('post-relacionados').appendChild(div1);
}
}
}
function buscarEntradas(query, label) {
var script = document.createElement('script');
script.setAttribute('src', query + 'feeds/posts/default/-/'
+ label +
'?alt=json-in-script&amp;callback=listarEntradas');
script.setAttribute('type', 'text/javascript');
document.documentElement.firstChild.appendChild(script);
}
var labelArray = new Array();
var numLabel = 0;
<b:loop values='data:posts' var='post'>
<b:loop values='data:post.labels' var='label'>
textLabel = "<data:label.name/>";
var test = 0;
for (var i = 0; i &lt; labelArray.length; i++)
if (labelArray[i] == textLabel) test = 1;
if (test == 0) {
labelArray.push(textLabel);
var maxLabels = (labelArray.length &lt; = maxNumberOfLabels) ?
labelArray.length : maxNumberOfLabels;
if (numLabel &lt; maxLabels) {
buscarEntradas(inicioBlog, textLabel);
numLabel++;
}
}
</b:loop>
</b:loop>
</script>
</div>
</b:if>
Al igual que en el primer caso, podemos personalizar este bloque para adaptarlo gráficamente a la plantilla.

15 comentarios:

Neo

Hola!!!

Quiero probar este truco en mi plantilla pero me da un error:

No se ha podido analizar su plantilla, porque no está bien formada. Asegúrese de que todos los elementos XML se han cerrado correctamente.

Lo que hago es poner el código debajo de:

p class='post-footer-line post-footer-line-3'/

La segunda forma de hacerlo. Y me sale despues el mensaje de error cuando guardo la plantilla.

¿Dónde está el error?

Gracias.

JMiur

Gracias por el aviso Neo, había un error de transcripción y ya está solucionado. Disculpa el problema.

En general, esto es causado porque los scripts poseen el signo < (menor) par comparar cosas y eso es malinterpretado por Blogger.

Hay que reemplazarlos por &lt;. Ya lo he hecho y lo he probado pegándolo en otra plantilla sin que diera errores.

Don Atealgo

Una pregunta, cómo deduce que los post están relacionados? Por las palabras del título?

Neo

Bueno, ya lo agregue a mi Blog y no da error. Lo que pasa es que no veo nada de post relacionados, me explico:

1º- Si estoy en la página principal de mi blog no se ve nada de Post Relacionados en la entrada. Hay que pinchar en el titulo de la entrada para ver al pie Post Relacionados.

2º- Si lo hago de la segunda forma, si veo el título al pie de la entrada que pone Posts Relacionados, pero no hay nada más.

¿No me debería aparecer ahí, los post relacionados con el contenido en cuestión de la entrada? A mí no me aparece nada de nada.

Si tienes tiempo te metes en mi blog y le hechas un vistazo:

http://neocinetv.blogspot.com/

Gracias.

Petitabruixa

A raíz de lo que le ha ocurrido a Gem@,te he descubierto y voy a linkarte porque me parece muy interesante este blog.

Por otra parte, me encanta tu biografía !!!

Muchos besos y Luz !!!

Lili;)

Fede

Uf! Solo pasaba para agradecerte los email de ayer, no pongo mi sitio, porque no acostumbro a dejar comentarios...un tema que debo resolver. Mi anonimato es exesivo.
Dos cosas:
1-Me quede mudo con la entrevista realizada en Café de por Medio, gracias por haberlla compartido y por responder mis email ;)
2-No puedo creer que solo entraba a escribir agradecimientos y comentarios sobre la entrevista...Y caí justo aquí. Este post es un 10. He hecho lo mismo varias veces, de manera muy desprolija y no tenía ningún sentido comentarselo a la blogosfera. Creo que voy a cambiar mis codigos y luego mandar a los lectores a donde corresponde.
Si bien tu edad no coincide con la de mi padre, ya que él es bastante mayor, por momentos me has hecho leer sus palabras.
Sigá jugando, del otro lado hay alguien haciendo lo mismo.
Ah! sobre el link que me enviaste ayer para poner el menú desplegable, lamento decirte que mis conocimientos no me han dejado avanzar, sobre todo porque no explican las cosas como aquí. Ya lo resolvere, pero por el momento todos los sitios que veo que tienen el codigo que corresponde, lo ponen en JavaScript y oculto.
Me voy a jugar y quizás a trabajr jugando.

Saludos.

Fede.

JMiur

Don Atealgo:
La relación está basada exclusivamente en las etiquetas que coloquemos en los posts. Para decirlo de otro modo, estos hacks muestran una lista de posts con las mismas etiquetas.

Petitabruixa:
Bienvenida y gracias por el comentario :)

Neo:
El hack sólo funciona en las páginas individuales, eso es normal. Hasta donde lego a ver en tu blog, el script está funcionando. Una posibilidad es que no tengas habilitados los feeds del blog CONFIGURACION / FEEDS (no debe estar en none). Cualquier cosa, envíame un mail y vemos de qué se trata. Igualmente, hoy publicaré uno más que es el que ya está funcionando en este blog y que, a mi gusto, es el más flexible.

Fede:
Gracias por el esfuerzo de "comentar" :D

Bole

Hola he intentado poner este scrpit, parece que lo tengo todo bien y el feed esta habilitado y aunque acabo de empezar el blog ya tengo al menos 2 post por etiqueta.
¿podrias mirar porque falla? jmiur
http://elmundodebole.blogspot.com/

Por otro lado ciertamente es desesperante comentar en Blooger, aunque tu lo has solucionado bastante con el popup.
Conocí el blog ayer y estoy alucinado de la cantidad de info que dipones para el personal y eso que no he salio todavia de la categoria Blooger.
Buen trabajo, sino te importa te mandaré un email sino consigo solucionarlo.
Un saludo

JMiur

Lo estoy viendo. Así a simple vista, todo parece estar bien, el script toma los datos correctamente pero no parece buscarlos o escribirlos.

Habría que ver la plantilla para intentar descubrir el fallo. Si quieres mandarme un mail trataré de buscar el problema.

Anónimo

Gracias pero en ninguna de mis plantillas encuentros p class='post-footer-line post-footer-line-3' ni 1 ni 2 , expandi artilugios ,use ctrl f , probe en diferentes blogs y no encuentro el motivo pk yo no tengo esos codigos. te agradeceria me dieras una ayudita.saludos

JMiur

Necesitaría ver tu sitio online, sino, es imposible.

Angel, el aprendiz

Hola Jmiur

A mi tb me pasa lo mismo: muestra el "post relacionados" pero no muestra ningun post.

¿Puede ser que los feeds estén direccionados a feedburner?

mi blog de pruebas: http://almacigaxxi.blogspot.com/

JMiur

Angel, lo que veo online parecería ser correcto así que imagino que debe haber algún pequeño error que no logro detectar así.

Si quieres, puedes enviarme la plantilla por mail y reviso el código real.

No es un problema de Feedburner, eso es seguro.

Angel, el aprendiz

Muchas Gracias, JMiur

Con el script corregido si me ha funcionado.
Serían cosas de las comillas o los corchetes, o algo así.

YA funciona todo. Muchas gracias de nuevo

JMiur

Me alegro que se haya resuelto, Angel.

¿Quiere dejar un comentario?

Utilice el formulario adjunto para comunicarse.

Agregar un comentario al viejo estilo ...