Drupal节点内容加入自定义表单

如果想在Drupal节点中加入自定义表单,并进行表单验证,表单提交等操作,这样需要用到PHP代码片段。

模块要求

PHP filter 
允许嵌入PHP代码/片段并运行。

演示测试表单

drupal node test form Drupal节点内容加入测试表单

第一步,创建任何一种节点类型,比如页面。

第二步,在内容部分输入代码:

<?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 ?>标签。

第四步,提交。

 

你可以对以上代码继续修改来完成一个自定义的用户注册!

自定义用户注册表单

lixiphp custom Drupal register form 自定义用户注册表单

代码片段:

<?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主题之前,所以其运行效果和在模块中是一样的;
posted @ 2014-05-14 15:24  堕落的惜花  阅读(446)  评论(0)    收藏  举报