13 de junio de 2010

Entradas relacionadas

Otra de las posibilidades para que los visitantes estén más tiempo viendo tus entradas, es añadir al acabar cada una otras que tengan una cierta relación.  Parece ser que Vagabundia es el creador de esta idea, que lógicamente se ha extendido como la pólvora por los bloggeros.

Entraremos en Diseño, Edición de HTML y expandiremos plantillas de artilugios.  A continuación localizar la línea ]]></b:skin>, con Crtl-F, y antes de ningún script copiaremos justo debajo el código siguiente:

<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 cuantosPosts = 0;
var r = Math.floor((relatedTitles.length - 1) * Math.random());
var i = 0;
var dirURL = document.URL;
document.write('<ul>');
while (i < relatedTitles.length && i < 20) {
if (relatedUrls[r] != dirURL) {
document.write('<li><a href="' + relatedUrls[r] + '" title="Post relacionado: '
+ relatedTitles[r] + '">' + relatedTitles[r] + '</a></li>');
}
if (r < relatedTitles.length - 1) {
r++;
} else {
r = 0;
}
i++;
cuantosPosts++;
if (cuantosPosts == 3) {
break;
}
}
document.write('</ul>');
}
//]]>
</script>

Ahora buscaremos el siguiente párrafo y insertaremos el código de color rojo.

<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>

Solo nos quedara localizar el código del pie de entrada.  Suele ser así, pero depende si has instalado otros accesorios allí:

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

o

<div class='post-footer-line post-footer-line-3'>

</div>

Añadiremos a continuación el listado de las entradas relacionadas:

<div class='post-footer-line post-footer-line-4'>
<b:if cond='data:blog.pageType == "item"'>
<script type="text/javascript">
removeRelatedDuplicates();
printRelatedLabels();
</script>
</b:if>
</div>

Desde vista previa no se puede comprobar, porque saldrá únicamente al pie de una entrada individual, así que se debe guardar la plantilla y listo. No hay que olvidar que esto funcionará exclusivamente si usamos etiquetas en nuestras entradas.

Entrada anterior Entrada siguiente Página Principal
Related Posts Plugin for WordPress, Blogger...