Drupal节点内容加入自定义表单
如果想在Drupal节点中加入自定义表单,并进行表单验证,表单提交等操作,这样需要用到PHP代码片段。
模块要求
PHP filter
允许嵌入PHP代码/片段并运行。
演示测试表单
第一步,创建任何一种节点类型,比如页面。
第二步,在内容部分输入代码:
<?php
//test_form函数中定义表单,drupal定义了一些常用格式,文本、下拉、单选、多选、上传等。
function test_form(&$form_state){
//传递表单参数
$form['test'] = array(
‘#type’=> ‘textfield’,
‘#title’ => ‘测试表单’,
‘#default_value’ => ”,//默认值
‘#maxlength’ => 128,//长度
‘#required’ => TRUE,
);
$form['#validate'][] = ‘test_form_validate’;//调用验证函数
$form['submit'] = array(
‘#type’ => ‘submit’,
‘#value’ => ‘提交’,
‘#submit’ => array(‘test_form_submit’),//调用提交函数
);
return $form;
}function test_form_validate($form, &$form_state) {
//接收表单参数
//验证函数
//利用$form_state来接收表单传递过来的值进行验证。
if($form_state['values']['test'] != ‘test’ ){
form_set_error(‘test’, ‘错误信息写在这里。’);
}
}function test_form_submit($form, &$form_state) {
//接收表单参数
//利用$form_state来接收表单传递过来的值。执行写入数据库,或者其它操作
//插入数据库
// db_query("INSERT INTO {test_table}");
//发送邮件
// mail($to, $subject, $message, $headers);
}
print drupal_get_form(‘test_form’);
?>
第三步,输入格式选择PHP code,你可以发布PHP代码。应该包括<?php ?>标签。
第四步,提交。
你可以对以上代码继续修改来完成一个自定义的用户注册!
自定义用户注册表单
代码片段:
<?php
function lixiphp_custom_register_form($form,&$form_state){
$form['title'] = array(
‘#type’=> ‘textfield’,
‘#title’ => ‘姓名’,
‘#default_value’ => ”,//默认值
‘#maxlength’ => 128,//长度
‘#required’ => TRUE,
);
$form['email'] = array(
‘#type’=> ‘textfield’,
‘#title’ => ‘电子邮件’,
‘#default_value’ => ”,//默认值
‘#maxlength’ => 128,//长度
);
$form['telephone'] = array(
‘#type’=> ‘textfield’,
‘#title’ => ‘电话’,
‘#default_value’ => ”,//默认值
‘#maxlength’ => 128,//长度
);
$form['address'] = array(
‘#type’=> ‘textfield’,
‘#title’ => ‘邮寄地址’,
‘#default_value’ => ”,//默认值
‘#maxlength’ => 128,//长度
);
$form['body'] = array(
‘#type’=> ‘textfield’,
‘#title’ => ‘备注’,
‘#default_value’ => ”,//默认值
‘#maxlength’ => 128,//长度
);
$form['select'] = array(
‘#type’ => ‘radios’,
‘#title’ => ‘网站协议’,
‘#default_value’ => 1,
‘#options’ => array(‘我同意’, ‘我不同意’),//单选项,若不指定值,则自动从0开始计算: 0 -> 我同意, 1 -> 我不同意。
‘#required’ => TRUE,
);
$form['#validate'][] = ‘lixiphp_custom_register_form_validate’;
$form['submit'] = array(
‘#type’ => ‘submit’,
‘#value’ => ‘提交’,
‘#submit’ => array(‘lixiphp_custom_register_form_submit’),
);
return $form;
}function lixiphp_custom_register_form_validate($form, &$form_state) {
if($form_state['values']['select']){
form_set_error(‘select’, ‘你必须同意网站协议。’);
}
if($form_state['values']['email'] == ” && $form_state['values']['telephone'] == ” ){
form_set_error(‘title’, ‘电子邮件和电话不能同时为空。’);
}
}function lixiphp_custom_register_form_submit($form, &$form_state) {
//利用$form_state来接收表单传递过来的值。执行写入数据库,或者其它操作
db_query(‘INSERT INTO {users_fields} (name,email,telephone,address,memo) VALUES ("%s","%s","%s","%s","%s")’, $form_state['values']['title'], $form_state['values']['email'], $form_state['values']['telephone'],$form_state['values']['address'], $form_state['values']['body']);
}
print drupal_render(drupal_get_form(‘lixiphp_custom_register_form’));
?>
这只是一个简单的演示注册的表单,你可以根据自己的需求来修改。
注意事项
- 在节点中使用PHP代码非常危险,一定要控制好权限问题;
- 在节点中使用PHP控制数据库也是非常不安全,尽量不要用来操作数据库。可以使用一些简单的php语法;
- 在节点中的PHP代码运行在render主题之前,所以其运行效果和在模块中是一样的;

浙公网安备 33010602011771号