如何在Drupal中覆盖表单操作?

时间:2009-10-15 06:04:03

标签: drupal forms action drupal-fapi drupal-alter

我最初是在另一个帖子中启动了这个问题,但是那个帖子是sorta,有点回答,现在我主要想知道如何指定另一个表单动作...我尝试使用下面的代码,但表单动作,当输出,保持不变,虽然看print_r($form),但是它已经正确改变了...为什么它没有恢复?

function mytheme_user_profile_form($form) {
        global $user;
        $uid = $user->uid;
        //print '<pre>'; print_r($form); print '</pre>';
    $category = $form['_category']['#value'];

    switch($category) {
            case 'account':
                $form['#action'] = '/user/'.$uid.'/edit?destination=user/'.$uid;
                        break;
        case 'education':
                        $form['#action'] = '/user/'.$uid.'/edit/education?destination=user/'.$uid;
                        break;
        case 'experience':
                        $form['#action'] = '/user/'.$uid.'/edit/experience?destination=user/'.$uid;
                        break;
            case 'publications':
                        $form['#action'] = '/user/'.$uid.'/edit/publications?destination=user/'.$uid;
                        break;
        case 'conflicts':
                        $form['#action'] = '/user/'.$uid.'/edit/conflicts?destination=user/'.$uid;
                        break;
    }

        //print '<pre>'; print_r($form); print '</pre>';
        //print $form['#action'];
        $output .= drupal_render($form);
        return $output;

2 个答案:

答案 0 :(得分:7)

hook_form_alter()可能是要走的路。 以下是一些有用的链接:

Form Theming: How do I set $form['action']?

Modifying Forms in Drupal 5 and 6

hook_form_alter

编辑:回复下面的评论#1:

如何实施hook_form_alter()

您必须创建一个模块(不能使用template.php)。它比它看起来容易。

对于名为“formstuff”的模块,您可以创建formstuff.infoformstuff.module并将其放入sites/all/modulessites/yoursitename/modules。按the instructions设置.info和.module文件,然后在.module文件中创建以下函数:

function formstuff_form_alter(&$form, $form_state, $form_id) {
  // do stuff
}

这个函数是一个钩子,因为它被正确命名(即用模块名称替换'hook'一词),它匹配hook_form_alter的函数签名(即它采用相同的参数)。

然后只需在您网站的管理员中启用您的模块,钩子就应该做到这一点。

请注意,hook_form_alter会引用表单;这允许您就地修改它。

答案 1 :(得分:1)

您需要将form_alter函数放入模块中,然后使用ifswitch来检查表单ID。如果表单ID是您要更改的表单ID,则为表单提供操作属性

$form['someID'] = array(
'#action' => 'path/you/want',
);