Questions tagged «forms»

将其用于有关Form API的问题。请勿将其用于实体或实体字段表单。


5
通过ajax更新选择列表值时如何避免“检测到非法选择”?
我有四个实体引用字段,用于表单中的用户实体。主机表单是节点编辑表单。其中三个是选择列表,最后一个是内联实体表单。 通过IEF添加用户实体后,我尝试更新选择列表值: function ebep_users_feature_users_list_ajax($form, $form_state) { $ief = array_shift($form_state['inline_entity_form']); $options = array('_node' => t('- None -')); $commands = array(); foreach($ief['entities'] as $data) { $options[$data['entity']->uid] = $data['entity']->name; } foreach(_ebep_users_feature_getUserListFieldNames() as $fieldName) { $form[$fieldName]['und']['#options'] = $options; $commands[] = ajax_command_replace('#'.$fieldName.'_wrapper', drupal_render($form[$fieldName])); } return array('#type' => 'ajax', '#commands' => $commands); } 它可以工作,但是当我尝试通过IEF添加另一个用户时,我得到了: 检测到非法选择。请联系网站管理员。
10 7  ajax  forms 

2
如何以编程方式更新列表字段的允许值?
我在Drupal 7中为Profile2帐户创建了一个选择列表。在允许值列表中,我添加了一些值。现在,我想以编程方式更新该列表中的值(添加,删除或更新)。我不想使用form_alter,因为我希望将这些更新提交给数据库。我的问题是,我似乎找不到这些值在数据库中的存储位置,或者如何从Profile2中提取这些值,更新它们然后保存它们。 我已经在这个特定问题上搜寻了很多内容,但找不到有关如何执行此操作的答案。我希望有人能帮助我。 谢谢。
10 7  forms  users 

1
在表单api(字段后缀)的输入字段后添加文本
我正在创建一个带有文本字段的表单。在输入字段之后,我想输入一些文本。像这样: Label * |________| some text Field description 我使用的代码是: $form['a_textfield'] = array( '#type' => 'textfield', '#title' => t('A Label'), '#size' => 10, '#maxlength' => 15, '#description' => t('A Field description'), '#required' => TRUE, ); 有没有办法以这种方式在输入字段后添加“一些文本”?我是否可以通过#markup手动输出HTML代码?有什么办法可以通过表单更改来做到这一点?还是主题功能?
10 7  forms 

