web-dev-qa-db-fra.com

Existe-t-il un moyen de migrer uniquement les nœuds?

Je ne veux pas effectuer une migration complète. Je souhaite migrer uniquement et uniquement les nœuds (de préférence avec leurs métadonnées Metatag également). Pas de vues, pas de panneaux, pas de contextes, pas de redirections d'URL - uniquement des nœuds ...

Je pose cette question après avoir rencontré des problèmes lors de la mise à niveau complète de D7 >> D8 et lors de l'utilisation du module de mise à niveau Drupal (j'ai même ouvert un thread à ce sujet ici dans DA ). Par conséquent, je recherche des moyens de n'effectuer qu'une migration partielle ou d'effectuer une migration en plusieurs parties.

Est-il possible en ce qui concerne les nœuds?

7
JohnDoea

Vous n'avez pas besoin d'effectuer une migration complète. Vous pouvez initialiser le processus de mise à niveau en vous connectant à l'ancien site et il créera des migrations. Ensuite, vous pouvez, au lieu de les exécuter automatiquement, en exécuter seulement certains avec l'interface utilisateur fournie par le projet upgrade_tools (je pense?).

Cependant, les migrations ont des dépendances. Pour pouvoir exécuter la migration des nœuds, par défaut, vous devez en exécuter quelques autres, par exemple utilisateurs, formats de texte et aussi les champs.

Vous pouvez essayer de changer cela en modifiant les migrations créées soit avec drush cedit ou export/import. Je crois que quelqu'un travaille également sur une interface utilisateur pour cela.

Vous pouvez également personnaliser n'importe quel mappage et la façon dont les champs sont migrés. Le comportement par défaut est que chaque champ et configuration est migré 1: 1 mais pour être honnête, je ne peux pas imaginer que c'est ce que la plupart des sites voudront faire. Au lieu de cela, j'imagine qu'ils construisent un nouveau site D8 puis importent le contenu.

Voir documentation de migration . Il existe également de nombreux articles de blog disponibles sur ce sujet, mais ce n'est pas une chose triviale à faire.

Alternativement, vous pouvez essayer d'exporter/importer votre contenu, comme mentionné dans les commentaires, les flux ne sont pas encore tout à fait prêts, mais vous pouvez utiliser une exportation et une importation des vues en écrivant du code personnalisé.

9
Berdir

La migration est un peu lourde pour cela. Dans drupal 7, il y avait des modules pour l'importation/exportation de contenu uniquement. Dans drupal 8 Je n'ai pas trouvé de module prêt à l'emploi. J'ai donc improvisé avec un peu de code:

J'ai fait une exportation en drupal 7 avec des vues en csv à l'aide du module:

views_data_export

Dans drupal 8 j'ai utilisé la bibliothèque php:

parsecsv-for-php

Et ce code:

require_once('parsecsv.lib.php');
$csv = new parseCSV();
$csv->auto($filepath);
foreach ($csv->data as $key => $row) {
  $node = entity_create('node', array('type' => 'article', 'title' => $row['title'], 'uid' => $row['uid']));
  $node->langcode->value = 'en';
  $body = $row['body'];
  $body = str_replace('http://Host1.com/', 'http://Host2.com/', $body);
  $node->body->value = $body;
  $node->body->format = 'full_html'; 
  ...
  $node->save();
}

L'avantage est que vous pouvez faire votre propre ajustement, comme remplacer les chemins de drupal 7, ou définir une langue fixe. Et vous pouvez vérifier si toutes les dépendances sont respectées, par exemple que l'uid est déjà là.

5
4k4

Nous voulions ignorer certains types de contenu de la migration car les modules Migrate dans D8 migrent tous par défaut. Nous avons utilisé hook_migrate_prepare_row pour ignorer les types de contenu dans notre module personnalisé.

function hook_migrate_prepare_row(Row $row, MigrateSourceInterface $source, MigrationInterface $migration) {
  // Ignore content types from being migrated.
  if ($migration->id() == 'd6_node_type') {
    $ignore_content_types = array('content_type1', 'content_type2');
    if (in_array($row->getSource()['type'], $ignore_content_types)) {
      return FALSE;
    }
  }

  // Ignoring content of 4 content types.
  $ignore_content_types_content = array('d6_node__content_type1', 'd6_node__content_type2');
  if (in_array($migration->id(), $ignore_content_types_content)) {
    return FALSE;
  }
}

Plus d'informations. - https://www.drupal.org/node/2641912

Vous obtenez la liste des ID de migration à l'aide de la commande drush migrate-status et les ignorez si nécessaire.

1
amitgoyal