2

有谁知道如何覆盖/扩展apos.schemas.field()使其输出自定义 HTML 的行为?

我试图实现一个联系表单,以“他们的方式”进行操作,但是我对 Apostrophe CMS 为您提供的控制级别超过它输出的标记感到非常失望。

我想用 Bootstrap 设置我的输入样式,并为输入添加一些额外的属性,但是 apos.schemas.field 方法似乎不接受除了 readOnly 标志之外的任何其他参数,所以我想知道我是否可以扩展这个方法改为接受一个对象,该对象将包含我需要的所有必要数据,即类、数据属性等。

4

1 回答 1

1

有几种方法可以做到这一点。

如果要更改特定架构字段类型的所有字段的输出,可以覆盖 中的适当模板lib/modules/apostrophe-schemas/views,例如string.html.

该模板的标准版本导入macros.html和调用schemas.string,等等,但您不必这样做。

你要做的是:

  1. 确保您的字段的全部内容包含在具有data-name属性的外部元素中,该属性设置为模式字段名称。包括应与输入字段一起显示和隐藏的任何标签或其他内容。

  2. 确保字段本身具有name也设置为模式字段名称的属性。这适用于大多数字段类型,请参阅 macros.html 了解标签和连接编辑器等特殊情况。

一般来说:标记是您可以更改data-的,但属性和name属性必须保持不变。

“如果我想要 Apostrophe 表单中的常规格式,以及我的表单中的特殊格式怎么办?” 一种方法是style在架构中的字段上设置一个属性,如下所示:

{
  name: 'flavor',
  type: 'string',
  style: 'custom'
}

然后你string.html可以看起来像这样:

{%- import "macros.html" as schemas -%}
{% if (data.style == 'custom') %}
  {# Custom way #}
  <div data-name="{{ data.name }}">
    <h4>{{ data.label }}</h4>
    <input name="{{ data.name }}" />
  </div>
{% else %}
  {# Normal way #}
  {{ schemas.string(data) }}
{% endif %}

请注意,这使得该custom样式可用于您网站上在添加字段时选择使用它的任何表单。另请注意,addFields如果您想更改标准字段的定义,例如title使用自定义样式,您可以使用它来重述标准字段的定义。

“我在哪里输出字段的当前值?” 你没有。架构模块 javascript 将即时设置并读取它,这是您必须遵循data-namename属性约定的原因之一。

于 2017-08-26T20:13:41.030 回答