【问题标题】:Could someone assist me with that save form?有人可以帮助我保存表格吗?
【发布时间】:2015-05-12 08:25:35
【问题描述】:

下面是我的用户表单的 admin.inc 文件。在这个例子中,我有return system_settings_form($pppp_form); 我真正想要的是自己制作一个保存按钮并在用户按下保存时保存所有这些值......这个表单代码在下面做同样的事情并且它可以工作,但我想做我自己的保存表单,因为这个表单不保存我想要从复选框中获得的值有人可以帮助我制作我自己的表单吗?我真的需要帮助!!非常感谢你..!

/**
 * Settings form for the user.
 */
function pppp_admin_settings() {

  $pppp_form['pppp_key'] = array(
      '#type'          => 'textfield',
      '#title'         => t('pppp'),
      '#default_value' => variable_get('pppp_key', ''),
      '#description'   => t('pppp.'),
      '#required'      => TRUE,
      '#size'          => 28,
      '#required'      => TRUE,
    );

    $pppp_options = array(
      '0'       => 'No Values',
      '100'     => '100',
      '500'     => '500',
      '1000'    => '1000',
      '5000'    => '5000',
      '50000'   => '50000',
      '1000000' => '1000000'
    );
    $pppp_form['pppp_number_select'] = array(
      '#type'          => 'select',
      '#options'       => $pppp_options,
      '#description'   => t('Select how many values you want to check.'),
      '#default_value' => variable_get('pppp_number_select', '0'),
    );

    $pppp_severity_levels = variable_get('pppp_severity_levels', array());

    $pppp_severity_options = array();

    foreach (watchdog_severity_levels() as $pppp_severity_number => $pppp_severity) {
      $pppp_options[$pppp_severity_number] = check_plain(drupal_ucfirst(
        $pppp_severity));
    }

    $pppp_form['pppp_severity'] = array(
      '#type'        => 'fieldset',
      '#title'       => t('pppp.'),
      '#collapsible' => TRUE,
      '#collapsed'   => TRUE,
    );

    $pppp_form['pppp_severity']['pppp_severity_levels'] = array(
      '#type'          => 'checkboxes',
      '#title'         => t('Type of log messages'),
      '#options'       => $pppp_severity_options,
      '#default_value' => array_values($pppp_severity_levels),
      '#required'      => TRUE,
    );

    return system_settings_form($pppp_form);

}

【问题讨论】:

    标签: php forms drupal drupal-7 drupal-modules


    【解决方案1】:

    system_settings_form($form) 函数是一种快捷方式,可让您构建表单而不必担心保存按钮/提交处理程序(这些是自动添加的)。

    如果你想构建一个完整的表单,包括提交处理程序等,你必须定义一个表单函数和一个表单提交处理程序,然后通过 drupal_get_form('MY_FORM_NAME_admin_settings_form'); 调用它。 所以

    定义一个表单函数

    这可以有任何你想要的名字

    MY_FORM_NAME_admin_settings_form($form, &$form_state){
      //Put your form array here- 
      //Add a submit button
      $form['submit'] = array(
        '#type' => 'submit', 
        '#value' => 'Save'
      ); 
      return $form; 
    }
    

    定义提交处理程序

    提交此表单后,它会自动尝试调用 MY_FORM_NAME_admin_settings_form_submit,因此我们必须定义提交处理程序

      MY_FORM_NAME_admin_settings_form_submit($form, &$form_state){
        //All the input is in the $form_state['input'] so we'll put it in a message to see what's happening. 
        drupal_set_message('<pre>' . print_r($form_state['input'], true) . '</pre>'); 
        //Do your thing with the data 
        //Save it via variable set
      }
    

    打印此表格

    在需要的地方通过 drupal_get_form 调用此表单。

    drupal_get_form('MY_FORM_NAME_admin_settings_form'); 
    

    【讨论】:

    • 我无法理解:
    • MY_FORM_NAME_admin_settings_form_submit($form, &$form_state){ //所有输入都在 $form_state['input'] 中,所以我们将其放入消息中以查看发生了什么。 drupal_set_message('
      ' . print_r($form_state['input'], true) . '
      '); //用数据做你的事 //通过变量集保存它 }
    • 我做了所有这些事情,但没有保存我的值:'(我的错误在哪里?
    • 您仍然必须使用 variable_set('variable_name', $variable); 保存数据设置消息仅显示一条消息,其中包含人员输入表单的输入结构。
    【解决方案2】:

    您的问题有点含糊,但我认为您正在寻找提交按钮,它允许您定义一个自定义回调函数来处理数据。

    $pppp_form['actions']['submit'] = array(
    
    '#type' => 'submit',
    
    '#value' => t('Delete'),
    
    '#weight' => 15,
    
    '#submit' => array('pppp_form_submit_callback'),
    );
    

    【讨论】:

    • 如果我在我的代码中写下该函数并删除: return system_settings_form($pppp_form) 什么都不会保存
    • 您在回调函数中从表单和 variable_get / variable_set 传递数据。 function pppp_form_submit_callback($formdata){variable_get('var_name', $formdata['pppp_number_select'])}
    • 注意:未定义索引:pppp_form_submit_callback() 中的 pppp_number_select
    • print_r 或 dpm $formdata
    【解决方案3】:

    在您发布的代码中,您有 1 个额外的右大括号 }。 对于表单提交,您可以添加

    $pppp_form['submit'] = array(
        '#type' => 'submit',
        '#value' => 'Submit'
      );
    

    【讨论】:

    • 在 form_submit 钩子中,您应该通过获取 form_state 的 vardump 来检查 pppp_severity_levels 携带的值
    • 我是编码新手,我听不懂你在说什么:/ :'(
    • 我的代码中没有提交表单,我不知道如何创建它:'(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 2021-02-09
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多