表格提交上的Drupal 7 Form API运行功能

时间:2013-03-11 02:33:17

标签: drupal-7 drupal-forms

我已经创建了一个自定义模块,我需要收集信息并在填写并提交表单时运行一个函数。

它有两个文本区域和一个按钮。

这就是我在页面上显示的内容:

档案:myFunction.admin.inc

function myFunction_form($form)
{

    $form['pages'] = array(
    '#type' => 'fieldset',
    '#title' => t('Data'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
  );

    $form['pages']['title'] = array(
    '#type'          => 'textarea',
    '#title'         => t('Title'),
    '#rows'          => 5,
    '#resizable'    => FALSE,
  );

  $form['pages']['body'] = array(
    '#type'          => 'text_format',
    '#title'         => t('Body'),
    '#rows'          => 5,
    '#resizable'    => FALSE,
    '#format' => 'full_html',
  );

  $form['submit'] = array('#type' => 'submit', '#value' => t('Run Function'));

    myFunction($form);
    return $form;

}

function myFunction()
{
//This is where I use the data collected from my form and do what I need to do.
}

所以我遗漏的东西形成了这个(请告诉我,如果我对此有错误的方法)是我需要验证表格是否已填写并返回错误消息,如果没有。

如果填写了表单然后将字段数据正确传递给我的函数,我只需在function myFunction()之前添加return $form;即可,但这似乎是错误的方法。如果表单中存在错误,我不希望myFunction()运行。

有人可以帮我解决我的自定义模块的最后一部分。

请注意,此模块不会将anythig添加到数据库中。

再次,请告诉我,我是否会采取错误的方式。

3 个答案:

答案 0 :(得分:1)

您应该遵循表单API使用的标准命名结构。如果你的功能是:

myFunction_form(),

然后

提交执行任何验证时,将调用

myFunction_form_validate()。如果一切都过去了,那么

将调用myFunction_form_submit()。您应该在提交中放置提交逻辑(或调用自定义函数)。

这是设置$ form ['#submit'] []和$ form ['#validu'] []的首选行为。

有关其工作原理的简单示例,请参阅Examples Module

答案 1 :(得分:0)

是的,你可能走错了路。 您必须添加自定义验证器并提交

等功能
<?php

$form['#submit'][] = my_submit_callback
$form['#validate'][] = my_validator_callback


function my_submit_callback($form, &$form_state) {
  // form_state array contains the submitted values
}
function my_validator_callback($form, &$form_state) {
  // form_state array contains the submitted values
  if ($form_state['values']['body'] == '') {
   form_set_error(...)
}
}

and ofcourse从form_builder函数中删除myFunction()调用

答案 2 :(得分:0)

以这种方式接近:

$form['#validate'][] = 'myCustomValidateFunction';
$form['#submit'][]   = 'myCustomSubmitFunction';

function myCustomValidateFunction($form, &$form_state) { 
  \\if validation was not passed use form_set_error()
}

function myCustomSubmitFunction($form, &$form_state) { 
   //submit logic, $form_state includes the values
}