如何正确限制单例的件数

How to properly limit the quantity of pieces for a singleton

在上下文中编辑时,我一直无法正确限制编辑器可以 select 的片段数量。据我了解,这需要是一个单例,因为一个区域提供了很多小部件。

本例只有一种类型,也可以删除,以防编辑不想填那个占位符。

但是,当编辑器想要添加一块时,在代码中设置该限制的正确方法是什么?我传递的所有选项都被完全忽略,并且the documentation不显示代码示例,只显示可以使用的属性。

{{
  apos.singleton(
    container,
    'propName',
    'module-name',
    {
      limitByAll: 1,
      limitByTag: 1,
      limitById: 1,
      limit: 1
    }
  )
}}

None 个选项限制了编辑器的任何内容:

所以我想知道,对单例执行限制的正确方法是什么?

块小部件模块不包括单独选择它们时允许的最大块数。

此模式使用joinByArray fieldjoinByArray 字段 确实 有一个选项,limit 您可以在其中指定最大连接件数。但是 pieces 小部件不包含该选项。

如果您知道这将始终用于单独选择片段(而不是使用标签或“所有”模式),那么您可能想要创建一个新的小部件来满足您的需要。使用“单独”模式时,碎片小部件不是很花哨。它只是一个带有 joinByArray 字段的小部件。

我经常遇到向单例添加选项的问题,所以我不经常使用单例,因为我发现几乎所有情况都可以使用一个区域。

“据我了解,这需要是单例,因为一个区域提供了很多小部件。”

您可以使用一个只有一种类型的区域,并将小部件数量限制为至少一个。

例如,这是我在 gobal 中创建的区域:


// lib/modules/apostrophe-global/index.js

    {
      name: 'footerArea',
      label: 'Footer',
      help: 'Add a footer here which will be displayed on all pages'
      type: 'area',
      options: {
        limit: 1,
        widgets: {
          'footer': {
            controls: {
              movable: false,
              cloneable: false,
              removable: true,
              position: 'top-right'
            }
           }
         }
       }
    }

不幸的是,这里的限制只影响该区域中的小部件数量,而不影响单个小部件的数量。

我也想出了 joinByArray 解决方案,例如 alexbea 说:

        {
            name: '_images',
            type: 'joinByArray',
            withType: 'apostrophe-image',
            label: 'Images',
            help: 'Add images to gallery',
            required: true,
            limit: 48,
            noHeight: true,
            filters: {
                projection: {
                    attachment: 1,
                    description: 1,
                    title: 1,
                    titleShow: 1,
                    titleColor: 1,
                    titleAlign: 1,
                    credit: 1,
                    creditUrl: 1,
                    clickAction: 1,
                    gradientColorTop: 1,
                    gradientColorBottom: 1,
                }
            }
    }

在我的小部件中,我现在可以通过一个简单的循环轻松显示 _images 的所有内容:

{% for _image in piece._images %}

...

{% endfor %}

在很多情况下,这给了我更多的灵活性,因为我不想按原样展示作品。使用这种方法,我可以在具有不同布局的许多不同小部件中显示一件作品。使用投影过滤器,我什至可以决定为这个特定的小部件提取哪些字段。我可以从撇号的可重用性中获益更多,并且拥有像这样更清晰的代码。