如何为 Contentful 中的下拉字段设置不同的标签和值

How can I set different label and value for dropdown fields in Contentful

我是 Contentful 的新手,正在尝试创建一个简单的下拉字段,我在其中为每个选项定义了不同的值和标签。但我似乎不知道该怎么做。

我创建了一个下拉菜单,方法是创建一个 短文本字段 ,将 外观 设置为 下拉菜单 并勾选 Accept only specified values under Validation:

但它只允许我设置标签部分,它也会自动用作值。由于我的很多值都转换为枚举,因此普通用户在下拉菜单中使用 TYPE_CAMPAIGN 而不是“Campaign”之类的东西很奇怪。

作为我正在寻找的示例,在 Advanced Custom Fields (WordPress) 中,我可以通过键入 TYPE_CAMPAIGN : Campaign 来完成,结果是 <option value="TYPE_CAMPAIGN">Campaign</option>

在 Contentful 中可以做类似的事情吗?

此处内容丰富的 DevRel。

对于短文本字段,我们不支持此功能。有两种方法可以解决这个用例。

为其创建内容类型

您可以创建一个单独的内容类型并以此方式解决用例。您可以不使用短文本,而是引用这种分隔内容类型的条目。您可以将您的枚举存储在那里,它还有一个优点是您可以在将来使用其他字段扩展它。

使用 App Framework(或 UI 扩展)扩展 Contentful 界面

另一种选择是利用 App Framework。该框架允许您用您的逻辑替换字段(、条目甚至完整页面)。通过这种方式,您可以呈现带有适合的标签和值的 select。

Here is how I did it:

    const TestLevel = stationContentType.createField('testLevel', {
      name: 'TestLevel',
      type: 'Symbol',
      required: true,
      validations: [specificValueRestriction([TestLevels.testa, TestLevel.testb, TestLevel.testc])]
    });

export enum TestLevels {
  testa = 'Test A',
  testb = 'Test B',
  testc = 'Test C',
}

export const specificValueRestriction = (specificValueRestriction: string[]): IValidation =>
({
  in: specificValueRestriction
});

And then I used datamappers to map the values to display the strings:

function mapStaffingLevelEnumType(testLevel: string) {
  if (testLevel== 'testa')
    return TestLevels.testa;
  if (testLevel== 'testb')
    return TestLevels.testb;
  if (testLevel== 'testc')
    return TestLevels.testc;
}