Poner Entradas Relacionadas- III – LA SOLUCION

  • junio 5, 2010

Es te codigo cr??o que es el definitivo, para casi todas las plantillas
O eso espero, gracias por vuestra paciencia,,,,
[1] Nos situaremos en la vista HTML de la plantilla, expandiremos los artilugios y buscaremos la etiqueta ]]></b:skin>. Justo debajo, agregaremos el script. Hemos de colocarlo exactamente ah?? ya que para que funcione correctamente, debe estar antes que cualquier otro script que hayamos colocado:

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



En el c??digo del script, donde dice relatedTitles.length && i < 20), se escogen los posts que se mostrar??n seg??n los caracteres que formen su t??tulo. En el ejemplo no se mostraran si contienen m??s de 20 caracteres, pero podemos cambiar ese valor por el que queramos.

[2] Buscamos ahora esta parte del c??digo y a??adimos lo que he marcado en negrita:

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



Donde dice max-results=10 es donde podemos controlar la cantidad m??xima de posts que se mostrar??n, podemos cambiar «10» por el valor que nos interese, aunque seg??n nos recomienda JMiur«es conveniente poner un valor bajo para evitar que la p??gina tarde mucho en cargarse».

[3] Una vez hecho esto, localizamos esta l??nea de c??digo:

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



Normalmente esta parte del post-footer no tiene uso, as?? que colocaremos nuestro nuevo c??digo justo a continuaci??n:

<b:if cond=’data:blog.pageType == &quot;item&quot;’>
<div class=’post-footer-line post-footer-line-4′ id=’relpost’>
<h4>Entradas relacionadas:</h4>
<b:if cond=’data:blog.pageType == &quot;item&quot;’>
<script type=’text/javascript’>
removeRelatedDuplicates();
printRelatedLabels();
</script>
</b:if>
</div></b:if>



Si hay varias etiquetas, es muy probable que la lista mostrada pueda contener muchos posts, por lo que JMiur ha encontrado la soluci??n modificando el script para limitar el n??mero absoluto de posts relacionados. Yo he incluido la modificaci??n en el script para que solo muestre tres entradas relacionadas, si queremos aumentar la cantidad de posts a mostrar, cambiamos el valor en esta l??nea del script:

if (cuantosPosts == 3) {



[4] Como no se ve en vista previa, mejor nos cercioramos de que antes hemos guardado una copia de la plantilla y, si es as??, guardamos cambios.

No Comments Found