【问题标题】:Display a chart from hook_form_submit显示来自 hook_form_submit 的图表
【发布时间】:2020-07-17 20:14:18
【问题描述】:

我正在编写一个 Drupal 7 自定义模块,它将收集一些表单数据,然后根据该数据向浏览器显示一个图表。我正在关注使用 Charts 模块以编程方式生成图表的示例。在下面的代码中,我使用示例饼图来证明概念。 drupal_render 返回正确的图表代码,但我找不到从 hook_form_submit 中将其显示到浏览器的方法。我错过了什么?有什么想法吗?

function stats_degrees_form_submit ($form, &$form_state) {
  $demo = $form_state['values']['demo'];
  $chart = make_chart($demo);
  print $chart;
}

function make_chart($demo){
  //$degree_csv_array = get_demo_data($demo);
  // build chart
  $chart = array(
    '#type' => 'chart',
    '#title' => t('Pie Chart with data labels (no tooltips)'),
    '#chart_type' => 'pie',
    '#chart_library' => 'google', // Allowed values: 'google' or 'highcharts'
    '#legend_position' => 'right',
    '#data_labels' => TRUE,
    '#tooltips' => FALSE,
  );
  $chart['pie_data'] = array(
    '#type' => 'chart_data',
    '#title' => t('Gender'),
    '#labels' => array('Male', 'Female'),
    '#data' => array(10, 20),
  );
  return drupal_render($chart);
}

【问题讨论】:

    标签: drupal-7 drupal-modules


    【解决方案1】:

    这是使用 hook_form_submit 的不好方法, 此回调不显示任何内容,它用于提交表单数据和重新加载表单页面的自定义操作。

    因此,如果您想显示已提交数据的内容,请在 hook_form_submit 中使用$form_state['rebuild'] = TRUE;,所有值都将传递给重新加载的表单$form_state['values']。如果您的字段中有值,您可以在自定义表单声明中添加“if”条件以显示图表。

    否则,您可以使用$form_state['redirect'] 将表单重定向到专用于图表显示的另一个页面。

    请阅读有关表单 API 的文档: https://www.drupal.org/docs/7/api/form-api https://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/7.x

    【讨论】:

    • 感谢您的回复!我会尝试 $form_state['rebuild'] = TRUE。我确实看到了 $form_state['redirect'] 但我不确定要重定向到哪个自定义模块?另外,在那种情况下,我不确定如何传递所有表单数据。
    • 重建为 TRUE 将在提交后保留值,并允许您在提交后将其用于表单。重定向定义一个 url 在提交处理后进行,因此您可以通过 GET 附加数据传递或将其存储到会话变量。
    【解决方案2】:

    对于其他有此问题的人;我像这样使用 $form_state['redirect'] :

    function stats_degrees_form_submit ($form, &$form_state) {
      $demo = $form_state['values']['demo'];
      $form_state['redirect'] = 'stats-degrees-chart/' . $demo;
    }
    
    function stats_degrees_chart($demo) {
      $chart = make_chart($demo);
      $content['raw_markup'] = array(
        '#type' => 'markup',
        '#markup' => $chart,
      );
      return $content;
    }
    

    make_chart 在我上面的问题中,返回drupal_render。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2014-04-08
      相关资源
      最近更新 更多