我已经创建了一个自定义模块,我需要收集信息并在填写并提交表单时运行一个函数。
它有两个文本区域和一个按钮。
这就是我在页面上显示的内容:
档案: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添加到数据库中。
再次,请告诉我,我是否会采取错误的方式。
答案 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
}