Как переопределить действие формы в 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
РЕДАКТИРОВАТЬ: ответ на комментарий № 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',
);