4

我最初在另一个线程中开始了这个问题,但是那个线程有点,有点回答,现在我主要想知道如何指定另一个表单动作......我尝试使用下面的代码,但是表单动作在输出时仍然存在没有改变,虽然看着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;
4

2 回答 2

7

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

表单主题:如何设置 $form['action']?

在 Drupal 5 和 6 中修改表单

hook_form_alter

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

如何实现 hook_form_alter()

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

对于名为“formstuff”的模块,您可以创建它们formstuff.info并将formstuff.module它们放入sites/all/modulesorsites/yoursitename/modules中。按照说明设置 .info 和 .module 文件,然后在 .module 文件中创建以下函数:

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

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

然后只需在您网站的管理员中启用您的模块,挂钩就可以发挥作用。

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

于 2009-10-15T20:01:13.310 回答
1

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

$form['someID'] = array(
'#action' => 'path/you/want',
);
于 2009-10-15T21:34:47.947 回答