Как переопределить действие формы в Drupal?

Я изначально начал этот вопрос в другом потоке, но этот поток был своего рода, вроде как ответил, и теперь я в первую очередь хочу знать, как указать другое действие формы... Я попытался использовать код ниже, но действие формы при выводе остается без изменений, хотя глядя на 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 ответа

Решение

hook_form_alter() скорее всего, путь. Вот некоторые, надеюсь, полезные ссылки:

Формирование темы: Как мне установить $form['action']?

Модификация форм в Drupal 5 и 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_form_alter сигнатура функции (т.е. она принимает те же параметры).

Затем просто включите ваш модуль в админке вашего сайта и хук должен сделать это волшебно.

Обратите внимание, что hook_form_alter принимает ссылку на форму; это позволяет вам изменить его на месте.

Вам нужно поставить form_alter функция в модуле, а затем использовать либо if или же switch проверить идентификатор формы. Если вы хотите изменить идентификатор формы, присвойте форме свойство действия

$form['someID'] = array(
'#action' => 'path/you/want',
);
Другие вопросы по тегам