【问题标题】:How to properly limit the quantity of pieces for a singleton如何正确限制单身人士的件数
【发布时间】:2021-04-10 07:57:44
【问题描述】:

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

在这种情况下,只有一种类型,也可以将其删除,以防编辑器不希望填充该占位符。

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

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

没有任何选项对编辑器有任何限制:

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

【问题讨论】:

    标签: apostrophe-cms


    【解决方案1】:

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

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

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

    【讨论】:

    • 好的,这听起来像是一个解决方案。这意味着完全重做我们的许多组件,因此我们更有可能向编辑器提供不选择多个组件的说明,并简单地将第一个组件拉到模板的数组中。不过感谢您的想法,请注意下一个。
    【解决方案2】:

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

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

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

    例如这是我在 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 %}
    
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-24
      • 2011-08-31
      • 2010-10-15
      相关资源
      最近更新 更多