2
如何使用表单元素类型文件以drupal8格式上传文件?
我想上传文件,我必须将表单元素类型用作“文件”。在提交功能中,我无法获取与我正在上传的文件有关的任何适当数据。有人可以帮我解决这个问题吗?请找到以下代码: public function buildForm(array $form, FormStateInterface $form_state) { $form['test_CERTIFICATE'] = [ '#type' => 'file', '#title' => $this->t('Certificate'), '#description' => $this->t('Your Certificate (.pem file)').': '.\Drupal::state()->get('test_CERTIFICATE_NAME'), ]; return parent::buildForm($form, $form_state); } 提交功能: public function submitForm(array &$form, FormStateInterface $form_state) { parent::submitForm($form, $form_state); $validators = array('file_validate_extensions' => array('pem')); $files = file_save_upload('test_CERTIFICATE', $validators, 'public://certfiles', FILE_EXISTS_REPLACE); …
10 8  forms 

3
将一个实体表单嵌入到另一个实体表单中,然后保存两者
我有一个自定义实体,这取决于用户实体。实际上,即使如此,我仍然认为有必要在用户个人资料表单中显示我的实体表单: 我现在遇到的问题如下:有2个保存按钮。并且,如果还不够好,则用户(下一个)的保存按钮甚至不再起作用,并且白色标签保存按钮仅保存白色标签实体。 将该表单更改为用户表单,如下所示: function whitelabel_form_user_form_alter(&$form, FormStateInterface $form_state) { $whitelabel = WhiteLabel::load(1); $whitelabel_form = \Drupal::service('entity.manager') ->getFormObject('whitelabel', 'default') ->setEntity($whitelabel); $form['whitelabel'] = array( '#type' => 'details', '#title' => t('White label settings'), '#open' => TRUE, 'form' => \Drupal::formBuilder()->getForm($whitelabel_form), ); } 我希望改组$whitelabel_form数组中的某些参数(以前在Drupal 7中使用过),但是该数组很大,无法找到所需的提交按钮和处理程序。 所以问题是,可以做到吗?推荐的方法是什么?
9 8  forms  users 

2
如何隐藏和/或阻止访问表单中的字段,例如有机组的group_audience
这一直困扰着我一段时间。.当我尝试从表单中隐藏诸如组受众字段或发布设置之类的字段时,在验证时,将这两个字段都设置为空值,即使默认值是已正确声明。 我尝试使用Invisible,#access,unset hidden无效!这很麻烦,因为对于我当前的项目,用户当时只能编辑其个人资料的一小部分,例如仅编辑地址或图片,因此,如果我隐藏组观众,则用户最终会被逐出他所属的组编辑。 我最终使用下面的代码隐藏了这些字段,同时仍将用户保留在他们的组中。 $variables['user_edit_about']['group_audience']= $temp['group_audience']; $variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">'; $variables['user_edit_about']['group_audience']['#suffix'] = '</div>'; 有人会想到一种更好的方法来实现这一目标吗? 谢谢

1
如何在Drupal 8中使用#element_validate和#value_callback
我遵循了官方的Form API文档,但是此代码在Drupal 8上对我不起作用: public function buildForm(array $form, FormStateInterface $form_state) { $form['upload'] = array( '#title' => t('Upload Images'), '#type' => 'managed_file', '#upload_location' => 'public://image_example_images/', '#element_validate' => array('file_generic_settings_max_filesize'), ); return $form; } private function file_generic_settings_max_filesize($element, &$form_state) { form_error($element, 'This is an error.'); } 我试图通过$ form_state-> setErrorByName()替换form_error(),但存在相同的问题,文件已上传且未调用验证。 请问您有解决方案吗?#element_validate的文档已过时? 我的目标:上传大量图像,使用自定义验证,然后将所有图像缩略图插入,并在<div class="preview"></div>其中为每个图像命名。 示例:( 上传后,显示缩略图和标题字段以命名所有图像) 否则,在上传之后,要显示每个图像的缩略图和其他字段(标题和描述),我需要使用#value_callback,#process,#attached(在上传后管理字段/使用js显示)或其他选项,请吗? …
9 8  forms 

2
如何更改“ form_set_error”输出的位置?
Drupal 7中有没有一种方法可以更改输出的位置form_set_error? 此刻,它调用drupal_set_message将所有表单错误排队到屏幕顶部。 相反,我希望每个消息都显示在相应字段的下方。 如果无法做到这一点,是否可以在不使用MODULE_form_name_validate()功能的情况下手动将表单标记为“无效” form_set_error?
9 7  forms 

4
提交Drupal表单后如何打印结果?
我有一个简单的Drupal模块设置,其中只有一个文本框。 我可以使用以下命令返回在文本框中键入的内容drupal_set_message(): function firstmodule_form1_submit($form, &$form_state) { drupal_set_message(t("The user is $username")); } 但是echo $username;对我不起作用,什么也没打印。不使用该如何返回结果drupal_set_message()?
9 forms 


2
需要向选择列表中添加HTML字符
我有一个使用FAPI的表单,该表单具有一个选择的货币值列表作为其输入之一。我需要能够添加HTML字符,例如€ $pound; ¥ 问题在于Drupal正在过滤输入,并且不显示所需的符号,而是显示如上所示的实际html代码。 有没有办法让Drupal不过滤我的列表?
9 forms  theming 

5
使用Form API上传后预览图片
我使用managed_fileForm API类型上传了图像文件,但上传图像后,该文件未显示为该字段旁边的缩略图。呈现的是图像的文件名,带有指向图像的链接和一个小图标。 上传图像后如何显示图像的缩略图(如来自核心“图像”字段的图像预览)? 另外,如何在其旁边显示默认图像(如果具有默认值)? 这是我的代码: $form['logo'] = array( '#title' => t('Logo'), '#type' => 'managed_file', '#required' => TRUE, '#default_value' => variable_get('logo', ''), '#upload_location' => 'public://', '#upload_validators' => array( 'file_validate_extensions' => array('gif png jpg jpeg'), 'file_validate_size' => array(0.3*1024*1024), )
9 7  forms  files 

5
防止多次提交表单(服务器端)
我遇到了一个问题,用户可以多次提交由Form API构建的任何表单(快速单击会导致多个请求)。 我已经提供了禁用按钮的基本客户端(javascript)解决方案,但是我很好奇防止这种情况的最佳方法是在服务器端。 有没有推荐的方法来使用Drupal的表单令牌系统来处理此问题?特别是全局表单解决方案(即,使用hook_form_alter()向每个表单添加自定义验证器)。 到目前为止,我的方法一直是这样的: function mymodule_form_alter(&$form, &$form_state, $form_id) { $form['#validate'][] = 'mymodule_form_validate'; } function mymodule_form_validate(&$form, &$form_state){ //initialize form array if (!isset($_SESSION['submitted_forms'])){ $_SESSION['submitted_forms'] = array(); } $form_token = $form_state['values']['form_token']; if ( isset($_SESSION['submitted_forms'][$form_token]) && $_SESSION['submitted_forms'][$form_token] = TRUE ){ form_set_error('name]', 'This form has already been submitted'); } else{ $_SESSION['submitted_forms'][$form_token] = TRUE; } …
9 forms 

4
如何使表单按钮仅调用javascript?
我正在尝试使用JavaScript和Drupal表单。目前,我正在尝试以模块的管理形式创建一个按钮,该模块将使用JavaScript将选项附加到选择列表中。我遇到的问题是,当我单击按钮时,我的JavaScript会被调用,但整个表单会刷新。我查看了Forms API参考,认为可以在按钮上设置某种属性来阻止它,但是什么也没找到。有什么办法可以阻止按钮刷新页面,或者这是死路一条? $form['#attached']['js'] = array( drupal_get_path('module', 'test').'/js/test.js', ); $form['list'] = array( '#type' => 'select', '#options' => array(), '#attributes' => array( 'name' => 'sellist', ), '#size' => 4, ); $form['add_button'] = array( '#type' => 'button', '#value' => 'Add', '#attributes' => array( 'onclick' => "add_to_list(this.form.sellist, 'Append' + this.form.sellist.length);", ), ); //JavaScript function …
9 7  forms  javascript 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.