JMiur [E]

En un comentario reciente, QuéOlorTiene propone una alternativa a lo explicado oportunamente en una serie de artículos donde se mostraba cómo implementar un hack para que en Blogger pueda mostrarse una lista de Posts relacionados [1, 2, 3]

Lo he estado probando y, como me parece un aporte no solo generoso sino muy útil, aquí va la explicación.

La modificación que propone se basa en que, como el script sólo lee una cantidad reducida de feeds y siempre los más recientes, los resultados obtenidos son los mismos. Por un lado, esto lo soluciona aumentando el valor de max-result a 50 para que se busquen posts más antiguos.
<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=50"'
type='text/javascript'/>
</b:if>
Esto, deberá ser evaluado en cada caso porque influye en la velocidad de carga de las páginas. El valor que propone es un valor razonablemente alto. Personalmente, tuve que reducirlo pero, cada uno deberá irlo verificando en su propio blog. Parece lógico hacerle caso y comenzar por 50 a ver qué ocurre.

La segunda parte de su idea es válida para cualquier caso y es, probablemente, la parte más interesante.

Para evitar las repeticiones, es decir, que cada vez que se entre en una página se muestren siempre los mismo resultados, le agrega al script una nueva función que, simplemente, muestra resultados de manera aleatoria; en lugar de mostrar los primeros que encuentra, elige dentro de la lista así que, cada vez que recargamos, habrá diferentes resultados. Es una buena manera de mostrar artículos viejos y darles nueva vida.

La función a agregar al script es la siguiente:
function mixRelatedLabels() {
for(var i = 0; i < relatedTitles.length; i++){
var indice = Math.floor((relatedTitles.length - 1) * Math.random());
var tempTitle = relatedTitles[i];
var tempUrls = relatedUrls[i];

relatedTitles[i] = relatedTitles[indice];
relatedUrls[i] = relatedUrls[indice];

relatedTitles[indice] = tempTitle;
relatedUrls[indice] = tempUrls;
}
}
En caso de dudas, puede descargarse un TXT con el script completo

Luego, en la parte de la plantilla donde se llamaba a las funciones, donde decía:
<script type='text/javascript'>
removeRelatedDuplicates();
printRelatedLabels();
</script>
Agregamos la nueva función:
<script type='text/javascript'>
removeRelatedDuplicates();
mixRelatedLabels();
printRelatedLabels();
</script>
Ya estoy usando los cambios y la diferencia es notable.

Muchísimas gracias por el aporte risa

41 comentarios:

Carlos Soler  

JMiur he hecho las modificaciones tal como explicas y va de maravilla, lo he probado y no se repiten, los posts relacionados cambian aleatoriamente. La paginas con 50 se me cargan rápido. Si no tienes experiencia con las plantillas, y si la tienes también, recomiendo hacer copia, por si acaso. ¡Gracias Maestro!

Responder
QuéOlorTiene  

Me alegro JMiur que el script haya sido de utilidad... es un aporte mínimo como agradecimiento por las ideas que he encontrado en tu página e incorporado en mi blog.

Comencé probando con 50 posts y me quedé en esa cifra por un asunto de funcionalidad, ya que en mi blog escribo sobre perfumes y cada etiqueta es una característica o marca, así que a la hora de sugerir un perfume tengo que hacer un barrido bastante amplio para no quedarme solo con las últimas publicaciones. Es algo lento pero vale la pena porque en algunos casos tengo perfumes con 7 etiquetas y una etiqueta puede tener más de 100 perfumes con características similares.

Saludos y gracias!!!

Responder
BoatoLuxo  

si, de verdad queda bueno...

saludos

Responder
JMiur  

La verdad funciona muy bien y a me convencieron para elevar el número a 50 :D

Es cierto que los resultados cambian drásticamente.

Vuelvo a reiterar las gracias por el aporte: EXCELENTE, de verdad :)

Responder
Eulalia  

Es sencillamente genial. Simplemente con actualizar la página cambian las entradas mostradas, aunque a veces solo muestra dos (lo tengo en 3) ¿es normal?. Anoche copié el código del blog de Rosa y funcionó a la primera y acabo de actualizarlo con este parche. Lo que me ha dado la impresión es que tarda un poquito más en cargar, pero muy poco.
Saludos y gracias.

Responder
Eulalia  

Ya he visto porqué a veces solo enseña dos. Depende de lo largo que sea el título. Si ocupa dos líneas solo muestra dos entradas relacionadas. ¡Ah! la orden esa de <20 no parece funcionarme, pues enseña entradas con títulos larguísimos. No es que me importe, al contrario, pues a veces escribo títulos dignos del Quijote, es tan solo para que lo sepas.Saludos.

Responder
JMiur  

Eulalia, el largo de los titulos que se filtran está ene esta línea:

while (i < relatedTitles.length && i < 50) {

50 caracteres. Si quieres, cámbialo por un valor superior, eso depende mucho de como lo estés mostrando y de cómo quedará.

Respecto al tiempo, sí, debe aumentar con respecto al original pero no parece algo sustantivo. De cualquier manera, si resulta "molesto", se resuelve reduciendo la cantidad de posts analizados:

&max-results=50

Responder
Calithos  

JMiur parabems!! como dicen en Brasil ! , la verdad siempre creo que el exito de una persona se media por cuanto gente esta ayuda .La verdad que eres superexitoso amigo ! , te felicito y gracias por todo! , mi blog es la enviadia de mi categoria gracias a Dios y a ti amigo .

Responder
JMiur  

Gracias Calithos, muy amable de tu parte :)

Responder
Protegon  

Me he encontrado este post de pura casualidad y me ha gustado eso de el efecto aleatorio. Pero yo sigo queriendo que en cada página salgan más de 20 resultados. Pero no me refiero especificamente a entradas relacionadas sino a que cada vez que yo dé click en una label, esta me lleve a una página con más de 60 resultados.

Te agradezco cualquier ayuda JMiur, salu2

Responder
Braulio Aquino  

GRACIAS!!!!!!!!!

Responder
Javi  

Gracias por toda esta información, justo lo que hace dias estaba buscando, me quito el sombrero señores, todo listo y funcionando perfectamente, muchas gracias.

Responder
Francisco Javier Díaz  

En qué parte del código debo insertar la función aleatoria?

Responder
JMiur  

Depende del modelo que quieras usar, el que yo utilizo es el que se muestra en esta entrada.

Responder
Manfenix  

Hola JMiur, seguí puntillosamente todos los pasos para implementar el hack que permite mostrar los post relacionados, y lo he conseguido. Tenía mis dudas de logralo en un solo intento, por que soy nuevo en esto de modificar plantillas. Gracias por el aporte!!!.

Responder
JMiur  

Me alegro que funcionara, Manfenix :D

Responder
Manfenix  

Una consulta al margen de este post JMiur, hace poco cambié el color de fondo de los post y de las sidebar. Esto hizo que el texto que acompaña al formulario de comentarios no se muy visible por el fondo del body. Intenté colocar background en cada #comment, a modo de prueba y error para logra dar un color de fondo a esa parte pero no lo logré. Se puede hacer esto?.

Responder
JMiur  

Si, puede hacerse eso o cambiar el color de los textos en determinado lugar. Pero debería ver exactamente dónde quieres hacer el cambio o que colores usas para guiarte.

Responder
k_nelita  

Bueno como verás estoy un poquito pesada estos días :D Me decidí a hacer esto que tenía pendiente desde hace casi un año, creo, hice todo, desde el paso uno hasta estas últimas modificaciones.
Unas horitas me llevó el proceso :) pero no me funciona, no sale nada :S que raro en mi no? :o
Está todo puesto en la plantilla, después de varios intentos se bancó que le pusiera todo esto, y al decir todo me refiero al paso 1 y a este post, y obviamente a los estilos, que no se si no será por allí el problema, le puse los que diste de ejemplo, no se como modificarlos, pero no se ve nada en el blog, los puse sin imagen por si las moscas ;)
Decime si podés verlo en el código fuente o te mando mail si?
Ahh el blog es: FolkTango que tiene una Mínima y pensé que sería mas fácil :D :D que graciosa!!

Responder
JMiur  

¿No te falta poner esto?

<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=50"' type='text/javascript'/>
</b:if>

Por lo menos, eso es lo que no veo en el código fuente.

Responder
k_nelita  

Esto iba debajo del h3 no? Ya lo puse pero igual no funciona, no sale nada, ya te mandé mail explicandote todo.
Sinó como te digo en el mail y a riesgo de "parecer" pesada jaja te mando la plantilla a ver que cosa hice mal :o

Responder
JMiur  

Ahi fue un mail :D

Responder
ínFimo  

Aparentemente todo me salió muy bien, sin embargo tengo una prengunta...

¿Hay alguna forma de ponerle título, es decir, algo como "también puedes visitar..."?

Responder
JMiur  

No hay roblema, simplemente coloca ese text o título en la plantilla, arriba del script.

Responder
Manfenix  

Hola JMiur, desde el momento que aplique el script para post relacionados funcionó perfectamente pero desde ayer, noté que los mismos no se ven ahora. Qué puede estar pasando?.
Mi blog, Avibert.
Gracias por tu ayuda.

Responder
JMiur  

No conozco el script que utilizas así que no podría decirte por qué ha dejado de funcionar.

Responder
Manfenix  

Es este script. Qué puede haber pasado?

Responder
JMiur  

Yo no veo que se esté llamando a las funciones del script. Fíjate si no llo has eliminado:

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

Responder
Manfenix  

Tenías razón, la llamada a las funciones del script desapareció de la plantilla. Volví a colocarla debajo del elemento blog. Pero sigue el problema, no se muestran los posts relacionados... :S

