我使用Ghost作为博客平台。当用户正在阅读帖子时,我想展示一些相关的帖子。
{{#foreach tags limit="1"}}
{{#get "posts" filter="tags:{{slug}}" limit="6" include="author,tags" as |article|}}
{{#foreach article}}
....
{{/foreach}}
{{/get}}
{{/foreach}}
我设法获得了相关帖子,但是我在从结果中删除当前帖子时遇到了问题。
根据Ghost文档,我应该可以在过滤器中使用此添加项:
"+id:-{{post.id}}"
像这样:
{{#get "posts" filter="tags:{{slug}}+id:-{{post.id}}" limit="6" include="author,tags" as |article|}}
不幸的是,这不起作用,{{post.id}}甚至不打印任何内容,无论我在哪个范围内。只需使用{{id}}代替{{post.id}}我&# 39;获得一个值,但它是标签ID,因此不正确。
我设法以这种方式{{../id}}在标记范围内访问我的帖子ID,但我不能以这种方式在过滤器中使用它,它也不起作用。
任何关于如何解决它的想法都将受到赞赏。
答案 0 :(得分:1)
我使用jQuery实现了我所需要的。
首先,我获取当前的帖子ID,调用我的函数,获取该帖子的标签。
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);
});
}
然后我收到所有帖子,这些帖子具有相同的标签,并且与我当前的帖子ID具有不同的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);
});
}
答案 1 :(得分:0)
我认为只有Column
才有效。刚试过这个,它的工作原理是删除当前帖子的id,但留下其他帖子:
{{id}}
但必须在{{#get "posts" limit="all" filter="id:-{{id}}"}}
{{#foreach posts}}
{{id}}
{{/foreach}}
{{/get}}
范围内。