代码之家  ›  专栏  ›  技术社区  ›  acm

如何将Drupal表单提交到任何其他内部页面?

  •  0
  • acm  · 技术社区  · 14 年前

    我有这个表格:

    <?php
    function mymodule_myform(){
      $form['#action'] = url('search/cards');
      $form['whatwhere']['what'] = array(
        '#type' => 'textfield',
        '#title' => t('What?'),
        '#maxlength' => 80,
        '#required' => TRUE,
      );
      $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Search'),
      );
    }
    ?>
    

    你可以看到,它应该把所有信息提交给 www.example.com/search/cards 这确实会将我的表单提交到所需的URL。但是,如果没有 mymodule_menu() 定义路径的钩子,它将以404结尾。

    所以我补充说:

    <?php
    function mymodule_menu(){
      $items['search/%'] = array(
        'title'  => t('Search Results'),
        'page callback' => 'mymodule_main',
        'access arguments' => array('access content'),
        'file' => 'mymodule.inc',
        );
    }
    ?>
    

    还有,在 mymodule.inc 文件我将创建我的函数 mymodule_main()

    <?php
    function mymodule_main(){
      print_r($_POST);
      die(); // ### Note the die(); ###
    
      return 'Just searched: '. $_POST['what'];
    }
    ?>
    

    如果我保持原样,当然PHP会在屏幕上打印表单信息后立即结束脚本执行。一切顺利!

    但是,如果我删除 die() 我的模块菜单() 以某种方式重写表单提交处理程序正在执行的操作。。。

    问题是:

    提前谢谢。

    3 回复  |  直到 14 年前
        1
  •  1
  •   mpdonadio    14 年前

    我认为你需要使用 http://api.drupal.org/api/function/search_box_form_submit/6

    
    function MODULE_block_form_submit($form, &$form_state)  
    {  
        if (isset($_REQUEST['destination'])) {  
            unset($_REQUEST['destination']);  
        }
    
        if (isset($_REQUEST['edit']['destination'])) {  
            unset($_REQUEST['edit']['destination']);  
        }  
    
        $form_state['redirect'] = 'search/cards/'. trim($form_state['values']['whatwhere']);  
    }
    
        2
  •  0
  •   galymzhan    14 年前

    我不太清楚,但也许你的代码和drupal的内置代码有冲突 搜索

        3
  •  0
  •   acm    14 年前

    在一些辩论之后@drupal论坛( which can be followed here 这不是对菜单回调的一个帖子,但它已经很好了。

    谢谢你的帮助。