#ghost-blog #ghost
#ghost-blog #Призрак
Вопрос:
Я использую 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 }} Я получаю значение, но это идентификатор тегов, так что это неверно.
Мне удалось получить доступ к моему идентификатору записи внутри области тега таким образом {{../ id}}, но я не могу использовать его в фильтре таким образом, он тоже не работает.
Любая идея о том, как ее решить, будет оценена.
Ответ №1:
Я думаю, что это {{id}}
сработает. Просто попробовал это, и это работает, удалив идентификатор текущего сообщения, но оставив остальные:
{{#get "posts" limit="all" filter="id:-{{id}}"}}
{{#foreach posts}}
{{id}}
{{/foreach}}
{{/get}}
Однако это должно быть в вашей {{#post}}
области.
Комментарии:
1. Как вы сказали, если я нахожусь в области
{{#post}}
видимости, это работает, но я на самом деле в{{#tag}}
области видимости, потому что мне также нужно фильтровать по «тегу».
Ответ №2:
Я добился того, что мне было нужно, используя jQuery.
Сначала я получаю текущий идентификатор сообщения, вызывающий мою функцию, извлекая теги для этого сообщения.
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);
});
}
Затем я получаю все сообщения, которые имеют один и тот же тег и имеют идентификатор, отличный от моего текущего идентификатора сообщения.
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);
});
}