【问题标题】:How do i get the data?(Drupal 6.x)我如何获取数据?(Drupal 6.x)
【发布时间】:2010-11-16 03:01:09
【问题描述】:

我有这个接受用户输入的表单。我喜欢做的是,基于该用户输入,我想检索数据并将其显示给用户。

到目前为止,我已经实现了hook_menu并注册了表单的相应url,并实现了提交按钮的“#submit”属性引用的提交函数。我还实现了数据检索代码,效果很好。

这是我的问题 - 我不知道如何显示检索到的数据。为了找到解决方案,我尝试了多种方法。

首先,使用主题功能,希望打印它的返回值来显示数据。其次,使用新注册的 url 设置表单数组的“#action”元素,因为我认为使用与表单相同的 url 只会导致 drupal 返回该表单而不是我的数据。因此,我创建了一个静态变量并将所有检索到的数据存储在其中;顺便说一下,这是在提交函数中完成的。当我在菜单回调中检查此变量时,未设置此变量。

总结一下我的问题,表单的访问url和表单提交不同,比如

Form url – http://....?q=mymodule/form
Submit url (value of ”#action”) – http://....?q=mymodule/execute

,我在提交函数中设置的静态变量的数据在菜单回调中不可用。如何使数据可用?

这是我的部分代码 -

static $retrieved_data;

function mymodule_menu() {
   $command = array();

   $command['mymodule/form'] = array(
      'title' => 'user input',
      'page callback' => 'response',
      'page arguments' => array('form'),
      'access arguments' => array('access content'),
      'type' => MENU_CALLBACK,
   );

   $command['mymodule/execute'] = array(
      'title' => 'Search',
      'page callback' => 'response',
      'page arguments' => array('execute'),
      'access arguments' => array('access content'),
      'type' => MENU_CALLBACK,
   );

   return $command;
}

function _response($paRequest){

   switch($paRequest){
      case "form":
         return drupal_get_form("_myform");
      break;

      case "execute":
         return $retrieved_data;
      break;
   }
}

function _myform(&$form_state) {
   $form['#action'] = url($base_path)."?mymodule/execute";
   .....
   $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Submit'),
      '#submit' => array('_data_retrieve'),    
   );
   return $form;
 }

function _data_retrieve($form, &$form_state){
   /*data retrieval code*/
   ........................
   $retrieved_data = db_fetch_object($result);
}

非常感谢

【问题讨论】:

    标签: drupal menu hook submit


    【解决方案1】:

    你的方法在那里似乎有点复杂。当我用表格制作系统时,我倾向于这样做。在您的MYMODULE_menu() 中,我会将'page arguments' => array('form'), 更改为'page arguments' => array('NAME_OF_FORM_FUNCTION'),,在这种情况下,NAME_OF_FORM_FUNCTION 将是 _myform。我会将其重命名为 MYMODULE_MYFORMNAME。

    然后创建一个函数:

    MYMODULE_MYFORMNAME_SUBMIT($form, &$state) {
        // Enter code here to save the data from the form that is stored in $state
        // to the database with an SQL query or a node_save($node) if you are 
        // creating a node.
    }
    

    之后,您可以在 _data_retrieve 函数中从数据库中检索数据,并在要检索数据的页面上调用该函数。

    【讨论】:

    • 我得到了同样的建议,即使用数据库在 drupal 支持中存储表单数据。我想我可以通过静态变量来使用数据库,这样就没有数据库访问的开销。我想那时不会。感谢您的建议。我会看看它是如何工作的,然后回复你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多