linlu11 的博客

drupal表单实例:生成表单、提交、验证、写入数据库步骤转自www.cmsns.com

     

  • 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://097633.blogbus.com/logs/31448364.html

    Drupal表单很强大,在自行扩展中经常会用到,下面就是一个简单的form代码,从表单定义,到验证和提交。

    <?php
    //test_form函数中定义表单,drupal定义了一些常用格式,文本、下拉、单选、多选、上传等。
    function test_form(&$form_state){//传递表单参数
    $form['title'] = array(
    '#type'=> 'textfield',
    '#title' => '主题',
    '#default_value' => 11111,//默认值
    '#maxlength' => 128,//长度
    );
    $form['body'] = array(
    '#type' => 'textarea',
    '#title' => '内容',
    '#default_value' => '中华人民共和国',
    '#cols' => 40,
    '#rows' => 6
    );
    $form['select'] = array(
    '#type' => 'radios',
    '#title' => '网站协议',
    '#default_value' => 1,
    '#options' => array('我同意', '我不同意'),//单选项,若不指定值,则自动从0开始计算: 0 -> 我同意, 1 -> 我不同意。
    );
    $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来接收表单传递过来的值,$form_state['values']['select']等于$form['select'].
    if($form_state['values']['select']){
    form_set_error('select', '你必须同意网站协议。');
       }
    if($form_state['values']['title'] == '' && $form_state['values']['body'] == '' ){
    form_set_error('title', '标题和正文不能为空。');
    }
    }
    function test_form_submit($form, &$form_state) {//接收表单参数
    //利用$form_state来接收表单传递过来的值。执行写入数据库,或者其它操作
    db_query('INSERT INTO {test} (title, body) VALUES (%d, %d)', $form_state['values']['title'], $form_state['values']['body']);
    }
    ?>

    Drupal调用表单有两种方法,第一种是在页面内直接调用:

    <?php
    print drupal_get_form('test_form');
    ?>

    另一种是在menu里通过url调用,大致如下:

    <?php
    $items['test/form'] = array(
    'title' => '表单测试',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('test_form'),
    'type' => MENU_LOCAL_TASK,
    );
    ?>

    在表单调用里也可以传递参数,比如:

    <?php
    print drupal_get_form('test_form', $node);
    //表单函数上就可以接收到了。
    function test_form(&$form_state, $node){//
    //.......
    ?>

posted on 2009-12-16 22:42  linlu11  阅读(1949)  评论(0编辑  收藏  举报

导航