Идеи миграции Напишите SQL в Drupal 8, найдите все данные в Drupal 7, а затем организуйте структуру данных, чтобы вызвать API Drupal 8 для вставки данных в базу данных Drupal 8
Этапы миграции
- Настройка среды подключения к базе данных
Измените настройку. php файл сайта Drupal 8
//Drupal 8 database link
$databases['default']['default'] = array (
'database' => 'd8',
'username' => 'root',
'password' => '',
'prefix' => '',
'host' => '127.0.0.1',
'port' => '3306',
'namespace' => 'Drupal\Core\Database\Driver\mysql',
'driver' => 'mysql',
);
//Drupal 7 database link
$databases['upgrade']['default'] = array (
'database' => 'd7',
'username' => 'root',
'password' => '',
'prefix' => '',
'host' => '127.0.0.1',
'port' => '3306',
'namespace' => 'Drupal\Core\Database\Driver\mysql',
'driver' => 'mysql',
);- В соответствии со структурой веб-формы Drupal 7 создайте такую же веб-форму в Drupal 8
- Узнайте данные веб-формы Drupal 7
$NID = 1382; // node ID corresponding to drupal7 webform $firstSid = 0; $webformId = 'register_as_an_independent'; //Get the submission of drupal7 form $submittedData = []; $dataQuery = Database::getConnection('default', 'upgrade')->select('webform_submitted_data', 'wd'); $dataQuery->join('webform_component', 'c', 'c.cid = wd.cid AND c.nid = wd.nid'); $dataQuery->addField('c', 'form_key'); $dataQuery->addField('wd', 'sid'); $dataQuery->addField('wd', 'data'); $dataQuery->condition('wd.nid', $nid, '='); $result = $dataQuery->execute()->fetchAll(); foreach ($result as $row) { $submittedData[$row->sid][$row->form_key][] = [ 'value' => $row->data, ]; } $query = Database::getConnection('default', 'upgrade')->select('webform_submissions', 'ws'); $query->addField('ws', 'sid'); $query->addField('ws','uid'); $query->addField('ws','submitted'); $query->addField('ws','completed'); $query->addField('ws','modified'); $query->addField('ws','remote_addr'); $query->condition('nid', $nid, '='); $query->condition('sid', $firstSid, '>'); // $query->condition('sid', ($firstSid+9), '<'); $submit = $query->execute()->fetchAllAssoc('sid');
- Импорт данных в Drupal 8
$entityid = 90; // node ID corresponding to the form in Drupal 8
$checkBoxKey = array('target_types','following_dbms','versions_of_powerbuilder','work_locations');
foreach ($submit as $sid => $info) {
if (empty($submittedData[$sid])) {
continue;
}
//Import data to d8c
$values = [
'webform_id' => $webformId,
'entity_type' => 'node',
'entity_id' => $entityId,
'in_draft' => FALSE,
'uid' => $info->uid,
'langcode' => 'en',
'token' => 'pgmJREX2l4geg2RGFp0p78Qdfm1ksLxe6IlZ-mN9GZI',
'uri' => '/consultants/independents/apply',
'created' => $info->submitted,
'completed' => $info->completed,
'changed' => $info->modified,
'remote_addr' => $info->remote_addr,
'data' => [
'target_types' => ['Appeon Web App'],
'following_dbms' => ['SQL Server'],
'versions_of_powerbuilder' => ['PB 12.x'],
'years_using_powerbuilder' => '5',
'powerbuilder_certification' => 'No',
'id_number' => '',
'linkedin_or_xing_profile' => '',
'work_type' => 'Full-time',
'work_locations' => ['Telecommute'],
'first_name' => 'first_name',
'last_name' => 'last_name',
'email_address' => '@',
'country' => 'US',
'state_province' => '',
'postal_code' => '0000',
'certify_true_and_correct' => '1',
'agree_to_be_published' => '1',
'agree_terms' => '1',
'email_of_subject' => '',
],
];
foreach ($submittedData[$sid] as $key => $value){
if (in_array($key,$checkBoxKey)){
$values['data'][$key] = [];
}
foreach ($value as $val){
if (in_array($key,$checkBoxKey)){
$values['data'][$key][] = $val['value'];
} else {
$values['data'][$key] = $val['value'];
}
}
}
// Check webform is open.
$webform = Webform::load($values['webform_id']);
$is_open = WebformSubmissionForm::isOpen($webform);
if ($is_open === TRUE) {
// Create new submission instance
$webform_submission = WebformSubmission::create($values);
// Validate submission.
$errors = WebformSubmissionForm::validateWebformSubmission($webform_submission);
// Check there are no validation errors.
if (!empty($errors)) {
print_r($errors);
die();
}
else {
// Submit values and get submission ID.
$webform_submission = WebformSubmissionForm::submitWebformSubmission($webform_submission);
print $webform_submission->id();
}
}
}быть осторожным:
Если выбрано несколько полей, вставленное значение поля должно быть массивом
Если это вложение или фотография, вы можете провести собственное исследование.