2012-11-16 49 views
0

目前我有一个产品页面使用视图和Drupal商业模块与产品类别(暴露过滤器)的排序功能。带下拉列表/选择列表的表单具有GET方法,因此类别ID将附加到URL中。我的目标是获取附加到URL的类别ID,并将用户重定向到特定的产品页面,而不是只在URL的末尾添加类别ID。Drupal 7自定义提交处理视图和商业

我已经搜索了关于这个问题的答案,但他们都没有工作。所以我做的是我创建了一个实现hook_form_alter模块的自定义模块。我想向窗体添加一个自定义提交处理程序,以便在第一次提交表单后,会触发另一个提交,以便从URL中检索类别标识,然后将用户重定向到特定页面。我的代码如下模块。

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'; 
     } 
} 

第一个功能可以作为它的返回,当我做KPR($形式)形式的值启用devel模块。第二个函数似乎并没有被触发。我一直坚持这几天,经过大量的研究后我无法弄清楚。我对Drupal比较陌生,希望有人能够对此有所了解。非常感谢您的帮助!

回答

0

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

0

我看问题挂钩名

定制 _form_submit_form_alter

my_custom _handler_submit

我不知道至极一个是好的,但他们应该是相同的

希望它有帮助

PR

0

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

$temp = $form['#submit'][0]; 
$form['#submit'][0] = 'my_custom_handler_submit'; 
$form['#submit'][1] = $temp;