Похожие сообщения в блоге призрака — за исключением текущего сообщения

#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);
  });
}