1

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

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

这就是我所拥有的,在页面上显示得很好:

文件: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()如果表单存在错误,我不希望运行。

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

请注意,此模块不会向数据库添加任何内容。

再次,请告诉我我是否走错了路。

4

3 回答 3

1

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

myFunction_form(),

然后

myFunction_form_validate() 将在提交以执行任何验证时被调用。如果一切都过去了,那么

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

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

有关其工作原理的简单示例,请参见示例模块

于 2013-05-30T17:34:43.717 回答
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
}
于 2013-03-11T14:49:24.177 回答
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(...)
}
}

当然从你的 form_builder 函数中删除 myFunction() 调用

于 2013-03-11T14:47:15.727 回答