如何将表单元素值输出为文本? -- forms 领域 drupal 相关 的问题

How to output form element values as text?


3
vote

问题

中文

在节点编辑表单上,我想使某些字段由所有用户不可编辑,但存储在其上的值在表单上可见。我的思想是要将它们作为文本而不是HTML表单元素打印出来。什么是完成此目的的最佳方式?

要提供一些上下文,这些值通过迁移填充,不应在网站上编辑。
英文原文

On a node edit form, I want to make certain fields be non-editable by all users but the values stored in them to be visible on the form. My thought was to just print them out as text instead of in an HTML form element. What is the best way to accomplish this?

To provide some context, these values are populated via a migration and should not be edited on the site.

  

回答列表

4
 
vote

将表单字段更改为标记元素如果表单验证处理程序或表单提交处理程序选中表单字段或表单提交处理程序: #markup 元素未通过 $form_state['values'] 数组,其中包含与表单字段关联的当前值(以及表单处理程序使用的阵列 - 验证和提交致电)。此方法适用于使用 #element_validate 的表单字段,如 #element_validate 也来自 #markup 表单字段。
如果确定您没有表单验证处理程序,请检查只需显示的表单字段的值,那么您可以采用此方法。由于第三方模块可以为这些字段添加表单验证处理程序,我不建议采用它,如果不是在您创建的自定义模块创建表单字段的情况下,则没有其他开发人员将更改添加的表单字段您的代码(或更改代码创建的表单)。

使用 #attributes 使字段只读不是安全的方法(因为Berdir指出);要确保未更改表单字段值,则应将它们与表单中包含的值进行比较(这意味着检查 99887666 数组中包含的值)。 此方法仍然存在表单验证处理程序(以及表单提交处理程序),因为其他模块将充当这些值不只读;只有您的代码就像那些值都是只读的。 不采用此方法的其他原因是"更容易" 将 #disable 属性添加到表单字段。

另一种方法是将表单字段类型更改为 998887668 。如果选择此方法,则还需要使用 #prefix ,以及 998876610 。

。,还需要呈现表单字段值。
  $form_state['values']1  

作为副作用,如果这些表单字段不需要对用户可见,但它们必须存在于 $form_state['values']2 数组中,因为其他模块(包括创建表单的模块)实现表单处理程序,然后您可以将表单字段类型更改为 $form_state['values']3

 

Changing a form field to a markup element creates problems if the form field is checked by a form validation handler or a form submission handler: #markup elements are not passed in the $form_state['values'] array, which contains the current values associated with the form fields (and which is the array used by the form handlersxe2x80x94both the validation and the submission handers). This method works for form fields that use #element_validate, as #element_validate is also used from the #markup form fields.
If you are sure there aren't form validation handlers that check the value of the form fields you want only to show, then you can adopt this method. As third-party modules could add form validation handlers for those fields, I would not suggest to adopt it, if not in the case the form fields are created by a custom module you created, and no other developers will alter the form fields added by your code (or alter the form created by your code).

Using #attributes to make a field read-only is not a secure method (as Berdir pointed out); to be sure the form field values are not altered, you should compare them with the value contained in the form before it shows (which means to check the values contained in the $form array). This method has still problems with the form validation handlers (and form submission handlers) because other modules will act as those values are not read-only; only your code will act like as those values are read-only. The other reason to not adopt this method is that is "easier" to add the #disable attribute to a form field.

Another method is to change the form field type to #hidden. If you choose this method, then you need also to render the form field value using #prefix, and #suffix.

$form['field']['#type'] = 'hidden'; $form['field']['#prefix'] = '<strong>' . t("Field title: ") . '</strong>' .    check_plain($form['field']['#default_value']); 

As side note, if those form fields don't need to be visible to users, but they must be present in the $form_state array because other modules (including the one that created the form) implement form handlers, then you can change the form field type to #value.

 
 
1
 
vote

您可以使用 $form_state['values']4 将字段 $form_state['values']5 从textfield更改为标记。

 

You can use the yourmodule_form_alter to change fields #type from textfield to markup.

 
 

