【问题标题】:Drupal 7 Custom Submit Handler with Views and Commerce具有视图和商务的 Drupal 7 自定义提交处理程序
【发布时间】:2012-11-16 03:22:20
【问题描述】:

目前我有一个使用 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 比较陌生,希望有人能对此有所了解。非常感谢您的帮助!

【问题讨论】:

    标签: php drupal-7 drupal-views drupal-forms drupal-commerce


    【解决方案1】:

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

    【讨论】:

    • 就我而言,我必须在提交处理函数中完成所有这些工作,并且运行良好。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我发现钩子名称有问题

      自定义_form_submit_form_alter

      my_custom_handler_submit

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

      希望对你有帮助

      公关

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多