Как мне использовать справочную таблицу? - PullRequest
1 голос
/ 20 ноября 2011

Я использую код ниже, чтобы получить все категории из таблицы am_category в раскрывающемся списке в форме.Оно работает.Но при отправке формы мне нужен category.ID, а не имя.Как обычно работают с подобными таблицами поиска?

$category_result = db_query("SELECT id, name FROM {am_category}");
$categories = array();
foreach($category_result as $row)
{
    $categories[$row->id] = t($row->name);
}   

$form['category_options'] = array( 
'#type' => 'value', 
'#value' => $categories
); 
$form['category']['category'] = array( 
'#title' => t('Category'), 
'#type' => 'select', 
'#description' => t('Please select the category of this achievement.'), 
'#options' => $form['category_options']['#value'] 
);

1 Ответ

2 голосов
/ 20 ноября 2011

Значение, переданное массиву $form_state в функции отправки , будет идентификатором, а не именем, оно будет ключом раскрывающихся меню, а не значением.

Если вы хотите немного сократить свой код, вы можете использовать метод fetchAllKeyed() запроса базы данных для автоматического создания этого массива категорий. Вам не нужен элемент category_options, поскольку у вас уже есть доступ к этому массиву в переменной $form в вашей функции отправки.

Кроме того, я бы осторожно присвоил внешнему и внутреннему элементам одинаковое имя (category), что может вызвать некоторые проблемы.

Этот код должен помочь:

function mymodule_myform($form, &$form_state) {
  $categories = db_query("SELECT id, name FROM {am_category}")->fetchAllKeyed();

  $form['category_wrapper']['category'] = array(
    '#type' => 'select',
    '#title' => t('Category'),
    '#description' => t('Please select the category of this achievement.'),
    '#options' => $categories
  );

  return $form;
}

function mymodule_myform_submit(&$form, &$form_state) {
  $selected_category_id = $form_state['values']['category'];

  // Just in case you wanted to know, this would get the corresponding name for the selected category:
  $selected_category_name = $form['category_wrapper']['category']['#options'][$selected_category_id];
}
...