quarta-feira, 13 de agosto de 2008

Como exibir posts relacionados no Blogger

Nível: avançado

Infelizmente o Blogger ainda não tem a opção de exibir os posts relacionados ao final do texto, para facilitar a vida do leitor e aumentar o tempo de permanência dele no blog.

Desde o dia 11 de agosto estou usando neste blog um script legal que faz isso com precisão baseado nos marcadores que os posts têm em comum.

Eu até encontrei algumas traduções desse recurso, mas assim como ocorreu com o formulário de comentários embutido no post, só funcionou no meu blog depois que eu fui à fonte e traduzi por minha conta.

Este script é um tanto quanto complicado, por isso peço que use um blog de teste para não fazer besteira. Para visualizar o resultado crie neste blog de testes pelo menos cinco posts fictícios usando a mesma tag/marcador/label.

  1. Clique em Layout, Editar HTML. Cole o seguinte código antes da tag </head>: Onde está escrito 5 você pode substituir pelo número de posts relacionados que você deseja mostrar.
    <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 < 5) {
    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>
  2. Salve. Clique em Expandir modelos de widgets. Procure o seguinte código:
    <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>
  3. Substitua pelo código abaixo: A parte em destaque é o que será realmente acrescentado.
    <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>
  4. Salve. Procure (ainda em modo expandido) o código que pode ser:
    <div class='post-footer-line post-footer-line-3' />

    ou
    <p class='post-footer-line post-footer-line-3' />
  5. Substitua por:
    <div class='post-footer-line post-footer-line-3'>
    <b:if cond='data:blog.pageType == &quot;item&quot;'>
    <b:if cond='data:blog.url != data:blog.homepageUrl'><h4>Leia também:</h4></b:if>
    <script type='text/javascript'>
    removeRelatedDuplicates();
    printRelatedLabels();
    </script>
    </b:if>
    </div>
    Se você não encontrar nenhum p ou div que use class='post-footer-line post-footer-line-3', crie-a logo abaixo da tag que fecha class='post-footer-line post-footer-line-2'. Onde está escrito Leia também você pode escrever o texto de sua preferência. Salve.

Tradução do tutorial do PurpleMoggy's Blog aproveitando idéias do tutorial do Blosque.com.

 

Reprodução não autorizada é fraude e dá multa. Lei 9.610 de 1998.


23 comentando:

LR disse...

Helen, não encontrei nenhum *class='post-footer-line post-footer-line-2*, nem nada parecido. O que faco?

Helen Fernanda disse...

LR, passa o endereço do seu blog para a gente ver o que ocorre. ;)

Eninha e Pedro Campos disse...

Muito legal seu blog. Um monte de coisa legal e útil. Parabéns!
Obrigado por visitar o nosso blog.
Pedro

DJ NEO disse...

Olá helena tudo bem? bom fiz corretamente e deu certo só que queria esse codigo nos posts na pagina inicial. Porque só aparece os posts relacionados quando é aberto 1 post separado entendeu?

www.blogaioh.blogspot.com

abraços para você!

aguardo respostas

Croche Croche! disse...

MUITO OBRIGADA
mandou bem pra caramba nesse tutorial

abraços

Adri Amorim

Helen Fernanda disse...

Adri, obrigada. Gostei muito dos seus blogs. Parabéns!

Agnaldo Gomes disse...

Estou com o mesmo problema do leitor LR.
Não há no meu template nada como: class='post-footer-line post-footer-line-2.
Segui todos os passos bem, mas o ultimo não deu por isso.

Helen Fernanda disse...

Agnaldo, eu olhei seu blog, acho que no seu o rodapé do post está assim:

<p class="postmetadata">

Então pode colocar nessa classe do post.

Agnaldo Gomes disse...

Cara Helen,
Infelizmente só aparece o nome LEIA TAMBÉM, mas sem os posts relacionados.
Talvez o meu template não de pra fazer isso.
Eu acho.

Helen Fernanda disse...

Agnaldo, eu olhei seu código e vi que você configurou para mostrar 20 posts relacionados. Você tentou com menos primeiro? Tenta com 5 primeiro, depois vai aumentando para ver o máximo que dá certo.

Agnaldo Gomes disse...

Olá Helen,
Desculpe por tá dando trabalho.
Diminui para 5 e não aparece.Se puder olha no meu blog. Qdo clico no titulo de um artgio, aparece só o nome:Posts Relacionado, mas as postagens não.

Đαdinнo disse...

OI Helen,
Eu fiz tudo direitinho, só que não apareceu nada no meu blog.
Porque será?

Helen Fernanda disse...

Entrei no seu blog e não vi o código lá. o_O

Darcy Mendes disse...

Oi Helen

Valeu pela dia.

Funcionou direitinho. É só prestar atenção na última etapa quanto às tags p ou div.

Abraços

zimmer disse...

Fiz tudo como esta dizendo ali, mas porém quando cliquei para ver uma postagem somente estava o texto " Leia também " e as postagens relacionadas nada. Se você poder me ajudar entre no meu blog ou me envie um email.
Obrigado!!!

rubiorc disse...

Oi Helen...
Pois bem, não tenho o trecho
(b:if cond='data:post.labels')
Já procurei um que seja parecido mas não encontrei, se puder me ajudar.
Meu blog é http://rubiorc.blogspot.com/

Obs.: Os parênteses foram trocados só para ser aceito.

Obrigado.
Rubio.

Helen Fernanda disse...

Rubio, você tem que configurar seu blog para exibir os marcadores no post. Só vai aparecer quando você configurar assim.

rubiorc disse...

Oi Helen, eu aqui de novo.
De origem, o template do meu blog por ser convertido de Wordpress para Blogger não tinha os marcadores mesmo. Então peguei de um template padrão e coloquei lá, funcionou belezinha.
Agora esses posts relacionados não está dando certo. Dê uma passadinha por lá e veja o que está acontecendo por favor, se puder é claro.
Pode verificar também no Blog de Teste - http://blog-de-teste-1.blogspot.com/.

Abraço, aguardo resposta.

Anderson Guterres disse...

Bah eu fiz tudo como tu explico. O problema é que aparece só o "leia também:", porque os posts não aparecem? Obrigado.

fabiovelasco.com disse...

Helen,

Magnífico, adicionei os códigos conforme suas orientações e..... Funcionou!!

Obrigado,
Fabio Velasco

Filipe disse...

Único tutorial que pego no meu blog!

Postar um comentário

Atenção!

Se não quiser usar login, use a opção Nome/URL, sendo que a URL é opcional. Comentários anônimos têm mais chances de serem descartados na moderação.

Após enviar você não verá seu comentário publicado na página imediatamente, portanto não precisa comentar duas vezes a mesma coisa.

Seja organizado: use a tecla Enter para separar os parágrafos e use tags para enriquecer o texto: <b> (negrito), <i> (itálico), <a> (link).

Por falar em links, eles só são aceitos no corpo da mensagem se tiverem TOTAL relação com o tema do post. Se quiser apenas deixar o link do seu blog, comente usando a opção Nome/URL.

Para ser notificado via Twitter quando eu responder ao comentário, basta assinar com seu @nomedeusuario.

Não respondo comentários por e-mail, portanto só deixe seu endereço no corpo da mensagem se quiser ser vítima de spam. Para mensagens privadas, use o formulário de contato.

Sugestões de posts só são estudadas quando enviadas via formulário.

Obrigada!

TwitterCounter Reader
Adicionar aos Favoritos BlogBlogs MeAdiciona.com
Site Page Rank Hihera.com

Andam comentando…

Arquivo vivo

Top 10

Fazendo uma média

 
↑ topo ↑