drupal 6: напишите 2 разных таблицы для формы регистрации аккаунта пользователя - PullRequest
0 голосов
/ 22 декабря 2011
function Mymodule_user($op,&$edit, &$account, $category = NULL) {
  switch ($op) {
    case 'register':
      $result = db_query("SELECT id,name FROM {sites} ORDER BY name");
      while($row=db_fetch_array($result)) {
        $sites[$row['id']] = $row['name'];
      }

      $form['site_select'] = array(
        '#type' => 'select',
        '#title' => t('Select your site'),
        '#options' => $sites,
      )
      return $form;

    case 'insert':
      //How to take the $form values from above and use in my query to
      //write to my own table while writing to the standard 'users' table?
      db_query("INSERT INTO {another_table} (site_name) VALUES ('%s')",
               $form['site_select']);
);

Когда пользователь нажимает кнопку SUBMIT при создании стандартной учетной записи Drupal, как передать значение моего настраиваемого поля $ form ['site_select'] в мой case 'insert', чтобы я мог записать это в 'another_table'. Данные обычного пользователя, такие как имя пользователя и пароль, должны продолжать записываться в таблицу «пользователи» по умолчанию.

В: Почему бы просто не позволить сериализовать Drupal и сохранить ваши данные в таблице 'users' в поле 'data', как это обычно делается?

A: Потому что я хочу иметь возможность AJAX-ify и использовать автозаполнение в другой форме Drupal, а также запрашивать определенные пользовательские поля в MySQL. MySQL не может сериализовать / десериализовать. Например, «ВЫБЕРИТЕ DISTINCT имя_сайма FROM another_table»

1 Ответ

1 голос
/ 22 декабря 2011

Вы, вероятно, захотите изменить форму user_register, чтобы добавить собственную функцию обратного вызова в свойство этой формы #submit, например:

<?php
/**
 * Implementation of hook_form_FORMID_alter().
 * @param $form
 * @param $form_state
 * @return void
 */
function MYMODULE_form_user_register_alter(&$form, &$form_state) {
  $form['#submit'][] = 'MYMODULEs_own_register_submit_callback_func';
}

И затем в обратном вызове вы собираетесьзаполнить $form_state всем, что пользователь заполнил в форме (включая значение для дополнительного элемента поля site_select, который вы добавили в реализацию hook_user):

<?php
function MYMODULEs_own_register_submit_callback_func(&$form, &$form_state) {
  // Do stuff with $form_state['values'], i.e $form_state['values']['site_select'], etc.
}
...