[РЕШЕНО]Отобразить отмеченные checkbox'ы

Главные вкладки

Аватар пользователя Nati Nati 4 июня 2010 в 11:12

Проблема в следующем, на форме есть checkboxes,форма обрабатываться при помощи мной написанной функции. вопрос, как сделать так, чтобы отмеченный пользователем checkboxes отображались отмеченными. пока после обработки формы отображается, что ничего не отмечено. по идее в variable все как полагается...помогите

Комментарии

Аватар пользователя graker graker 4 июня 2010 в 13:29

#default_value установить правильно, как же еще.
Никто вам не скажет, что вы не так делаете, если не предъявите код.

И следом за кодом сразу приводите список опций чекбоксов и содержимое вашей "variable".

Аватар пользователя Nati Nati 4 июня 2010 в 13:58

содержимое переменной в таблице variable следующее
a:1:{i:0;s:5:"price";}

код такой
function comparison_admin_settings(&$form_state) {
$types=get_types();

$form['nodecount'] = array(
'#type' => 'select',
'#title' => t('Maximum nodes to compare'),
'#options' => drupal_map_assoc(range(2, 10)),
'#default_value' => variable_get('nodecount',
2),
);
$form['nodetypes'] = array(
'#type' => 'fieldset',
'#title' => t('Node types'),
);
$form['nodetypes']['types'] = array(
'#type' => 'checkboxes',
'#title' => t('Select node types to compare'),
'#options' => $types,
'#default_value' => variable_get('types', array()),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);

return $form;
}
function comparison_admin_settings_submit($form, &$form_state) {
$i=0;

$types=get_types();
$checked = array_intersect(array_keys($form_state['values']['types']), array_values($form_state['values']['types']));
$comparison_types=array();

foreach($types as $type){
if (in_array($i, $checked)&&($i!=0)){
$comparison_types[]=$type;
}
$i++;
}
$types_db=get_compare_types();
$deleted=array_diff($types_db, $comparison_types);
$inserted=array_diff($comparison_types, $types_db);
if (count($deleted)!=0){
db_query("DELETE FROM {comparison_node} WHERE type IN (".db_placeholders($deleted).")", $deleted);
}
foreach($inserted as $ins){
db_query("INSERT INTO {comparison_node} (cid, type) VALUES (%d, '%s')",NULL, $ins);
}
drupal_set_message('Configuration saves.');

}

function get_types(){
$result=db_query("SELECT type FROM {flag_types}");
$types=array();
while($type= db_fetch_object($result)){
$ar=array($type->type);
$types=array_merge($types, $ar);
}
return $types;
}

function get_compare_types(){
$result=db_query("SELECT type FROM {comparison_node}");
$types=array();
while($type=db_fetch_object($result)){
$ar=array($type->type);
$types=array_merge($types, $ar);
}
return $types;
}

Аватар пользователя graker graker 4 июня 2010 в 14:13

И где здесь список опций чекбоксов? Вот у вас "в таблице variable" есть запись "price". Как мне понять, что такая же есть в чекбоксах? Как увидеть, что вы там задаете? Или гадать надо?
Подсказываю. Вот у вас есть код:

$form['nodetypes']['types'] = array(
'#type' => 'checkboxes',
'#title' => t('Select node types to compare'),
'#options' => $types,
'#default_value' => variable_get('types', array()),
);

Не надо приводить код всего модуля. Просто напишите, чему равны
$form['nodetypes']['types']['#options'] и $form['nodetypes']['types']['#default_value'] непосредственно после исполнения этого куска кода.

Кстати, называть переменную "types" - не очень хорошая идея.

Аватар пользователя graker graker 4 июня 2010 в 17:01

kosilko wrote:
variable_set('types', $form_state['values']['types']);

Я про это уже автору в другой теме писал. Мне было отвечено, что все нормально сохраняется Wacko

Аватар пользователя graker graker 4 июня 2010 в 17:17

Да, поэтому. Чтобы исключить совпадение имен функций и переменных таблицы variables, в друпаловских соглашениях об именовании настоятельно рекомендуется пользовательские функции и переменные начинать с имени модуля (в случае с приватными функциями - с подчеркивания и имени модуля).

Уточняю: речь не о локальной переменной $types, а о переменной 'types' из таблицы variables, с которой вы работаете через variable_get/variable_set.

Аватар пользователя Nati Nati 4 июня 2010 в 17:56

тема закрыта, но graker, можно задать вам еще один вопрос? я думаю, вы сможете подсказать. есть страница с формой и кнопка, нужно чтобы по клику на кнопку отображалась таблица под формой. эта таблица генерируется из базы с учетом данный формы. как это возможно сделать?

Аватар пользователя graker graker 4 июня 2010 в 18:20

Можно, например, сохранять данные формы при сабмите в сессии, а при обновлении страницы смотреть - если в сессии есть данные, то показывать таблицу.
Посмотрите как в стандартном модуле node сделана админка содержимого (фильтрация и вывод списка нод в админке).

Аватар пользователя Nati Nati 4 июня 2010 в 19:37

а как ее добавить? таблицу? просто вывести на отдельной странице получается, а добавить к уже существующей никак..