Конец жизненного цикла Drupal 7 наконец наступил, и если вы среди тех, кто откладывал обновление из-за ограничений ресурсов или сложного кода, это руководство здесь, чтобы помочь. Вот как вы можете пройти переход к Drupal 10, обеспечивая безопасность и работоспособность вашего сайта.
Как владелец бизнеса или разработчик, вы близко знакомы с сильными и слабыми сторонами вашего сайта. Начните с перечисления того, какие функции необходимы, те, которые можно отбросить, и те, которые могут потребовать переосмысления или упрощения. Кастомные решения из Drupal 7 теперь могут быть реализованы с помощью современных contrib-модулей, потенциально упрощая вашу миграцию.
Audit of Content and Modules
Если ваш сайт эволюционировал с момента запуска Drupal 7 в 2011 году, вероятно, вы накопили некоторый беспорядок. Хорошо посмотрите на вашу структуру контента – подумайте о типах контента, блоках, сущностях – и выявите любые неэффективности. Вы можете рассмотреть возможность реструктуризации вашего контента в Drupal 10, используя новые функции или просто упрощая вещи. Используйте инструменты вроде Excalidraw, чтобы визуально отобразить и оптимизировать ваш контент.
drush pm-list --type=Module --status=enabled --format=table
drush pm-list --type=Theme --status=enabled --format=tableТеперь, имея список всех ваших модулей и тем, вы можете проверить их статус на Drupal Modules и Drupal Themes. Если модуль или тема не поддерживается, определите их роль в вашем сайте и поищите современные альтернативы в разделе contrib Drupal 10.
Create Your Local Drupal 10 Environment
Здесь мы настраиваем свежий сайт Drupal 10. Для этого шага вам понадобятся DDEV, Docker или OrbStack и Composer, установленные на вашей локальной машине.
Setting Up the Project
# Создайте новый проект Drupal с помощью DDEV в новой папке `drupal_11_new_project`
composer create-project drupal/recommended-project:^11 drupal_11_new_project
cd drupal_11_new_project
# Настройте DDEV для проекта Drupal
ddev config --project-type=drupal11 --docroot=web --php-version=8.4
ddev startChecking Installation Status
# Include Drush to your project
ddev composer require drush/drush
# Run drush status to see if the environment is installed correctly
ddev drush statusЭта команда выдаст что-то вроде:
Drupal version : 11.1.1
Site URI : https://new-tobedeleted.ddev.site
DB driver : mysql
DB hostname : db
DB port : 3306
DB username : db
DB name : db
PHP binary : /usr/bin/php8.3
PHP config : /etc/php/8.3/cli/php.ini
PHP OS : Linux
PHP version : 8.3.12
Drush script : /var/www/html/vendor/bin/drush.php
Drush version : 13.3.3.0
Drush temp : /tmp
Drush configs : /var/www/html/vendor/drush/drush/drush.yml
Drupal root : /var/www/html/web
Site path : sites/defaultInstalling Drupal
# Install your Drupal site
ddev drush site:install -yДобавление Contrib-Модулей и Тем: Теперь мы можем установить contrib-модули и темы. Вот как:
- Сначала проверьте, совместим ли модуль или тема с Drupal 10, посетив страницу проекта на Drupal.org. Ищите совместимость в разделе загрузок, например, Works with Drupal: ^9.4 || ^10 || ^11.
- Затем используйте Composer, чтобы добавить их в ваш проект:
# Example of how to include contrib modules/themes
ddev composer require 'drupal/pathauto:^1.13'
ddev composer require 'drupal/webform:^6.2'
ddev composer require 'drupal/gin'После установки эти модули должны появиться в директории web/modules/contrib. Чтобы их включить:
# Enable pathauto and webform Modules
ddev drush pm:install pathauto webform
ddev drush theme:install gin -y
# Optional set admin theme with drush
ddev drush config-set system.theme admin ginТеперь вы можете начать создавать структуру вашего контента через UI Drupal 10. Чтобы получить доступ к вашему локальному окружению, вам понадобится:
# Open Site in browser
ddev launch
# Login to Admin UI
ddev drush user:loginCustom Theme Setup
Как только вы закрепите структуру контента, следующий шаг – настройка функциональности вашего сайта под ваши нужды. Давайте разберемся с настройкой новой темы. Когда вы решите создать тему с поддержкой Single-Directory Components (SDC), сначала вам нужно выбрать базовую тему. Если вы используете дочернюю тему, убедитесь, что она уже установлена в вашей системе.
# Generate fresh theme
mkdir web/themes/custom
ddev drush generate theme
# Enable your new theme
ddev drush config-set system.theme default [your_theme_name]
# Using Single-Directory Components
ddev drush en sdc
ddev drush generate sdc
# if you follow the steps correctly
# new component should be generated
# in web/themes/custom/[your_theme_name]/componentsС SDC компоненты легко включаются или встраиваются в шаблоны Twig с помощью функций include или embed:
{% embed 'your_theme_name:your_component_name' with {
title: node.label,
subtitle: node.field_subtitle.value,
image: node.field_image.entity.uri.value|file_url
} %}Для тех, кто борется с HTML-макетами, рассмотрите использование Display Suite или Layout Builder. Эти модули упрощают управление макетами в Drupal, снижая необходимость в кастомной кодировке:
- Display Suite позволяет создавать сложные макеты с минимальной кодировкой, предлагая прямой контроль над настройками отображения в Drupal.
- Layout Builder предоставляет интерфейс перетаскивания для создания кастомных макетов для сущностей без написания кода.
- Single-Directory Components (SDC), в сочетании с инструментами вроде Storybook, предлагают уникальный подход:
- Изоляция Компонентов: Вы можете работать над компонентами независимо от полной настройки Drupal, что меняет правила игры для разработки.
- Библиотека Дизайна: Поддерживайте живую систему дизайна вне Drupal, что бесценно для согласованности на разных платформах или для ссылок команд дизайнеров.
Я экспериментировал с этой настройкой, и должен сказать, что процесс итераций между дизайном в Storybook и реализацией в Drupal был невероятно плавным.
Custom Module Setup
Теперь мы готовы мигрировать ваши кастомные функциональности. Вы можете создать каркас вашего модуля с необходимой структурой и шаблонным кодом, адаптируя к конвенциям Drupal 10 с помощью этих команд:
mkdir web/modules/custom
ddev drush generate module
## Scaffold your module with the necessary structure
## remember to include your custom module name
## Generate a Controller
ddev drush generate controller
## Generate a Configuration Form
ddev drush generate form:config
## Generate a Custom Service
ddev drush generate serviceПеренесите реальный кастомный код из Drupal 7 в Drupal 10. Это может потребовать переписывания кода из-за изменений в API и структуре.
Migrating Drupal 7 to Drupal 10
Drupal 7
- Создайте полную резервную копию вашего сайта Drupal 7
ddev drush sql-dump > d7_database_backup.sql
tar -czf files_backup.tar.gz /path/to/d7/sites/default/files- Установите Необходимые Модули Миграции
ddev composer require drupal/migrate_plus drupal/migrate_tools drupal/migrate_upgrade
ddev drush pm:install migrate_plus migrate_tools migrate_upgrade -y- Импортируйте в новую базу данных в той же среде MYSQL с базой данных Drupal 10
# Import your Drupal 7 database into a new database that Drupal 10 can access
mysql -u root -p d7_source < d7_database_backup.sql
# Use Drush to set up the migration process.
ddev drush migrate:upgrade --configure-only --db-url=mysql://db_user:db_pass@db_host/d7_source
# Check the available migrations and their statuses
ddev drush migrate:status
# Run the migration for all configured groups
ddev drush migrate:import --all
# Run the migration for specific id
ddev drush migrate:import [migration-id]
# Run the migration for specific Group
ddev drush migrate:import --group=[group-name]
# Reverses the changes made by a specific migration. This will remove the content or data imported by the migration.
ddev drush migrate:rollback [migration-id]
# Resets the status of a migration to idle. Use this when a migration is stuck in an "in-progress" or "failed" state
ddev drush migrate:reset-status [migration-id]
# Stops an ongoing migration process. This is useful if a migration is taking too long or causing server issues.Your Drupal 10
Если все прошло гладко, теперь у вас должен быть новый сайт Drupal 10, готовый к запуску. При работе в команде использование Git с конкретными ветками для функций и основного кода критически важно, чтобы избежать блокировок в рабочем процессе. Вот как это управлять
Content Structure & Style
- Основная Ветка: Это должен быть ваш стабильный, готовый к производству код. Сливайте сюда только хорошо протестированные функции.
- Ветки Функций: Используйте их для новых функций или исправлений ошибок. Называйте их описательно, например feature/new-login-system или bugfix/fix-login-issue.
- Синхронизация Файлов Конфигурации: Регулярная синхронизация ваших файлов конфигурации может помочь предотвратить конфликты слияния. Вот как:
# Export Drupal configuration to a directory.
ddev drush config:export
# Import config from the config directory.
ddev drush config:importЧтобы успешно установить и импортировать конфигурации, убедитесь, что ваш settings.php включает директорию конфигурации
$settings['config_sync_directory'] = dirname(DRUPAL_ROOT) . '/config/sync';# create config directory in you project root
mkdir -p config/syncPerformance Tuning Post-Migration
После миграции может потребоваться настройка производительности, особенно при сложных конфигурациях. Вот некоторые инструменты, которые могут помочь
ddev composer require drupal/devel drupal/webprofiler
ddev drush pm:install devel webprofiler