在Drupal6的一份form表单中完成创建和更新,主要使用一个标志位或者标志字符串来判断其是创建(save)还是更新(update)
我的模块叫credit,首先在菜单menu中写个指向新建的链接,如下:
//创建 $items ['credit/create'] = array ( 'title' => t('create info'), 'page callback' => 'credit_create', 'access callback' => true, 'type' => MENU_CALLBACK, );
之后写这个指向的credit_create方法,如下:
/** * 创建信息 */ function credit_create(){ $action = 'save'; //$action变量传递给form以区别是新建还是更新动作 $output = drupal_get_form('credit_my_form',$action); return $output; }
方法中的action变量很重要,标识你接下来的表单中到底完成哪部分的操作,接下来调用drupal_get_form方法建立表单,action参数要传入form方法中,接下来看form方法:
/** * 表单 * */ function credit_my_form(&$form_state,$action,$id=""){ $submitname = ''; //以此变量甄别是新增还是更新 $form['submit_options'] = array( '#id' =>'submitoptions', '#type' => 'hidden', '#value' => $action ); switch ($action){ //新增操作 case "save": $submitname = t("提交"); break; //更新操作 case "update": $submitname = t("更新"); // $sql = 'SELECT * from ..............where id =%d'; // $result=db_query($sql,$id); // while($links = db_fetch_object($result)){ // $title = $links->title; // } break; } $form['title'] = array( '#title' => t('标题'), '#type' => 'textfield', '#maxlength' => 50, '#size' => '50', '#required' => TRUE, '#default_value'=>$title, ); $form['submit'] = array( '#type' => 'submit', '#value' => t($submitname) ); return $form; }
表单方法中首先将传入的action变量赋给一个hidden元素,来给后面的验证和提交做功能区分,之后的switch语句判别是提交还是更新,这里做创建动作。
紧接着是表单的验证和提交,如下:
/** * 表单验证 * * @param $form * @param $form_state */ function credit_my_form_validate($form, &$form_state){ if($form_state['values']['submit_options']=='save'){ /*新建验证*/ } if($form_state['values']['submit_options']=='update'){ /*编辑更新验证*/ } } /** * 表单提交 * * @param $form * @param $form_state */ function credit_my_form_submit($form, &$form_state){ if($form_state['values']['submit_options']=='save'){ /*新建提交*/ drupal_set_message(t('创建成功!')); }else if($form_state['values']['submit_options']=='update'){ /*编辑提交*/ drupal_set_message(t('编辑成功!')); } }
这里传入的submit_options表单元素就可以辨别表单到底是提交还是更新,分别写在各自的地方,就可以完成新建提交的工作,同样道理我们写更新功能,菜单中需要传入待更新信息记录的id,如下:
//编辑 //传入待编辑的号 $items ['credit/edit/%'] = array ( 'title' => t('create info'), 'page callback' => 'credit_edit', 'page arguments' => array(2), 'access callback' => true, 'type' => MENU_CALLBACK, );
然后看此链接访问的方法credit_edit:
/** * 编辑更改信息 * * @param $id 记录id */ function credit_edit($id){ $action = 'update'; //$action变量传递给form以区别是新建还是更新动作 $output = drupal_get_form('credit_my_form',$action,$id); return $output; }
这时action变量是update,传入form后会执行相应的编辑动作,当然之前要完成取出老记录的动作,可放在switch的update部分来做,传入的id参数很重要,之后取出的值会放到表单元素的#default_value属性。
之后和新建一样,只不过过程都会走“update”标识的处理。
这样就在一份form表单中完成了创建save和编辑update两个功能,小生不才,如有纰漏,请多指教