相关问题

3  如何在Node-Add表单中展开FirdioSet?  ( How to expand the fieldsets in node add form ) 
当我通过 998876662 添加新节点时,有很多按组命令的设置:提交表单设置,工作流程设置,评论设置。但所有这些FirdioSet都默认折叠。 我的问题是:如何使它们默认扩展? ...

31  如何在“复选框”fapi元素中禁用一个复选框?  ( How can i disable a single checkbox in a checkboxes fapi element ) 
标题基本上说明了这一切,我想禁用一个复选框类型fapi元素的一个复选框。 我不想使用javascript,也不是从复选框到多个 checkbox 元素的选项,因为该元素由另一个模块提供。< / p> 思想? ...

6  如何将“传递给Drupal_Attributes()的参数1”解析为arrys_settings_form()上的array“错误?  ( How do i resolve the argument 1 passed to drupal attributes must be an array ) 
我通常不会在这样的特定问题上发布,并询问特定问题的帮助,但我在浪费时间的绳索结束时... 我有一个简单的d7模块如下所示,当我加载页面时(谁的菜单项正是我想要的地方)我收到以下错误: 可恢复的致命错误:传递给Drupal_Attributes()的参数1必须是阵列,在第3106行中调用/por/to/site/p...

13  如何将客户端表单验证添加到Drupal表单?  ( How do i add client side form validation to a drupal form ) 
如何将客户端表单验证添加到Drupal表单?例如,在评论模块中。如果Vistor不进入电子邮件地址,我想弹出一个说:"请输入电子邮件地址" 的窗口。 我希望有人能给我一个如何这样做的例子。 ...

