我最初是在另一个帖子中启动了这个问题,但是那个帖子是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;
答案 0 :(得分:7)
hook_form_alter()
可能是要走的路。
以下是一些有用的链接:
Form Theming: How do I set $form['action']?
Modifying Forms in Drupal 5 and 6
编辑:回复下面的评论#1:
如何实施hook_form_alter():
您必须创建一个模块(不能使用template.php
)。它比它看起来容易。
对于名为“formstuff”的模块,您可以创建formstuff.info
和formstuff.module
并将其放入sites/all/modules
或sites/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
函数放入模块中,然后使用if
或switch
来检查表单ID。如果表单ID是您要更改的表单ID,则为表单提供操作属性
$form['someID'] = array(
'#action' => 'path/you/want',
);