0

我想创建一个在表单中使用的自定义内容类型,该表单具有在自定义表单页面上编辑时与在管理后端中编辑时行为不同的字段。该表格将允许访问者注册以在在线出版物更改时收到通知。iframe我计划在另一个应用程序中使用该表单。

自定义内容类型字段

  • 职业
  • 电子邮件
  • 出版物编号
  • 订阅日期
  • 取消日期
  • 活跃

对于在自定义表单页面上填写表单的用户(与从管理后端创建新内容项相反),我想更改一些字段的行为:

  • ProductId字段(文本类型)不应是可编辑或可见的,并且应从查询字符串变量中获取其值
  • SubscribeDate字段不应是可编辑或可见的,并且应自动设置为提交表单的日期
  • CancelDate字段不应是可编辑或可见的
  • IsActive字段不应是可编辑或可见的,应自动设置为 true

我是 Orchard 的新手,起初我正在考虑为使用隐藏输入的字段创建自定义字段或自定义部分或替代视图。写下问题后,我认为我有一个很好的解决方案,但我想知道是否有更好的方法。

可能的解决方案

  1. 专门为与上述仅具有FirstNameLastNameOccupationEmail和的表单不同的表单创建自定义内容类型PublicationId
  2. 覆盖表单的视图,而不是使用从查询字符串变量获取其值的text input元素。或者,仅为该字段创建自定义视图。PublicationIdhidden inputPublicationId
  3. 使用 Workflows,在表单提交时创建上面自定义内容类型的实例。SubscribeDate为和设置默认值IsActive。我不确定我在工作流中有多少控制权,因此或者为表单提交创建一个处理程序(这是否存在?),它创建一个上面的自定义内容类型的实例并设置默认值。

我是否朝着正确的方向前进?我应该在管理 UI 中还是在代码中创建自定义内容类型?我希望与此发布通知功能相关的所有代码都集中在一个位置,因此编写模块是有意义的。此功能的其他一些部分将是:

  • 用户注册时发送确认电子邮件
  • 用户可以单击电子邮件中的链接,取消订阅发布通知
  • 运行一项日常任务,检查哪些出版物发生了变化(我们有一个单独的 api,因此我们可以在那里编写逻辑并调用 api)并向所有注册该出版物的人发送电子邮件

谢谢!非常感谢任何输入。

4

1 回答 1

1

我认为您需要创建一个新的内容部分,该内容部分应包含这些字段(全部)。这部分应该分配给新的内容类型。

为零件创建一个字段(迁移)...

ContentDefinitionManager.AlterPartDefinition("YourPartName", builder => builder.WithField("YourFieldName", fieldBuilder => fieldBuilder.OfType("TextField").WithDisplayName("Your field name")));

添加所有所需字段后,您应该将新部分附加到新内容类型...

ContentDefinitionManager.AlterTypeDefinition("YourContentTypeName", 
    builder => builder.WithPart("YourPartName"));

提示:始终使用迁移,它们允许您进行控制,如果您在不同的环境中工作,您将拥有相同的结构,而无需再次创建相同的部件/内容类型。

我建议你看看零件和驱动程序

希望这可以帮助。

问候。

于 2015-02-21T01:17:44.980 回答