0

目前我有一个使用 Views 和 Drupal Commerce 模块的产品页面,该模块具有产品类别的排序功能(公开过滤器)。带有下拉列表/选择列表的表单有一个 GET 方法,因此类别 ID 会附加到 URL。我的目标是获取附加到 URL 的类别 ID 并将用户重定向到特定的产品页面,而不是仅将类别 ID 附加到 URL 的末尾。

我已经用谷歌搜索了有关此问题的答案,但没有一个有效。所以我所做的是我创建了一个自定义模块来实现 hook_form_alter 模块。我想向表单添加一个自定义提交处理程序,以便在第一次提交表单后,触发另一个提交以便从 URL 检索类别 ID,然后将用户重定向到特定页面。我的模块代码如下。

function custom_form_submit_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id == 'views_exposed_form') { 
         $form['#submit'][] = 'my_custom_handler_submit';
    }   
}


function my_custom_handler_submit(&$form, &$form_state) {
    if ($_GET['field_categories_tid'] == 13) {
         $form_state['redirect'] = '/products/furnitures';
         }
}

当我在启用 Devel 模块的情况下执行 kpr($form) 时,第一个函数会返回表单的值。第二个功能似乎根本没有被触发。我已经坚持了几天,经过大量研究后我真的无法弄清楚。我对 Drupal 比较陌生,希望有人能对此有所了解。非常感谢您的帮助!

4

3 回答 3

1

我想我已经解决了这个问题。如果将来有人遇到同样的问题,这就是我所做的。我的自定义提交处理程序从未被触发,因为 $form_state['no_redirect'] 默认设置为 TRUE。所以我做了一个条件语句,如果 URL 包含类别 ID,$form_state['no_redirect'] = FALSE。然后触发我的自定义提交处理程序。我希望这有帮助。

于 2012-11-16T21:27:59.113 回答
0

我发现钩子名称有问题

自定义_form_submit_form_alter

my_custom _handler_submit

我不知道哪个是好的,但它们应该是一样的

希望能帮助到你

公关

于 2012-11-16T18:42:07.970 回答
0

在您的函数之前运行的默认提交函数可能会重定向或无法跳转到您通过 form_alter 附加的函数。您可以通过首先调用您的函数来排序

$temp = $form['#submit'][0];
$form['#submit'][0] = 'my_custom_handler_submit';
$form['#submit'][1] = $temp;
于 2012-11-16T18:58:05.837 回答