Генерация форм из базы данных - PullRequest
2 голосов
/ 16 июня 2010

Я пытаюсь научить себя Drupal, и я нашел то, для чего я не могу найти учебники.

Я пытаюсь создать форму с динамическим числом текстовых полей для заполненияи редактировать содержимое моей пользовательской таблицы.В обычном PHP я достиг бы этого с помощью:

$count = '0';
while ($row = mysql_fetch_array ($result) {
  echo "<input type='text' name='title_row".$count."' value='".$row['title']."'>"
  $count = $count +1;
}

Может ли кто-нибудь указать мне на что-то, что покажет мне, как это сделать в Drupal (и обработке поданных данных)?

Спасибо

1 Ответ

4 голосов
/ 17 июня 2010

Проверьте для этого ссылку API форм и Краткое руководство по API форм

Простая версия вашего примера будет выглядеть примерно так:

/**
 * Form builder function - creates definition of form
 */
function yourModule_table_edit_form($form_state) {
  $form = array();
  // TODO: Add code/query to populate $result, using the 
  // Drupal DAL functions, e.g.:
  $result = db_query('SELECT * FROM {your_table}');
  while ($row = db_fetch_array($result) {
    // Create one textfield per row
    // NOTE: assumes content of title column can be used as an array index
    $form[$row['title']] = array(
      '#type' => 'textfield',
      '#title' => $row['title'],
      '#default_value' => $row['value'], // NOTE: Just assumed the column name
      '#size' => 60, // Adjust as needed
      '#maxlength' => 60, // Adjust as needed
      // NOTE: more options for input element definition available - check the API docs
    );
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );

  return $form;
}

/**
 * Form submit function
 */
function yourModule_table_edit_form_submit($form, &$form_state) {
  foreach ($form_state['values'] as $row_title => $value) {
    // TODO: Do something with the submitted values
  }
}

(ПРИМЕЧАНИЕ: непроверенный код, остерегайтесь опечаток и других ошибок)

Чтобы подготовить форму для вывода, вы должны позвонить drupal_get_form('yourModule_table_edit_form').

...