briceburg / silverstripe-flexiform
将 CMS 可配置表单添加到您的 SilverStripe 对象中。
Requires
Suggests
- briceburg/silverstripe-flexifields: Useful additional fields for flexiform and beyond.
This package is not auto-updated.
Last update: 2024-09-24 03:23:28 UTC
README
将 CMS 可配置表单添加到您的 SilverStripe 对象中。
特性
- 将表单添加到任何 DataObject 或页面
- 基于 GridField 的字段、选项、提交、操作等管理。
- 100% 兼容 holder pages 和 VersionedGridfield
- 通过 Environment Builder 编程定义初始字段和处理程序,并从环境中构建它们。
- 多对多 关系在表单和
FlexiFormField
之间,一对多 关系在FlexiFormHandler
之间- 减少重复并提高一致性
- extraFields 允许为每个表单进行定制,而不会干扰使用相同字段的其他表单
- 防止表单重复提交
- 可定义、友好的日志和数据分析的 post URLs
- 支持每页多个表单
要求
值得尊敬的 GridFieldExtensions https://github.com/ajshort/silverstripe-gridfieldextensions
在 SilverStripe 3.1 中测试过
屏幕截图
用法
- 通过扩展
FlexiFormExtension
将 flexiform 添加到页面和数据对象中。例如。
class Event extends DataObject { private static $extensions = array( 'FlexiFormExtension' ); }
在扩展对象后触发环境构建器 (/dev/build) -- 现在,当在 CMS 中编辑事件时,您将看到表单选项卡。
- 要显示 flexiform,请将 $FlexiForm 添加到您的模板中。以下是一个示例 Event.ss:
<div class="event-content"> <% if not FlexiFormPosted %> $Content <% end_if %> $FlexiForm </div>
这里我们使用 $FlexiFormPosted 来隐藏 $Content 如果已经提交了表单。
Flexiform 还提供了一种便利的包装器,用于标准的 $Form 方法。从扩展 FlexiFormExtension 的页面调用 $Form 将输出相关的 flexiform。例如。
<div class="event-content"> <% if not FlexiFormPosted %> $Content <% end_if %> $Form </div>
与第一个示例完全相同。
表单标识符
当您在页面上有 多个表单,需要 引用表单(例如从另一个页面),或想 控制 post URL 时,请使用表单标识符。
FlexiForm 扩展 ContentController
以向所有页面提供 $FlexiForm 方法。默认情况下,它期望控制器中的 dataRecord 是扩展 FlexiFormExtension
的对象。您可以通过在控制器上调用 setFlexiFormObject 方法或通过传递 Identifer 到 $FlexiForm 来显式设置 flexiform 对象。
表单标识符在 flexiform 上的 设置 选项卡中定义。标识符还用于 post URLs 以便于在 服务器日志 和 分析 中跟踪表单提交。
<!-- .ss template --> <div class="page-content"> $FlexiForm('newsletter_form') </div>
简码
或者,您还可以在内容区域使用 [flexiform] 简码。这对于控制表单在现有内容中的位置非常有用。
可选地通过 ID 参数传递 表单标识符。
Some WYSIWYG Content
Default Form: <br /> [FlexiForm]
Explicit Form: <br /> [flexiform id=registration_form]
模板,自定义表单类
默认情况下,flexiform 使用 Form.ss 来渲染表单。您可以通过以下方式更改模板:
-
简单方法:将 FlexiForm.ss 添加到您的主题中
-
强大方法:通过 $flexiform_form_class 提供替代表单类
class Event extends DataObject { private static $extensions = array( 'FlexiFormExtension' ); private static $flexi_form_class = 'EventForm'; } // attempts to use EventForm.ss by default, falling back to Form.ss class EventForm extends FlexiForm { // optional: provide a specific template // public function getTemplate() { return 'EventSpecificTemplate'; } }
配置
大多数配置是通过 CMS 完成的 -- 但是您可以通过子类化(受保护属性、getter 和 setter)和 YAML 配置 进一步调整行为。
有关文档和示例,请参阅 docs/CONFIGURATION.md。