briceburg/silverstripe-flexiform

将 CMS 可配置表单添加到您的 SilverStripe 对象中。

安装: 122

依赖项: 1

建议者: 1

安全: 0

星级: 18

关注者: 5

分支: 4

开放问题: 6

类型:silverstripe-module

0.5.0 2014-12-24 21:37 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:23:28 UTC


README

将 CMS 可配置表单添加到您的 SilverStripe 对象中。

特性

  • 将表单添加到任何 DataObject 或页面
  • 基于 GridField 的字段、选项、提交、操作等管理。
  • 通过 Environment Builder 编程定义初始字段和处理程序,并从环境中构建它们。
  • 多对多 关系在表单和 FlexiFormField 之间,一对多 关系在 FlexiFormHandler 之间
    • 减少重复并提高一致性
    • extraFields 允许为每个表单进行定制,而不会干扰使用相同字段的其他表单
  • 防止表单重复提交
  • 可定义、友好的日志和数据分析的 post URLs
  • 支持每页多个表单

要求

值得尊敬的 GridFieldExtensions https://github.com/ajshort/silverstripe-gridfieldextensions

在 SilverStripe 3.1 中测试过

屏幕截图

flexiform fields

field editing

用法

  • 通过扩展 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