了解游标,过滤器和联接中的撇号

时间:2018-09-06 08:24:26

标签: apostrophe-cms

尝试使用小部件的html中的一些数据,但我已经陷入困境,只是尝试随机的事情。

如果我说实话,关于游标的文档不够清楚,我无法完全理解,并且在源代码中找不到与我的案例类似的内容。

因此,我们有一些书以及它们所属的一系列书。书籍具有封面图像(和本地化的封面图像,但暂时不介绍)。创建此设置似乎很简单。

//books/index.js
{
  name: '_coverImage',
  label: 'Cover Image',
  type: 'joinByOne',
  withType: 'apostrophe-image',
  idField: 'coverImageId'
},
{
  name: '_bookSeriesGroup',
  label: 'Book Series',
  type: 'joinByOne',
  withType: 'book-series-group',
  idField: 'bookSeriesGroupId',
  withJoins: [
    '_booksGroups._coverImage'
  ],
  filters: {
    projection: {
      title: 1,
      slug: 1,
      _booksGroups: 1,
      _coverImage: 1
    }
  }
} ...

使用该代码,我可以遍历books-pages / views / show.html中的book-series-group:

data.piece._bookSeriesGroup

但是,与Rails之类的框架不同,除非我为book-series-group组的书创建另一个joinByArray,否则我无法遍历该关系以获取同一组中的所有书。

//book-series-groups/index.js
{
  name: '_seriesGroupBooks',
  type: 'joinByOneReverse',
  withType: 'book',
  reverseOf: '_bookSeriesGroup'
},
{
  name: '_booksGroups',
  label: 'Books',
  type: 'joinByArray',
  withType: 'book',
  withJoins: ['_coverImage'],
  filters: {
    projection: {
      title: 1,
      blurb: 1,
      position: 1,
      _coverImageId: 1,
      _coverImage: 1,
      _url: 1
    }
  }
}

然后让我关注show.html

中的关系
{% for seriesBook in data.piece._bookSeriesGroup._booksGroups %}
  {% set image = apos.images.first(seriesBook._coverImage) %}
  <img class="cover" src="{{ apos.attachments.url(image, {size: 'one-third'}) }}" alt="{{ seriesBook.title }}">
{% endfor %}

好的,但这有两个问题。

  1. 将图书按照其模式分配给各个组,然后您必须反过来分配它们。
  2. 更大的问题是,当我包含withJoins'_booksGroups._coverImage'时,它会加载正确的图像,而不是每次循环都加载相同的图像(太好了!),但这反过来会破坏{%set image =当前data.piece或data.pieces循环中的‘images.first(piece._coverImage)%}。

在我看来,执行此操作的最佳方法只是在html中通过bookSeriesGroupId查找/过滤所有书籍,但我无法弄清楚如何对整个集合进行处理,而不仅仅是已经过滤的使用apos.utils.filter(data.piece.whatever,'bookSeriesGroupId',theId)列出作品。

您能建议如何正确执行此操作吗?或一些线索?

同样,我想将连接项输入到父级中。例如:

{
  name: '_bookPublications',
  label: 'Publications',
  type: 'joinByArray',
  withType: 'book-publication',
  filters: {
    projection: {
      title: 1,
      isbn: 1,
      format: 1,
      rrp: 1,
      publicationDate: 1
    }
  }
}

创建后,我们可以分配任何已分配的出版物,也可以创建新的出版物。有没有一种方法可以使用过滤器来仅显示未分配的出版物,因为当有大量出版物时,它会造成极大的混乱!

修改

tl; dr ....如何处理html中所有书籍的过滤后的集合?

0 个答案:

没有答案