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']を設定するにはどうすればよいですか?

Drupal5および6でのフォームの変更

hook_form_alter

編集:以下のコメント#1に返信してください:

hook_form_alter()を実装する方法

モジュールを作成する必要があります(使用できませんtemplate.php)。見た目よりも簡単です。

「formstuff」という名前のモジュールの場合、それらを作成formstuff.infoして、またはformstuff.moduleのいずれかに配置しsites/all/modulesますsites/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関数をモジュールに入れてから、ifまたはswitchを使用してフォームIDを確認する必要があります。フォームIDを変更する場合は、フォームにアクションプロパティを指定します

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