Maison >développement back-end >tutoriel php >Votre première migration Drupal 8

Votre première migration Drupal 8

Lisa Kudrow
Lisa Kudroworiginal
2025-02-15 10:45:12951parcourir

Migration Drupal 8: une plongée profonde dans le transfert de contenu

Le module Migrate est une pierre angulaire de l'écosystème Drupal, à tel point que Core Drupal 8 a intégré certaines de ses fonctionnalités. Cela a été crucial pour remplacer les mises à niveau traditionnelles par des migrations de contenu et de configuration de Drupal 6 et 7 à Drupal 8. Alors que Core comprend désormais le cadre de base (dans le module migrate) et les outils de mise à niveau Drupal 6/7 (dans migrate_drupal), De nombreuses caractéristiques essentielles restent dans les modules contribués. Migrate Tools est particulièrement important, la fourniture de commandes DRUSH et une interface utilisateur pour la gestion des migrations. De plus, des modules comme Migrate Source CSV, Migrate Source XML et Migrate Source JSON offrent des plugins pour les sources de données courantes.

Your First Drupal 8 Migration

Cet article démontre la migration de Drupal 8 en important du contenu dans des entités de nœuds. Pour plus de simplicité, nous utiliserons des tables de base de données dans l'installation de Drupal. Le code complet est disponible dans [ce référentiel] (link_to_repository_here - remplacer par un lien réel si disponible).

Concepts clés:

  • Les migrations Drupal 8 se composent de trois parties: Source , Process , et Destination . Le plugin source récupère les données brutes, les plugins de processus les manipulent et les plugins de destination les enregistrent en tant qu'entités Drupal.
  • Migrate Tools est vital pour l'exécution de migrations via Dush (la méthode recommandée). Des commandes comme drush migrate-import --all et drush migrate-rollback --all Contrôlez le processus.

Architecture de migration:

Une migration Drupal 8 utilise le système de plugin. Le plugin source fournit des données brutes, les plugins de processus le transforment et les plugins de destination les enregistrent dans des entités Drupal. Ce pipeline est défini dans une entité de configuration de migration (généralement la configuration du module, importée sur l'activation du module).

Exemple: Migration de film

Notre exemple implique deux tables de base de données: movies (id, nom, description) et movies_genres (id, film_id, nom). Le script MySQL suivant crée ces tables et les remplit avec des exemples de données:

<code class="language-sql">CREATE TABLE `movies` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `movies_genres` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `movie_id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `movies` (`id`, `name`, `description`) VALUES
(1, 'Big Lebowsky', 'My favorite movie, hands down.'),
(2, 'Pulp fiction', 'Or this is my favorite movie?');

INSERT INTO `movies_genres` (`id`, `movie_id`, `name`) VALUES
(1, 1, 'Comedy'),
(2, 1, 'Noir'),
(3, 2, 'Crime');</code>

L'objectif est de migrer les films en nœuds et genres d'articles en termes de taxonomie (vocabulaire des tags), en maintenant l'association de films de films.

Migration de genre (migrate.migration.genres.yml):

<code class="language-yaml">id: genres
label: Genres
migration_group: demo
source:
  plugin: genres
  key: default
destination:
  plugin: entity:taxonomy_term
process:
  vid:
    plugin: default_value
    default_value: tags
  name: name</code>

Le plugin source Genres.php (situé dans Plugin/migrate/source) définit la requête SQL, les champs et les ids.

Migration du film (migrate.migration.movies.yml):

<code class="language-sql">CREATE TABLE `movies` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `description` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `movies_genres` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `movie_id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

INSERT INTO `movies` (`id`, `name`, `description`) VALUES
(1, 'Big Lebowsky', 'My favorite movie, hands down.'),
(2, 'Pulp fiction', 'Or this is my favorite movie?');

INSERT INTO `movies_genres` (`id`, `movie_id`, `name`) VALUES
(1, 1, 'Comedy'),
(2, 1, 'Noir'),
(3, 2, 'Crime');</code>

Le plugin Source Movies.php utilise prepareRow() pour ajouter un champ «Genres» contenant des identifiants de genre.

Activation et exécution:

  1. Activer le module personnalisé.
  2. installer Migrate Tools.
  3. Utilisez des commandes DRUSH (migrate-status, migrate-import --all, migrate-rollback --all).

Conclusion:

Cet exemple illustre les capacités de migration de Drupal 8. Explorez différents plugins source, plugins de processus et le potentiel de solutions personnalisées pour gérer divers besoins de migration.

Questions fréquemment posées (FAQ): (celles-ci sont largement inchangées de l'entrée, car elles sont factuelles et pertinentes.)

  • Quelles sont les conditions préalables à la migration vers Drupal 8? (la réponse reste la même)
  • Comment préparer mon site Drupal 8 pour la migration? (la réponse reste la même)
  • comment puis-je effectuer le processus de migration? (la réponse reste la même)
  • Qu'arrive-t-il à mon contenu pendant le processus de migration? (la réponse reste la même)
  • Que dois-je faire si le processus de migration échoue? (la réponse reste la même)
  • Puis-je migrer la configuration de mon site vers Drupal 8? (la réponse reste la même)
  • Comment migrer le thème de mon site vers Drupal 8? (la réponse reste la même)
  • Puis-je faire reculer une migration? (la réponse reste la même)
  • Comment mettre à jour mon contenu migré dans Drupal 8? (la réponse reste la même)
  • Puis-je effectuer une migration partielle? (la réponse reste la même)

N'oubliez pas de remplacer "link_to_repository_here" par le lien réel si vous en avez un.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn