При создании нового сайта на Drupal может возникнуть необходимость в переносе контента со старого сайта. В этой статье я расскажу о различных способах переноса контента и поделюсь полезными советами по этой теме.

1. Использование модуля «Migrate»

Один из наиболее популярных способов переноса контента с старого сайта на Drupal — использование модуля Migrate. Этот модуль позволяет импортировать данные из различных источников, таких как CSV-файлы, базы данных и другие CMS.

/**
 * Реализация хука hook_migrate_api().
 */
function my_module_migrate_api() {
  $api = array(
    'api' => '2',
    'groups' => array(
      'my_module' => array(
        'title' => t('My Module'),
        'description' => t('Migrations provided by My Module'),
      ),
    ),
  );

  return $api;
}

Сначала вам необходимо создать миграции, которые определяют, какие данные вы хотите импортировать на новый сайт. Миграции могут быть написаны на PHP или YAML. Вот пример миграции на основе PHP:

/**
 * Реализация хука hook_migrate_api().
 */
function my_module_migrate_api() {
  $api = array(
    'api' => '2',
    'groups' => array(
      'my_module' => array(
        'title' => t('My Module'),
        'description' => t('Migrations provided by My Module'),
      ),
    ),
  );

  return $api;
}

/**
 * Реализация хука hook_migrate_source_options_alter().
 */
function my_module_migrate_source_options_alter(array &$options, $source_module) {
  if ($source_module == 'csv') {
    $options['namespace'] = TRUE;
  }
}

После создания миграций вы можете запустить процесс импорта, используя команду drush:

drush migrate-import my_migration

Модуль «Migrate» является мощным инструментом для переноса контента на Drupal и предоставляет множество дополнительных возможностей, таких как обработка изображений, обработка ссылок и другое.

2. Ручной перенос контента

Если у вас небольшой сайт с небольшим количеством контента, то можно осуществить ручной перенос контента. Для этого вам потребуется создать соответствующие типы материалов, такие как «Статьи» или «Страницы», и вручную скопировать контент со старого сайта на новый.

<p>// Пример программного кода на PHP</p>
<?php
  $content = get_content_from_old_site();
  $node = Node::create([
    'type' => 'article',
    'title' => 'Новая статья',
    'body' => [
      'value' => $content,
      'format' => 'full_html',
    ],
  ]);
  $node->save();
  ?>

Также может понадобиться переносить другие данные, такие как пользователи, комментарии и настройки. Для этого можно использовать модули, такие как User Import или Comment Import, и переносить данные по-очереди.

3. Использование модуля «Views Data Export»

Если у вас есть доступ к базе данных старого сайта, вы можете использовать модуль Views Data Export, чтобы экспортировать контент в формате CSV или XML. Затем вы можете импортировать этот файл в новый сайт, используя модуль Migrate.

/**
 * Миграция из CSV-файла.
 */
id: csv_migration
label: CSV Migration
migration_group: my_module
source:
  plugin: csv
  path: 'public://csv/my_csv_file.csv'
destination:
  plugin: entity:node
process:
  title: title
  body/value: body
  body/format:
    plugin: default_value
    default_value: full_html

Часто задаваемые вопросы

1. Как импортировать изображения при переносе контента?

Модуль Migrate предоставляет возможность переноса изображений вместе с контентом. Для этого вам необходимо использовать плагин file_copy или file_copy_replace в процессе миграции. Вот пример использования плагина file_copy:

/**
 * Миграция с изображениями.
 */
id: image_migration
label: Image Migration
migration_group: my_module
source:
  plugin: csv
  path: 'public://csv/my_csv_file.csv'
process:
  field_image/target_id:
    plugin: file_copy
    source: image_url
    destination: 'public://images'
    alt: alt_text
    title: title

2. Как сохранить URL-адреса страниц при переносе контента?

Для сохранения URL-адресов страниц при переносе контента вам необходимо настроить модуль Pathauto на новом сайте. Модуль Pathauto позволяет автоматически генерировать URL-адреса на основе заголовков или других полей содержимого.

3. Каким образом обновить контент на новом сайте после переноса?

После переноса контента на новый сайт, вам может потребоваться обновить его для соответствия новым требованиям дизайна или функциональности. Для обновления контента вы можете использовать модули Views, Rules или пользовательский код. Вот пример обновления контента с помощью модуля Views:

/**
 * Модуль Views Bulk Operations.
 */
$view = Views::getView('my_view');
$view->execute();

foreach ($view->result as $result) {
  $node = Node::load($result->nid);
  // Обновление поля "body" для каждого узла.
  $node->set('body', 'Новый текст');
  $node->save();
}

В этой статье я рассмотрел различные способы переноса контента на новый сайт на Drupal. Вы можете выбрать наиболее подходящий метод в зависимости от ваших потребностей и ресурсов.