【问题标题】:cannot get checkboxes value using drupal form api无法使用 drupal 表单 api 获取复选框值
【发布时间】:2012-03-31 10:33:19
【问题描述】:

我在 drupal 中有表单,它可以上传图像并且里面有几个复选框。 这是表格:

$form['checklist_fieldset'] = array(
    '#type' => 'fieldset',
    '#title' => t('Check List'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,  
  );
$form['checklist_fieldset']['heating'] = array(
   '#type' => 'checkboxes',
   '#title' => t('Heating options'),

   '#options' => array(
  '0' => t('Yes'),
  '1' => t('No')
  ),
   '#description' => t('Heating details.')
  );

这是我的提交功能,我正在处理图像上传并获取复选框值。我收到了成功消息,图片正在上传,但没有获得复选框的值。

function property_add_view_submit($form,&$form_state){
$validators = array();



if($file = file_save_upload('p_file1',$validators,file_direcotry_path)){
$heating = array_keys($form_state['values']['heating']);
drupal_set_message(t('Property Saved! '.$heating));
dpm( $form_state['values']['heating']);
}

【问题讨论】:

    标签: drupal drupal-6 drupal-modules drupal-fapi drupal-forms


    【解决方案1】:

    当您在 FAPI 元素上使用 #options 时,传递给 $form_state 的值数组键,因此您不需要使用 array_keys()

    我不确定您为什么使用checkboxes 表示是/否,通常人们会使用简单的checkbox 元素。但是,如果这确实是您想要做的:

    1. 您的#options 不能包含以0 作为数组键的on 选项,它将被自动过滤掉,您永远不会知道该选项是否已被选中。
    2. 您应该使用$heating_options_chosen = array_filter($form_state['values']['heating'] 来获取选中的复选框选项。

    我真的认为你的代码应该是这样的:

    $form['checklist_fieldset']['heating'] = array(
     '#type' => 'checkbox',
     '#title' => t('Heating options'),
     '#options' => array(
       '1' => t('Yes'),
       '0' => t('No')
      ),
      '#description' => t('Heating details.')
    ); 
    
    
    
    $heating_checked = $form_state['values']['heating'] == 1;
    

    【讨论】:

    • 好吧..iam 使用复选框,因为我想将它用作复选框组。
    • 嗯,这更有意义,很高兴答案对任何一种方式都有帮助
    • 如何根据复选框的值/选项切换文本字段? @克莱夫
    • @PreritMohan 我认为对于 Drupal 6,您需要手动完成,但对于 Drupal 7,您可以使用 #states
    • @PreritMohan 如果您需要提出新问题,请使用页面顶部的链接,将其放入 cmets 对任何人都没有用
    【解决方案2】:

    如果我有复选框的朋友和选项就像

    [ ] abc  
    [ ] def  
    [ ] ghi  
    [ ] jkl 
    

    我想知道用户标记了哪些选项,然后使用下面的函数。

    if ($form_state->getValue('friends') != NULL) {
    
      foreach ($form_state->getValue('friends') as $key => $value) {
    
        if ($value != 0) {
          $friends = $friends . ", " . $key;
          $friends = substr_replace($friends, "", 0, 1);
        }
      }
    }
    

    如果用户选择了abcghi,那么您将得到1,3 作为$friends的结果

    如果您想知道值,请使用$friends = $friends.", ".$value;

    它对我有用..希望它也能帮助你:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2018-09-10
      相关资源
      最近更新 更多