【问题标题】:Variable Custom Fields in a Page in Silverstripe; Populate TableSilverstripe 页面中的可变自定义字段;填充表
【发布时间】:2015-09-20 10:15:57
【问题描述】:

如何在 Silverstripe 的页面中添加可变自定义字段?例如,如果我为“爱好”创建了一个自定义字段,那么一个人可能会有多个爱好。所以我需要用户在前端 CMS 中动态添加另一个字段来输入爱好。因此,也许用户可以在 CMS 中单击“添加另一个爱好”之类的按钮?

另一个问题是如何以编程方式在 Silverstripe 中填充表格?

【问题讨论】:

  • 您能否将两个问题拆分为关于 stackoverflow 的两个主题?
  • “爱好”是什么领域或关系?只是一个文本字段,一个 has_one 还是一个 many_many?你能提供一些代码吗?这个问题有一些可能的解决方案。
  • @wmk 爱好和人有很多关系。请提供一种解决方案。
  • 你看到课程了吗? silverstripe.org/learn/lessons/… 例如是关于many_many的关系。如果还有什么不清楚的地方,请询问并提供您迄今为止所做的尝试。

标签: database content-management-system silverstripe


【解决方案1】:

听起来您需要在页面上建立 has_many 关系到 Hobby 数据对象扩展:

// HobbyPage.php
class HobbyPage extends Page {

    private static $has_many = array(
        'Hobbies' => 'HobbyPage'
    );

}

// Hobby.php
class Hobby extends DataObject {

    private static $has_one = array(
        'HobbyPage' => 'HobbyPage'
    );

    private static $db = array(
        'Title' => 'Varchar(250)',
        // Any extra fields you want
    );

}

根据您需要的数据有多复杂,您可以使用GridField 或类似标签字段 (https://github.com/silverstripe-labs/silverstripe-tagfield) 来处理添加到 CMS 中的操作。重要的是在担心如何存储/检索数据之前让您的底层数据库结构正确(使用has_many)。

我相信 SilverStripe 课程 (http://www.silverstripe.org/learn/lessons) 涵盖了数据关系,应该会有所帮助。

【讨论】:

    【解决方案2】:

    听起来你可能正在寻找这个模块:

    https://github.com/silverstripe-australia/silverstripe-multivaluefield

    它允许您在单个字段中存储多个值,并为您提供一些 UI 选项,包括您在问题中指出的多个下拉菜单。这是否可取取决于您的具体情况。非规范化有利有弊。

    正如 howard10 所说,tagfield 对你来说可能也是一个不错的选择。

    【讨论】:

      猜你喜欢
      • 2021-02-18
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多