上次讲到只是修改页面元素,但是页面中对于增加的元素提交之后是不会进行任何处理的。那么该如何修改以后的处理事件呢?
对于Drupal6,只需要简单删除原有的方法,或者增加自己定义的处理方法既可。
如下所示:
- /**
- * Implementation of hook_form_alter();
- *
- * Modify the user login block
- *
- * @author Roy (2009/1/4)
- *
- * @param $form_id
- * @param $form
- */
- function register_form_alter($form, $form_state, $form_id) {
- //drupal_set_message($form_id);
- // We'll get called for every form Drupal builds; use an if statement
- // to respond only to the user login block and user login forms.
- $admin = user_access('administrator users');
- if ($form_id == 'user_login_block' || $form_id == 'user_login') {
- //modify the user login title
- drupal_set_title(t("Log in"));
- // Change 'Log in' to 'Sign in'.
- $form['submit']['#value'] = t('Sign in');
- } else if($form_id == 'user_register') {
- if ($admin) {
- $form['account']['user_type'] = array(
- '#type' => 'radios',
- '#title' => t('User Type'),
- '#default_value' => isset($edit['user_type']) ? $edit['user_type'] : 0,
- '#options' => array(t('Customer'), t('Account'))
- );
- //add the submit for the user register
- $form['#submit'][] = 'my_register_submit';
- } else {
- $form['name']['#title'] = 'Name';
- $form['pass'] = array(
- '#type' => 'password_confirm',
- '#required' => TRUE,
- );
- $form['#submit'] = array('user_register_submit2');
- }
- }
- }
如上面的例子,修改用户注册($form_id == 'user_register')。
当用户为admin时,将默认提交事件增加'my_register_submit',否则将默认提交事件改为'user_register_submit2'。