0

我正在创建一个自定义模块,我想用它来显示来自模块的表单。该表单查询数据库并显示一些信息。数据库连接正常,已成功检索数据。该表单也已成功显示,但我可以弄清楚如何将所有链接在一起以在提交表单时再次显示页面。我的代码是:

<?php 

function menu($may_cache) {

$items = array();

$items['admin/reporting/report_details'] = array(

  'title' => 'Report: User details by stores',

  'access arguments' => array('access content'),

  'page callback' => 'say_report_details',

  'type' => MENU_CALLBACK,

);  

return $items;
}

// This function should execute the logic if the $_GET variable is set

function say_report_details($values = array()) {

// The $_GET logic will be somtehing like this

//   if (count($_GET) > 0) 

// Get all the form values from the $_GET wit something like:

//   if (count($_GET) > 0) {

  //   $start = mktime(0, 0, 0, $_GET['from_month'], $_GET['from_day'],

 $_GET['from_year']);

  //   $end = mktime(23, 59, 59, $_GET['to_month'], $_GET['to_day'], $_GET['to_year']);

 if ($_GET['store'] > 0) {

  $form = drupal_get_form("report_details_form");

   $output = theme("report_page", $form, $output);

return $output;
 }


function report_details_form() {

 $form["search"] = array(

'#type' => 'fieldset',

'#title' => t('Search params'),

'#collapsible' => FALSE,

'#tree' => TRUE,

 );

   for ($i = 1; $i < 32; $i++) {

   $days_opt[$i] = $i;

                            }
  for ($i = 1; $i < 13; $i++) {

 $month_opt[$i] = $i;

  }

 for ($i = 2008; $i < date("Y") + 3; $i++) {

 $year_opt[$i] = $i;

  }

$form["search"]["from_day"] = array(

'#type' => 'select',

'#title' => 'Date from',

'#options' => $days_opt,

'#default_value' => (($_GET['from_day'] == "") ? date("d") : $_GET['from_day'])

);

$form["search"]["from_month"] = array(

'#type' => 'select',

'#title' => '&nbsp;',

'#options' => $month_opt,

'#default_value' => (($_GET['from_month'] == "") ? date("m") : $_GET['from_month'])

);

$form["search"]["from_year"] = array(

'#type' => 'select',

'#title' => '&nbsp;',

'#options' => $year_opt,

'#default_value' => (($_GET['from_year'] == "") ? date("Y") : $_GET['from_year'])

);

$form["search"]["to_day"] = array(

'#type' => 'select',

'#title' => 'Date to',

'#options' => $days_opt,

'#default_value' => (($_GET['to_day'] == "") ? date("d") : $_GET['to_day'])

);

$form["search"]["to_month"] = array(

'#type' => 'select',

'#title' => '&nbsp;',

'#options' => $month_opt,

'#default_value' => (($_GET['to_month'] == "") ? date("m") : $_GET['to_month'])

 );

$form["search"]["to_year"] = array(

'#type' => 'select',

'#title' => '&nbsp;',

'#options' => $year_opt,

'#default_value' => (($_GET['to_year'] == "") ? date("Y") : $_GET['to_year'])

 );

$result = db_query('SELECT taxonomy_term_data.name, taxonomy_term_data.tid FROM 

    taxonomy_term_data WHERE vid = 10');

  $strs = array("all" => "All");

  foreach ($result as $store) {

  $strs[$store->tid] = $store->name;

}

$form["search"]["store"] = array(

'#type' => 'select',

'#title' => 'Stores',

'#options' => $strs,

'#default_value' => $_GET['store']

);

 $form["submit"] = array("#type" => "submit", "#value" => "Show report");

  return $form;

 }

   function theme_report_page($form, $result = array()) {

  $output = '

<div id="report_form">

 '. $form .'

</div> 

 <div id="report_result">
 '. $result .'
 </div>
 ';

 return $output;

 }

  function theme_report_details_form($form) {

 unset($form['search']['from_day']['#title']);

 unset($form['search']['from_month']['#title']);

 unset($form['search']['from_year']['#title']);

unset($form['search']['to_day']['#title']);

unset($form['search']['to_month']['#title']);

unset($form['search']['to_year']['#title']);

unset($form['search']['store']['#title']);

  $output = "<fieldset>

  <legend>Search params</legend>

<div class='fieldtitles'>". t('Date From') .":</div>

". drupal_render($form['search']['from_day']) ."

". drupal_render($form['search']['from_month']) ."

". drupal_render($form['search']['from_year']) ."

<div class='clearing'>&nbsp;</div>

<div class='fieldtitles'>". t('Date To') .":</div>

". drupal_render($form['search']['to_day']) ."

". drupal_render($form['search']['to_month']) ."

". drupal_render($form['search']['to_year']) ."

<div class='clearing'>&nbsp;</div>

<div class='fieldtitles'>". t('Store') .":</div>

". drupal_render($form['search']['store']) ."

  <div class='clearing'>&nbsp;</div>

 ". drupal_render($form['submit']) ."

 </fieldset>";

 unset($form['search']);

  $output .= drupal_render($form);

 return $output;
 }


 function report_details_form_submit($form_id, $form_values) {

  $query = "";

// This next line is the one we are having an issue right now, as is trowing an 

     error due to $form_values is empty for some UNKNOWN reason...

  foreach ($form_values['search'] as $key => $value) {

 $query .= "&". $key ."=". $value;
 }

 return array('admin/reporting/report_details', $query);
}
4

2 回答 2

1

我没有看表单的所有细节,但是 D7 的提交函数应该是这样的:

function my_module_example_form_submit($form, &$form_state) {
  // do something
}

我认为这应该可以解决问题。如果不查看此链接:http ://api.drupal.org/api/drupal/includes%21form.inc/group/form_api/7

于 2012-06-15T22:24:08.983 回答
0

请阅读并遵循 mikewink 提供的答案。

此外,在我创建的三个工作表单中,菜单项数组如下:

$items = array();
$items['admin/config/system/dataforms/SiteAccessform']=array(
    'title'=>'Site Access' //this should be watever the Title of your form is
    ,'description'=>'Configuration for the Data Forms module' //shows up by your menu item as it's description (where applicable)
    ,'page callback'=>'drupal_get_form' //this, as I understand it, is required for forms to work properly (& may be part of the cause of your problems)
    ,'page arguments'=>array('dataforms_main_form') //IMPORTANT this is the actual name of your function that will be executed to produce the form 
    ,'access arguments'=>array('administer settings for dataforms') //??
    ,'type'=>MENU_CALLBACK//these work when the path is accessed though no menu items are created
    ,
);

还有几点,当你在一个特定的“菜单”项上,它的页面参数数组元素设置为你的表单时,它只认为它是一个表单。也就是说,一个函数将是唯一能够创建表单的函数(根据我的经验)。因此,如果适用,请在该函数中使用逻辑来产生不同的形式......(而不是试图拥有一个调用另一个函数的按钮......这对我不起作用)。

另外,再次参考 mikewink 的回答, $form_state 变量是存储您要注意的状态的方法,而不是标准的 $_GET 或 $_POST 变量。

此链接可能会有所帮助:https ://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7

但是,我从示例模块中收集了最有价值的信息:https ://drupal.org/project/examples

祝你好运!

于 2014-03-11T01:16:08.267 回答