当前位置: 首页 > 知识库问答 >
问题:

在Zend中为CMS创建表单生成器?

鄢禄
2023-03-14

很好的一天,

我已经创建了一个CMS来显示页面,但是我现在看到用户希望能够插入他们选择的字段的自定义表单

我认为应该将表单字段添加到链接到表单表的字段表中。其中,诸如字段数据类型和验证以及信息是否应存储在数据库中或发送表单的电子邮件地址中等内容将被存储,然后用于在CMS前端生成表单。

现在在页面中显示实际表单。。。用户如何设置字段在内容中的位置?我现在只有一个文本编辑器(ckeditor),用户可以在其中更改要显示的内容。。。他们如何告诉CMS在特定页面中放置表单,以及CMS如何知道将表单添加到特定页面?

你有什么建议吗?

谢啦

共有3个答案

吕宣
2023-03-14

域对象

根据您想要的灵活性,您需要创建许多实体/域对象来保存用户自定义表单数据。

首先,是表示表单元素的实体。我将创建表单字段集字段字段类型。每个表单有一个或多个字段集,每个字段集有一个或多个字段等。

实际上,我正在ZF2中构建一个表单生成器,作为我公司当前的项目,我从一个可以扩展到所有表单“元素”的通用元素开始

/**
 * Base form element that all form elements extend
 */
abstract class Element implements ElementInterface, AttributeCollectionAwareInterface
{
  /**
   * @var string
   * @ODM\Id
   */
  protected $id;

  /**
   * @var string
   * @ODM\Field(type="string")
   */
  protected $name; 

  /**
   * @var string
   * @ODM\Field(type="string")
   */
  protected $label;

  /**
   * $attributes
   *
   * Map of form element attributes
   * 
   * @var array
   * @ODM\ReferenceMany(targetDocument="JobboardBase\Document\Form\Attribute")
   */
  protected $attributes;

  /**
   * $options
   *
   * Map of form element options
   * 
   * @var Doctrine\Common\Collections\Collection
   * @ODM\ReferenceMany(targetDocument="JobboardBase\Document\Form\Option")
   */
  protected $options;

  /**
   * @var status
   * 
   * @ODM\ReferenceOne(targetDocument="JobboardBase\Document\Form\Status")
   */
  protected $status;

  /**
   * $dateCreated
   *
   * The form creation date
   * 
   * @var \MongoDate
   * @Gedmo\Timestampable(on="create")
   * @ODM\Field(type="date")
   */
  protected $dateCreated;

