2016-10-01 8 views
2

Ich benutze Ghost als Blogging-Plattform. Wenn ein Benutzer einen Beitrag liest, möchte ich einige verwandte Beiträge anzeigen.Ähnliche Beiträge In Ghost Blog - ohne aktuellen Beitrag

{{#foreach tags limit="1"}} 
    {{#get "posts" filter="tags:{{slug}}" limit="6" include="author,tags" as |article|}} 
     {{#foreach article}} 
      .... 
     {{/foreach}} 
    {{/get}} 
{{/foreach}} 

ich es geschafft verwandten Beiträge zu bekommen, aber ich habe Probleme den aktuellen Beitrag aus den Ergebnissen zu löschen.

Nach der Geister Dokumentation ich sollte diese zusätzlich zu dem Filter verwenden können:

"+id:-{{post.id}}" 

So:

{{#get "posts" filter="tags:{{slug}}+id:-{{post.id}}" limit="6" include="author,tags" as |article|}} 

Leider ist dies nicht funktioniert, {{post.id} } druckt nichts aus, egal in welchem ​​Bereich ich bin. Einfach {{id}} anstelle von {{post.id}} benutze ich einen Wert, aber es ist die ID der Tags, also ist das nicht korrekt.

Ich schaffte es, auf diese Weise innerhalb des Tagbereichs auf meine Post-ID zuzugreifen {{../id}}, aber ich kann sie nicht auf diese Weise im Filter verwenden, es funktioniert auch nicht.

Irgendeine Idee auf, wie man es löst, würde geschätzt werden.

Antwort

1

Ich habe erreicht, was ich brauchte mit jQuery.

Zuerst bekomme ich die aktuelle Post-ID, die meine Funktion aufruft und die Tags für diesen Post holt.

function getCurrentPosts(id) { 
$.get(ghost.url.api('posts', {filter: 'id:' + id, include: 'tags'})).done(function (data){ 
     var tags = data.posts[0].tags; 
     getRelatedPosts(id, tags) 

}).fail(function (err){ 
    console.log(err); 
    }); 
} 

Dann bekomme ich die Beiträge alle, die den gleichen Tag haben und haben unterschiedliche ID von meinem aktuellen Post-ID.

function getRelatedPosts(id, tags) { 
tags = tags.map(function(obj){ 
    return obj.slug ; 
}).join(', '); 

tags = '[' + tags + ']'; 

$.get(ghost.url.api('posts', {filter: 'id:-' + id + ' +tags:' + tags, include: "author, tags" })).done(function (data){ 
     var posts = data.posts; 
     console.log(posts.length) 
     if (posts.length > 0) { 
     showRelatedPosts(posts); 
     } 
     else{ 
     $('.related-section').hide(); 
     } 
}).fail(function (err){ 
    console.log(err); 
    }); 
} 
0

Ich denke, nur {{id}} würde funktionieren. Gerade versucht dies und es funktioniert durch die ID des aktuellen Beitrag zu entfernen, aber die anderen verlassen:

{{#get "posts" limit="all" filter="id:-{{id}}"}} 
    {{#foreach posts}} 
     {{id}} 
    {{/foreach}} 
{{/get}} 

Würde obwohl in Ihrem {{#post}} Umfang sein.

+0

Wie Sie gesagt haben, wenn ich im '{{#post}}' Bereich bin, funktioniert es, aber ich bin eigentlich in '{{#tag}}' Bereich, weil ich auch für die filtern muss "Etikett". – Norbert

Verwandte Themen