Экспорт пользователей из Drupal 6 в Drupal 7

18 ноября 2013 - 10:23

Задача:
перенести пользователей с сохранением пароля с Drupal 6 на Drupal 7.

Решение:
Добавляем в settings.php данные для подключения к бд D6 (old).
settings.php:

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'db_new',
      'username' => 'username_new',
      'password' => 'password_new',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => 'prefix_',
    ),
  ),
  'old' =>
  array (
    'default' =>
    array (
      'database' => 'db_old',
      'username' => 'username_old',
      'password' => 'password_old',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => 'prefix_',
    ),
  ),
);

В корень сайта поместим небольшой php скрипт:

  define('DRUPAL_ROOT', getcwd());

  require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

  require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
 
  $count = 3000;
   
  db_set_active('old');
  $result = db_query_range("SELECT * FROM {users} WHERE uid > 1 ORDER BY uid", 0, $count);
  db_set_active();
 
  foreach ($result as $account) {
    $new_pswd_hash = user_hash_password($account->pass, 11);
   
    if ($new_pswd_hash)  {
      $new_pswd_hash  = 'U' . $new_pswd_hash;
      $data = array(
        'uid' => $account->uid,
        'name' => $account->name,
        'pass' => $new_pswd_hash,
        'mail' => $account->name,
        'theme' => $account->theme,
        'created' => $account->created,
        'access' => $account->access,
        'login' => $account->login,
        'status' => $account->status,
        'timezone' => $account->timezone,
        'language' => $account->language,
      );
      drupal_write_record('users', $data);
    }
  }

Категория: