如何选中和取消选中复选框

时间:2013-12-28 05:24:29

标签: drupal checkbox drupal-7 drupal-modules drupal-views

在我的表单中,我有一个使用复选框的字段,复选框不是必填字段

$form['ishot'] = array(
        '#type' => 'checkbox', //you can find a list of available types in the form api
        '#title' => 'Is Hot',
        '#prefix' => "<label for='edit-ishot'>Is Hot <span class='form-required' title='This field is required.'>*</span></label>",
        '#required' => TRUE, //make this field required
        );

现在,如果我把

'#default_value' => 1

选中该复选框,每当我取消选中它时,它都会发出通知

注意:未定义的索引:ishot in submit_admin_news_add()

此外,我希望默认情况下取消选中我的复选框,用户可以在不检查的情况下提交表单。

这是总函数

function submit_admin_news_add($form, &$form_state)
{


    //echo "<pre>";
    //print_r( $form_state['input'] );
    //echo "</pre>";
    //die();

    $title= $form_state['input']['title'];
    $subtitle= $form_state['input']['subtitle'];
    $tags= $form_state['input']['tags'];
    $category= $form_state['input']['category'];
    $source= $form_state['input']['source'];
    $status= $form_state['input']['status'];
    $newstype= $form_state['input']['newstype'];

    if( array_key_exists("ishot", $form_state['input']) )
    {
        $ishot= $form_state['input']['ishot'];      
    }
    else
    {
        $ishot= 'N';
    }
    if( array_key_exists("sendque", $form_state['input']) )
    {
        $sendque= $form_state['input']['sendque'];
    }
    else
    {
        $sendque= 0;
    }
    if( array_key_exists("immedialecron", $form_state['input']) )
    {
        $immedialecron= $form_state['input']['immedialecron'];
    }
    else
    {
        $immedialecron= 0;
    }




    $introduction= $form_state['input']['introduction'];
    $fullstory= $form_state['input']['fullstory'];
    $extralink= $form_state['input']['extralink'];

    //date creation
    $date_raw   = $form_state['input']['dateadded'];
    $o_date_raw = $date_raw['date'];
    $o_time_raw = $date_raw['time'];

    $exp_date = explode('/',$o_date_raw);

    $new_date = $exp_date[2].'-'.$exp_date[0].'-'.$exp_date[1];

    $new_date_time = $new_date.' '.$o_time_raw.':00';

    //$new_date_time;
    //date ceration end


    if( array_key_exists("additionalcat", $form_state['input']) )
    {
        $additional = $form_state['input']['additionalcat'];
    }
    else
    {
        $additional = '';
    }

    if( array_key_exists("compcataccess", $form_state['input']) )
    {
        $comp_access = $form_state['input']['compcataccess'];
    }
    else
    {
        $comp_access = '';
    }


    $validators = array();
    if($file = file_save_upload('file', $validators,"public://",FILE_EXISTS_RENAME))
    {
        //print_r( $file );

        $new_file_name_raw = $file-> uri;
        $new_file_name     = str_replace("public://","",$new_file_name_raw);


        drupal_set_message('succeeded', 'File successfully uploaded.');
    }
    else {
        $new_file_name = '';
        form_set_error('failed', 'File was not uploaded.');
    }


    $query = db_insert('custom_news_management')->fields(array('title','subtitle','tags','category_id','source','status','newstype','ishot','sendque','immedialecron','introstory','fullstory','extralink','date_added'));
    $query->values(array(
        'title' => $title,
        'subtitle' => $subtitle,
        'tags' => $tags,
        'category_id' => $category,
        'source' => $source,    
        'status' => $status,
        'newstype' => $newstype,
        'ishot' => $ishot,
        'sendque' => $sendque,
        'immedialecron' => $immedialecron,
        'introstory' => $introduction,
        'fullstory' => $fullstory,
        'extralink' => $extralink,
        'date_added' => $new_date_time,
        ));

    $last_id =  $query->execute();

    if( $new_file_name != '' )
    {
        $insert_file = db_insert('news_file')->fields(array('news_id','file'));
        $insert_file->values(array(
            'news_id' => $last_id,
            'file' => $new_file_name,
            ));
        $insert_file->execute();        
    }
    if( $additional != '' )
    {
        foreach( $additional as $val )
        {
        $insert_additional = db_insert('news_additional_category')->fields(array('news_id','category_id'));
        $insert_additional->values(array(
            'news_id' => $last_id,
            'category_id' => $val,
            ));
        $insert_additional->execute();  
        }
    }

    if( $comp_access != '' )
    {
        foreach( $comp_access as $value )
        {
        $insert_comp_access = db_insert('news_company_access')->fields(array('news_id','category_id'));
        $insert_comp_access->values(array(
            'news_id' => $last_id,
            'category_id' => $value,
            ));
        $insert_comp_access->execute(); 
        }   
    }


    drupal_set_message(t('News inserted successfully!'), 'success');
}

2 个答案:

答案 0 :(得分:0)

“我还希望默认情况下取消选中我的复选框” 添加:

'#default_value' => 0,

我建议做一些测试,如:

if( array_key_exists("ishot", $form_state['input']) )
    {
        $ishot= 'Defined';
        drupal_set_message(t('Printing $form_state:  '.$form_state['input']['ishot']));      
    }
    else
    {
        $ishot= 'Not Defined';
    }
drupal_set_message(t($ishot));
//or dpm($ishot);

我认为,即使用户没有标记复选框$ form_state ['input'] ['ishot']可能存在(不太确定)。 我也会尝试做:

    $query = db_insert('custom_news_management')
            ->fields(array(
                     'title' => $title,
                     'subtitle' => $subtitle,
                     'tags' => $tags,
                     'category_id' => $category,
                     'source' => $source,    
                     'status' => $status,
                     'newstype' => $newstype,
                     'ishot' => $ishot,
                     'sendque' => $sendque,
                     'immedialecron' => $immedialecron,
                     'introstory' => $introduction,
                     'fullstory' => $fullstory,
                     'extralink' => $extralink,
                     'date_added' => $new_date_time,
                     ));  
   $last_id =  $query->execute();

您的方法如下:http://dropbucket.org/node/111但有点修改。

 $query = db_insert('custom_news_management')->fields(array('title',...'ishot',..));
 $query->values(array(.....
        ));

我希望能解决问题。

答案 1 :(得分:0)

虽然回复很晚但是为了获取信息,你应该使用
'#default_value' => variable_get('ishot', 1); //checked by default

而不是使用'#default_value' => 1