【问题标题】:Drupal how to redirect node form after form submissionDrupal如何在表单提交后重定向节点表单
【发布时间】:2012-06-01 10:53:42
【问题描述】:

在 Drupal 7 上,当我发布一个节点时,我会重定向到创建的特定节点。

当我正确发布节点时,我正在搜索重定向到主管理页面。

我试图把它放在 template.php 上:

function node_submit($form, &$form_state) {
  $form_state['redirect'] = 'admin';
}

但是提交时出错:

致命错误:无法在 /var/www/XXX/sites/all/themes/XXX/template 中重新声明 node_submit()(之前在 /var/www/XXX/modules/node/node.module:1004 中声明)。第xx行的php

【问题讨论】:

    标签: php drupal drupal-7


    【解决方案1】:

    如果您只想更改用户在提交添加节点表单后从特定链接重定向到的位置,那么有一种更简单的方法。

    让你的链接看起来像这样:

    /node/add/[CONTENT-TYPE]?destination=[URL-REDIRECT]
    

    这是我开始工作的一个例子:

    /node/add/ic-competencies-toolkit-codes?destination=admin/survey-codes
    

    【讨论】:

      【解决方案2】:

      这对我有用:

      function mymodule_form_FORM_ID_alter(&$form, $form_state){
          $form['actions']['submit']['#submit'][] = 'mymodule_redirect_callback';
      }
      
      function mymodule_redirect_callback($form, &$form_state){
          $form_state['redirect'] = '_path_';
      }
      

      需要注意的重要一点是:

      $form['actions']['submit']['#submit'][] = 'some_function';
      

      会起作用,但是

      $form['#submit'][] = 'some_function';
      

      不会

      【讨论】:

      • 如何在 D8 中做到这一点?
      【解决方案3】:

      或者,如果您不想编写代码,请尝试使用规则模块:http://drupal.org/project/rules

      添加新规则并将“事件响应”设置为“保存新内容后”。

      将操作设置为:“系统:页面重定向”并正确填写字段。

      如果您希望将此规则放入代码中,可以将它们导出到模块中!

      【讨论】:

        【解决方案4】:

        您可以使用hook_form_alter() 来执行此操作。

        function YOUR_MODULE_form_alter(&$form, &$form_state, $form_id)
        {
          if ($form_id == "CONTENT_TYPE_node_form") {
            $form['#redirect'] = "node";
          }
        }
        

        希望这行得通。

        【讨论】:

          【解决方案5】:

          在 Drupal 7 中这是正确的方法:

          function mymodule_form_alter(&$form, &$form_state, $form_id) {
            if($form_id === 'myform_id'){
              $form['#submit'][] = '_mymodule_redirect_callback';
            }
          
          function _mymodule_redirect_callback($form, &$form_state) {
            $form_state['redirect'] = 'http://www.google.ch';
          }
          

          【讨论】:

            【解决方案6】:

            重定向评论表单或节点表单的最简单方法

            case 'my_node_form':
                    $form['#action'] .= '?destination=well-done';
                  break;
            

            请注意“。”在 $form['#action']

            之后

            你需要追加而不是替换!

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-04-13
              • 1970-01-01
              • 2015-09-18
              相关资源
              最近更新 更多