2  如何通过drupal_get_form调用规则操作设置表单  ( How to call a rules action settings form via drupal get form ) 
所以,我正在尝试嵌入我在'/ admin / config / workflow / culs / comment / comment / commence_payment_paypal_wps / edit / 3'中找到的表单 - 其中包含paypal业务等的设置(来自commerce_paypal_wps .m...

7  如何覆盖搜索框?  ( How to overwrite the search box ) 
<div class="fr_search"> <form action="/" accept-charset="UTF-8" method="post" id="search-theme-form"> <input name="search_theme_form" id="edi...

3  如何为我的菜单添加额外的信息?  ( How can i add extra info to my menus ) 
我有一些在标准菜单模块中管理的菜单(Drupal 6,BTW)。我想在我编辑菜单项时添加一个复选框,以控制通过CSS的"新建" 横幅的显示(通过为打开复选框的项目添加类)。 我可以将我的复选框添加到形式,如下所示: function mymodule_form_menu_edit_item_alter(&$for...

4  将CSV文件发送到FAPI表单上的用户  ( Send a csv file to the user on fapi form submit ) 
我有一个fapi形式,可以从用户收集一些信息,然后生成csv文件。意图是当用户单击表单上的"导出" 时,CSV立即下载。 但是,当提交处理程序调用CSV生成函数时,表单只是重定向,而不是服务CSV。 是否有任何方法可以将此表单直接向用户提供服务,而不会生成临时文件? ...

9  表单API文件上传  ( Form api file upload ) 
我的表单中有以下代码。 $form['new']['upload'] = array( '#type' => 'file', '#title' => t(''), '#size' => 40, ); 在提交处理程序上,它返回文件名,但它不保存文件并返回文件对象。我还需要做什么? 我正在尝试做的是...

2  在哪里修改计算可折叠字段集的高度的逻辑?  ( Where to modify the logic that calculates the height of a collapsible fieldset ) 
我不确定这是否是一个主题问题,但我不断地获得可收缩的Firstalset是1-2扫描线太短,导致滚动条出现。 这个项目很重使用FAPI,有时在其他可折叠的仿古集中的可折叠仿真集,垂直滚动条正在吃太多的页面房地产。 我正在使用一个未修改的融合启动主题,如果有帮助。而且,我不是一个主题,但通常可以得到。 我会非常高兴修...

8  在“将文件推送”到用户之后是否可以重定向是可以重定向?  ( Is it possible to redirect after pushing a file to the user ) 
我有一个设置,其中一个网站生成有关站点使用情况的内部分析。用户能够请求下载其个人分析,因为此信息很敏感,我不创建任何文件,我在变量中生成CSV文件,然后将其"将其推送给用户: function _cex_download( $output, $filename ) { header("Pragma: pub...

1  即使第一个注册用户,最后表格验证函数也会传递错误  ( Last form validation function is passing an error even though the first one regi ) 
我写了一个自定义user_login表单验证函数,调用user_external_login_register()注册和登录用户,但表单调用form_set_error()的最后验证函数。 表单的#validate数组如下所示: validate (Array, 4 elements) * 0 (Str...

2  在块内嵌入表格  ( Embed form inside a block ) 
我正在使用模块(捐赠),该模块在特定URL处生成形式,例如, http://示例。 com /捐赠。我想将此表单放在一个块内并在另一个页面上显示它。你们知道最好的方法吗?谢谢阅读。 ...

1  错误类未设置在表单字段上  ( Error class not being set on form fields ) 
我有一个复杂的,因为我在_submit钩子而不是_validate中验证的各种原因。除了 error 类没有被添加到表单元素中,这是非常好的。 是有没有简单的我缺少或我需要使用 form_get_errors 并设置课程? (提交验证的原因是因为我想保存表单数据,无论它是否有效。) ...

2  如何避免在创建新内容时提交表单,具体取决于某些条件?  ( How to avoid submitting a form when creating a new content depending on some cr ) 
让我们假设我有一个内容类型人,我不希望字段 name 包含文本 aaa 。 如果发生这种情况,避免提交表格的最佳方式是什么? 例如: - 隐藏保存按钮 - 提交它,但返回与标记为红色的字段相同的页面,或者只是显示消息... 这只是一个例子。我在问它,因为有时我需要对数据库进行查询,看看是否存在某些记录,或类似...

7  我可以使用表单API将jQuery.ui.datepicker小部件附加到表单元素吗?  ( Can i attach a jquery ui datepicker widget to a form element using the form api ) 
我有一个通用形式元素: $form['date'] = array( '#type' => 'textfield', '#title' => t( 'Date' ), ); 我想将jQuery UI DatePicker添加到此元素。有没有办法通过表单API执行此操作,或者我必须使用drup...

1  仅电子邮件的订阅表单:MailChimp模块?  ( Email only subscription form with mailchimp module ) 
我在 mailchimp 和我最近安装了 mailchimp 模块在我的drupal 6.0站点中。 匿名用户的订阅表格有名字和姓氏输入元素,以及(空丑陋)兴趣组div。 有没有办法使用MailChimp模块,即表示简单的电子邮件+按钮订阅表单块? ...

2  单个自定义内容类型的替代主题表单  ( Alternative themed forms for a single custom content type ) 
在站点上,我想要在首页上的自定义内容类型的"快速输入" 表单,同时还保持"正常" 非自定义"节点/添加/ MyContentType" 表单。我能够使用返回正确数组的主题_函数来自定义"普通" 形式,该函数指向呈现形式的功能('模板'=&gt;'某些节点形式')。 但理想情况下,我想保留表单的两个版本,在块中的Fro...

3  如何在Ajax开始之前添加一些JavaScript函数  ( How to add some javascript functions before ajax begins ) 
如何在ajax开始之前添加一些javascript函数,使用fapi? $form['submit'] = array( '#type' => 'submit', '#value' => 'Upload', '#ajax' => array( 'callback' => 'ajax_s...

1  我可以通过视图2公开注册表格2吗?  ( Can i expose the signup form through views 2 ) 
我正在使用 signup 和视图在drupal 6中(我无法安装drupal 7),我创建了一个列出用户可以注释的所有节点的视图。 现在我想使用户能够注册其中一个节点,而无需强制它们向节点本身导航,并且我需要公开虽然查看表单(或许使用PHP字段)。我已经搜查过这个,但大多数评论都是几年的。此外,我宁愿不熟悉PHP。 ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.