  /**
   * $dateUpdated
   *
   * The form updated date
   * 
   * @var \MongoDate
   * @Gedmo\Timestampable(on="update")
   * @ODM\Field(type="date")
   */
  protected $dateUpdated;

这些实体应该具有尽可能接近Zend已经存在的Zend_Form_Element_*类的属性(如$属性$name$选项等)他们在页面上。

占位符

大多数内容管理系统都有某种“占位符”功能——“页面”被分解为几个“位置”,如页眉、页脚、标题、内容等。同样,这些位置可以被建模为用户可编辑的实体,用户可以在其中为每个占位符(如表单)分配一个或多个内容项。

基本思想实际上是一种基于多个其他视图文件(有点像视图部分)组成页面浏览量的方式,其中的内容是根据配置动态生成的。

幸运的是,Zendhtml" target="_blank">框架还提供了创建此类占位符的能力。他们的文件说:

视图占位符是为应用程序创建丰富布局的一种简单而强大的方法。您可以使用各种标准占位符,如前面讨论的占位符(doctype()、headTitle()、headLink()和headScript()),或者使用通用占位符()辅助工具聚合内容并以自定义方式呈现。

模板化

占位符可以帮助您定位设置区域中的内容。但是,如果用户希望直接在文本内容(您的编辑器)中呈现表单,则此方法将不起作用。

一种解决方案是为表单实现某种类型的模板系统,在内容中放置一组文本模板。

例如:

msgstr"这是我的联系我们[FORM][id=123][name=接触我们][FORM]表格请填写所有字段"

当您呈现表单时,您可以用实际的表单超文本标记语言替换此模板。这种方法可以很好地工作,只要你在模板上有创意,以确保没有误报,也许还有一些JS“添加表单”按钮来为用户创建模板文本。

冷英博
2023-03-14

正如@mjb4所说,您可以创建自己的表单类。该类可以添加新的表单元素,并且每个表单元素都是该类中的一个对象。这是我自己做的,非常方便。

PHP

表单本身保存在数据库中,可以由表单类加载。它为每个表单元素初始化相应的类。然后可以更改各个表单属性。您还可以添加新的表单元素或删除一些表单元素。

使用方法$html=$form-

发送表单时,您再次使用类进行验证。它遍历所有表单元素并调用它们的validateMe方法。每个对象都知道表单元素的名称,并在$_REQUEST数组中查找它。

jquerycms端

您可以使用JQuery创建表单创建者,并将表单方案保存到数据库中。给用户两个选项来保存表单数据。一:通过电子邮件发送表单数据。二:创建新的db表并插入具有唯一id的数据。当给出选项2时,还应该有一个报表创建者来创建一个显示表单数据的页面(公共或私有)。

您还应该将html结构留给php类。用户没有必要改变这一点。只需为他们创建一个模板。

冀阳文
2023-03-14

简单方法:
将所有不同的超文本标记语言节点拆分为基本的PHP对象,如无线电按钮,复选框,选择,文件,文本区域和输入。为它们提供一些验证,比如输入的整数。使用它们的内置表示将它们传递到表单构造类。

硬方法:
另一种方法是通过逻辑分割提供的数据,因此列表、文本、文件和一个选项。文本可以有多个子类型,如integer、float、date-email等等(PHP的正则表达式验证器在这里非常好)。此外,对于某些应用程序,您可能会存储可用的选项或某个域。

对于其中的一些类型,您可以使用不同的选项在您的网站上呈现它们,即列表可以是多个输入元素、一个带分隔符的文本区域,或者只是一个多选择框
因此,您可能希望使这些独立于它们所表示的数据类型,这意味着您需要为这些基本数据类型(适配器)呈现HTML的类。

这些适配器将通过获取一个数据类型对象,呈现某个表单对象调用的HTML,然后转换数据并将其发送到数据类型来构建。然后,它们将对它们进行验证,并将它们存储在您的数据库或其他任何地方。

我认为最复杂的部分是将其与javascript验证结合在一起,也就是说,您可以为某些适配器和数据类型启用它。

 类似资料:
  • 问题内容: 如何在phpmyadmin中为现有表生成创建表脚本? 问题答案: 在sql选项卡中使用以下查询: 要查看完整的查询,上面还有这个名为+ Options的超链接,在其中选择“全文本”

  • 注意:在 Dreamweaver CC 和更高版本中不再支持 ColdFusion。 关于 ColdFusion 表单 ColdFusion 表单为您提供了用于验证表单数据的几个内置机制。例如,可以检查以确保用户输入了有效的日期。一些表单控件具有其它功能。许多表单控件没有 HTML 相应部分,而其它表单控件则直接支持根据数据源动态填充控件。 Dreamweaver 为使用 ColdFusion M

  • 我正在用PHP制作一个CMS,希望用户能够创建自定义表单字段,用于他们的网站注册(类似于SocialEngine或PHPFox)。然而,我真的没有一个好主意,我将如何实现这一点。我需要做一些插件(“钩子”)系统吗?我最初是这么想的,但我不知道这是否真的是一个好方法: CMS管理员将获得一个表单,其中包含他们想要创建的表单字段名称、字段类型(字符串、布尔值、日期等)、字段类别以及是否为必填字段等选项

  • 注意:Dreamweaver CC 和更高版本的用户界面已简化。因此,您可能在 Dreamweaver CC 和更高版本中找不到本文中描述的一些选项。有关详细信息,请参阅此文章。 当访问者在 Web 浏览器中显示的 Web 表单中输入信息,然后单击提交按钮时,这些信息将被发送到服务器,服务器中的服务器端脚本或应用程序会对这些信息进行处理。服务器向用户(或客户端)发回所处理的信息或基于该表单内容执行

  • 编译时,编译器抛出以下错误: 错误:- 严重性代码描述项目文件行抑制状态错误无法为类:Android创建JavaTypeInfo。支持V4。看法可访问性。由于系统原因,AccessibilityManagerCompat/IAAccessibilityStateChangeListenerImplementor无法访问。伊奥。DirectoryNotFoundException:找不到路径“C:\

  • 我们使用iText读取输入PDF,然后添加消息并保存输出。 有没有一种方法可以读取单元测试中生成的PDF文件,然后检查所提供的文本是否存在于正确的x、y坐标上?