我在提交表单后尝试重定向页面。表格在页面'formulaires / demande-de-subvention-pour-les-entraineurs',我想重定向'公式/ demande-de-subvention-pour-les-entraineurs / entraineurs'我怎么能这样做?
function ulsform_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'ulsform_demande_de_subvention_pour_les_entraineurs_form') {
$form['#submit'][] = 'ulsform_demande_submited_form';
}else if($form_id == 'ulsform_demande_de_subvention_pour_les_entraineurs_02_form'){
$form['#submit'][] = 'ulsform_entraineur_submited_form';
}
}
function ulsform_demande_submited_form(&$form, $form_state){
global $user;
$v = $form_state['values'];
$form_state['redirect'] = 'formulaires/demande-de-subvention-pour-les-entraineurs/entraineurs';
/* My code to insert into the db */
}
它不起作用,当我尝试在另一个帖子上创建一个类似锯子的表单['#redirect']时,它也不起作用。我该怎么办?
感谢您的帮助!我是drupal的新手
答案 0 :(得分:16)
您忘记通过引用传递$form_state
,因此您的更改仅适用于form_alter
函数。
按如下方式更改功能签名。注意&$form_state
:
function ulsform_form_alter(&$form, &$form_state, $form_id) {
$ form_state ['redirect']可以是数组或简单字符串。 如果它是一个字符串,用户将被重定向到那里。 如果它是一个数组,它将根据drupal_goto的工作方式工作。
$form_state['redirect'] = array(
'node/123',
array(
'query' => array(
'foo' => 'bar',
),'fragment' => 'baz');
至node/123?foo=bar#baz
$form_state['redirect'] = 'node/123'
到node/123
答案 1 :(得分:0)
我在自定义模块中有以下代码,在编辑内容后,它总是重定向到/ admin / content
function redirect_to_edit_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "page_article_node_form") {
$form['#submit'][] = "_redirect_to_edit";
}
}
function _redirect_to_edit($form, &$form_state) {
$form_state['redirect'] = array(
'node/' . $form['nid']['#value'],
array(
'query' => array(
'destination' => 'node/' . $form['nid']['#value'],
)
)
);
dpm($form_state);
drupal_set_message("L'article a été mis à jour.", 'status');
}
我在上次尝试时添加的查询部分。 提交后我可以阅读我的自定义消息,但我无法让用户留在编辑页面。
我跳过什么?
感谢。
修改强>
关于https://www.drupal.org/node/1074616和我在该问题上的经验,有些情况下重定向不起作用。对我来说,我已经实现了这样的重定向:
function redirect_to_edit_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == "page_article_node_form") {
//$form['actions']['submit']['#submit'][] = '_redirect_to_edit';
$form['#action'] = '?destination=node/' . $form['nid']['#value'] . '/edit';
}
}