在我的表单中,我有一个使用复选框的字段,复选框不是必填字段
$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');
}
答案 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