Jekyll + NetlifyCMS 集合小部件

Jekyll + NetlifyCMS collection widget

我对 Jekyll + NetlifyCMS 有疑问。我想创建 relation widget。我无法使用以下代码在相关小部件中搜索我的作者。我做错了什么?

#config.yml
collections:
  authors:
    output: true
#_authors/jill.md
---
short_name: jill
name: Jill Smith
position: Chief Editor
---
Lorem ipsum
#admin/config.yml
- name: "pages"
  label: "Pages"
  files:
    - label: 'Homepage'
      name: 'homepage'
      file: 'pages/homepage.md'
      fields:
        - label: "Choose author"
          name: "author"
          widget: "relation"
          collection: "authors"
          value_field: "short_name"
          search_fields: ["name", "short_name"]

我 运行 遇到了完全相同的问题,我需要更多地了解它的实际工作原理以及如何在 Netlify CMS 中更好地引用 Jekyll 页面变量,但我得到了一个可行的解决方案我将适应您的用例。

首先,添加 display_fields 对象,以便用户可以看到他们正在选择哪个作者。这可能是您的问题,因为 docs 概述了它是必需的 属性。我将值字段更改为 {{slug}},因为我们将看到稍后引用该字段将是一种万无一失的方法。此外,我将作者添加到 CMS 配置中,因为我在关系字段中有我引用的集合。我不确定它是否也能起到作用,但是嘿,它不会造成伤害:

#admin/config.yml
- name: "authors"
  create: true
  folder: "_authors/"
  fields: 
  - label: 'Title'
    name: 'title'
    widget: 'string'
  - label: 'Position'
    name: 'position'
    widget: 'string'
- name: "pages"
  label: "Pages"
  files:
    - label: 'Homepage'
      name: 'homepage'
      file: 'pages/homepage.md'
      fields:
        - label: "Choose author"
          name: "author"
          widget: "relation"
          collection: "authors"
          value_field: "{{slug}}"
          search_fields: ["name", "short_name"]
          display_fields: ["name"]

您可以保留 short_name 作为将提交给主页作者 属性 的值字段,但我将向您展示一种让内容编辑者添加作者和通过 Netlify 将它们应用到带有 slug property. You can customize the slug or just let Jekyll create it by default. I haven't figured out how to access any of the page variables 的页面,而不是首先在 Netlify CMS 中定义它们,但是 slug 在创建时用作集合项的文件名,我可以通过 CMS 配置在本地引用它。

#layouts/home.html 
---
title: Home
author: jill
---
<div class="author">
{%- capture author-id -%}_authors/{{page.author}}.md{%- endcapture -%}
{% assign author = site.authors | where: 'path', author-id | first %}
{{ author.name }}
</div>

注意:小减号是为了去除任何空白,因为如果您将它们设为多行,则捕获是要这样做的。为了安全起见,我只是添加了它们。如果您想查看我如何在其他页面中引用集合中的字段,您可以read my guide