我在drupal 6.19中尝试在提交到'alter location'然后用户页面后重定向'user / password'页面。
我在主题钩子中使用以获取预处理功能,在其中我将$ variables编辑为:
$variables['form']['#action'] = 'alter location';
然后我使用drupal_render()。
在drupal调试中我看到#action设置为'alter location'但是在 html标签我仍然看到action ='user / password',它不会将我重定向到所需的位置。提前致谢
答案 0 :(得分:1)
感谢comment
/**
* Implementation of hook_form_alter().
*/
function jm_form_alter(&$form, $form_state, $form_id) {
if (isset($form['#node']) && $form['#node']->type .'_node_form' == $form_id) {
$form['buttons']['submit']['#submit'][] = 'jm_redirect_handler';
}
}
/**
* Attaches the redirect to the submitted form.
*
* @param unknown_type $form
* @param unknown_type $form_state
* @return unknown
*/
function jm_redirect_handler($form, &$form_state) {
if ($form_state['nid']) {
// reloading as I do not know the node type context. You probably do not need to :), just set the redirect using $form_state['nid']
$node = node_load(array('nid' => $form_state['nid']));
switch($node->type) {
case 'project':
$form_state['redirect'] = 'projects/'. $node->nid;
}
}
}
我找到了有效的解决方案。
答案 1 :(得分:0)
在Drupal表单中的工作方式如下:用户请求包含表单的页面。函数创建构成该表单的结构化数组。此数组在主题图层中呈现。如果用户提交表单,Drupal会调用相同的例程来重新构建结构化数组。但现在它用于验证和处理用户输入。如果处理例程返回路径或设置了?destination
或#redirect
,Drupal会执行内部重定向。如果不是,则再次显示相同的表格。然后,只有那时你的代码在主题层执行。但是注入#redirect
要迟到了。 Drupal不会再看它了。
更改#action
毫无意义,因此用户输入被发送到Drupal菜单系统转换的URL,并调用不期望也不处理输入的例程。
尝试path redirect模块。如果不起作用,请按照instructions to create a custom module进行操作。
答案 2 :(得分:0)
感谢!!!
我通过使用来解决它 - > hook_form_FORM_ID_alter函数就像.... mymodulename_form_FORM_ID_alter
在这里看到link text
这就是我所做的,它为我完成了这项工作:
function mymodulename_form_FORM_ID_alter(& $ form){ $ form ['#action'] ='alter_location'; }