如何将碎片展示成另一件?

时间:2017-03-09 08:13:43

标签: apostrophe-cms

我有两种类型的作品,一种是作者,第二种是文章。我可以显示文章列表(在indexAjax.html中使用index.htmlarticles-pages),因为它在Apostrophe的Demo和作者列表中实现(通过使用{ {1}}和indexAjax.html中的index.html

我的问题是如何使用authors-pages/views show.html文件显示某位指定作者撰写的文章? 因此,当用户点击某位作者时,他/她应该能够看到指定作者撰写的文章列表。

authors-pages/views文件如下

lib/modules/articles/index.js

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

我是P' unk Avenue的撇号建筑师。

您自己的解决方案中的代码有效地重新实现了我们已有的功能:反向连接。

你已经有了#34;前进"加入(joinByOne)。因此,请使用joinByOneReverse从"另一方提供这些项目。"

作者的架构中,您可以这样写:

addFields: [
  {
    name: '_articles',
    type: 'joinByOneReverse',
    withType: 'articles',
    label: 'Articles',
    idField: 'author',
    filters: {
      projection: {
        title: 1,
        slug: 1,
        type: 1,
        tags: 1
      }
    }
  }
]

这使得每个作者都可以使用._articles数组属性。

重要的是要注意idField不会发生变化。我们故意使用相同的信息,以便获得相同的内容。

如果您愿意,还可以在该字段上设置ifOnlyOne: true,以避免为索引页和其他加载多个作者的上下文提取该文件。

查看guide to schemas了解详情。

答案 1 :(得分:2)

我找到了自己问题的答案(在看到已发布的替代答案之前)。希望它对其他人有用。

因此有两件articlesauthors

<强> LIB /模块/作者-页/ index.js

module.exports = {
    extend: 'apostrophe-pieces-pages',
    articlesPerPage: 3,
    construct: function (self, options) {
        var beforeShow = self.beforeShow;
        self.beforeShow = function (req, callback) {
            var limit = self.options.articlesPerPage;
            var skip = req.query.page || 1;
            skip = (parseInt(skip) - 1) * limit;
            if (!req.data || !req.data.piece) {
                return beforeShow(req, callback);
            }
            var cursor = self.apos.docs.getManager('articles').find(req, {
                author: req.data.piece._id
            });
            cursor
                .skip(skip)
                .limit(limit)
                .sort({ createdAt: -1 })
                .toArray(function (err, articles) {
                    req.data._articles = articles || [];
                    req.data.currentPage = Math.ceil((skip + 1) / limit);
                    cursor.toCount(function(err, count){
                        if(err)
                            count = 1;
                        req.data.totalPages = Math.ceil(count / limit);
                        beforeShow(req, callback);
                    })

                })
        }
    }
}

<强> LIB /模块/作者-页/图/ show.html

{% extends data.outerLayout %} 
{% block title %}
    {{ data.piece.title }}
{% endblock %} 
{% block main %}
    {% for article in data._articles %}
        <p>{{article.title}}</p>    
    {% endfor %}
    {% import 'apostrophe-pager:macros.html' as pager with context %}
    {{ pager.render({ page: data.currentPage, total: data.totalPages }, data.url) }}
{% endblock %}