Responder
JMiur  

Allí están. Los tienes debajo de la barra de navegación en un elemento HTML cuyo ID HTML36.

Responder
Manfenix  

Ahora los veo. Cómo hago para que se visualicen inmediatamente después del post, antes del formulario de comentario?. Antes de surgir este problema se mostraba en ese orden.

Responder
JMiur  

Ese elemento HTML ha sido agregado maniualmente por alguna razón y antes, es probable que estuviera en el footer de las entradas donde ahora se lee el código de otro script diferente que no sé que hace.

Las funciones de este script se colocan en el lugar exacto donde uno quiere que sean mostrados así que debes moverlos de uno a otro lado.

Responder
Manfenix  

Me aconsejas que borre todo lo referido con el script para post relacionados e inicie la aplicación nuevamente?

Responder
JMiur  

No. Simplmenet edigo que está en un lado y que si quieres que se vea en otro debes moverlo de lugar. Lo otro, eso que esta debajo de cada post, no sé que es.

Responder
Manfenix  

Una pregunta JMiur, eliminando lo que aparentement está demás,
* b:widget id='HTML36' locked='false' title='posts relacionados' type='HTML'*
que se encuentra dentro del *div id='main-wrapper'*,
al intentar guardar el archivo html, me sale el siguiente cartel de advertencia:
" Están a punto de suprimirse los artilugios
Por favor, confirma que los siguientes artilugios deben borrarse. Se borrará toda la información de configuración de los artilugios.
* HTML36 "
Si acepto, elimino el script inútil que aparece actualmente debajo de cada post?

Responder
JMiur  

No. Si eliminas eso, eliminas el elemento que es el que ahora tiene los posts relacionados y funciona pero esta debajo de las entradas y no dentro de ellas como quieres hacer.

Lo que debes hacer es expandir la plantilla y buscar ese otro script que está dentro de los posts, en alguna parte del footer de los posts. Por algún motivo lo has agregado pero, desconozco el motivo.

Responder
Manfenix  

Eliminé el script que estaba demás.
Luego, a pesar de intentar hacer funcionar el script útil usando el elemento html36, no lo logré.
Así que opté por eliminarlo.
Coloqué la llamada a las funciones a continación de * div class='post-footer-line post-footer-line-3' *.
Guardé la plantilla y probé si funcionaba.
Esta vez si aparecieron los 3 posts relacionados debajo de "Publicado y Etiquetas", pero no así el título "Posts Relacionados".
Entonces escribí en la llamada a las funciones ese título quedando así:
*div class='post-footer-line post-footer-line-4'*
*b:if cond='data:blog.pageType == "item"'*
*h2*Posts Relacionados*/h2*
*script type='text/javascript'*
* removeRelatedDuplicates(); *
* printRelatedLabels(); *
* /script *
*/b:if*
*/div*
Guardé y probé. Ahora si apareció el título, pero solo dos posts relacionados.
Como quería que aparezcan 3 posts relacionados modifique el script quedando así:
cuantosPosts++
* if (cuantosPosts == 4) { *
* break; *
Describí con cierto detalle lo que hice a los fines de que le sirva a alguien, para resolver un problema similar.
Soy conciente que quizas no es prolija la solución, pero el intento resultó.
JMiur, perdón por el "testamento"; espero alguna indicación para mejorar la solución, que seguramente la habrá... :D

Responder
JMiur  

Cualquier cosa que funciona, sirve. Esa es la manera de agregarlo, tal como dice el post original.

Responder
Manfenix  

Gracias JMiur, ;)

Responder
Oscar  

Hola JMiur, ya implemente el hack que publicaste en esta página: http://vagabundia.blogspot.com/2007/10/blogger-posts-relacionados-3.html, pero no me gusto por qué solo se mostraban las entradas relacionadas más recientes. Esta solución me parece genial, pero creo que es para un elemento HTML que se agrega en el sidebar, y además creo que comentas que se deben agregar 50 resultados. En resumen me gustaría poner los artículos relacionados en el pie del post, que fueran pocos enlaces y además se mostrarán aleatoriamente, como el que tienes en tú blog en el pie del post, donde están los botones para compartir. No se si ya habrás hecho algún post donde dijiste como ponerlo, ya que los que he revisado parece que no lo dicen. Espero que me puedas responder y muchas gracias de antemano por tu ayuda.

Responder
JMiur  

Es exactamente la misma con el agregado de una función que mezcla los resultados para que sean más surtidos. Es la que utilizo así que no requiere que esté en un elemento HTML, puede ponerse directamente en la plantilla.

La cantidad de post a buscar dependerá del valor que se coloque en max-result; la cantidad 50 es razonable pero, puede usarse cualquier otro, teniendo en cuenta que, un valor muy alto, hará que la carga del sitio se lentifique de manera importante.

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