Planète

Par kgaut
Kevin Gautreau

Les forks et merge-requests arrivent (enfin) sur drupal.org !

Depuis la migration des dépôts du code de Drupal ainsi que de l'ensemble des modules tiers sur Gitlab, nous sommes nombreux à attendre que l'ensemble des possibilités offertes par ce changement soient accessibles.

Une d'entre elle qui simplifiera grandement la proposition de modification de code par les néophytes est la possibilité de faire des « merge requests », à l'image de ce qui se fait sur une instance gitlab ou bien des pull-requests sur github.com.

Actuellement pour proposer une modification sur le core de Drupal ou l'un de ses modules tiers, il faut cloner le dépôt sur sa machine, faire les modifications, générer un patch et enfin proposer le patch. Procédure qui n'est pas inaccessible, mais qui n'est pas simple pour les nouveaux venus. Surtout quand on veut corriger juste un petit truc.

Le nouveau fonctionnement sera beaucoup plus simple. Il faudra commencer par créer un issue sur le projet que l'on souhaite amender :

Image

Drupal create issue

 

Note : retrouvez le ticket ici : https://www.drupal.org/project/apidae_tourisme/issues/3160451

Une fois cette issue créé, l'issue tracker de drupal proposera de créer un fork (copie) du dépôt. Fork qui sera dédié uniquement au traitement de ce ticket. Si deux personnes veulent proposer deux approches pour un même problème, alors deux forks peuvent être créés.

Image

Drupal issue fork

 

L'adresse du fork en question : https://git.drupalcode.org/issue/apidae_tourisme-3160451

Une fois créé, le fork sera clonable et/ou éditable en ligne directement via le web IDE de Gitlab :

Image

Gitlab web ide

 

Au commit, l'IDE nous proposera de directement créer une merge request, fonctionnalité qui est aussi possible depuis l'interface de Gitlab si l'on fait nos modifications en local et pas dans le web IDE.

Image

gitlab drupal merge request

 

Voici l'écran de création d'une merge request :

Image

Drupal merge request creation

 

Une fois créée, la MR est visible dans le ticket :

Image

Drupal issue merge request

 

Image

Drupal issue merge request 2

 

Ensuite l'écran d'une merge request permet de voir les modifications, de faire des commentaires, et d'accepter ou non la modification (voir en ligne : https://git.drupalcode.org/project/apidae_tourisme/-/merge_requests/1)

Image

Drupal merge request changes

 

Image

Drupal merge request screen

 

Ainsi on peut se passer complètement de la procédure de patch, même pour des grosses modifications ! Je trouve personnellement la procédure plus simple mais surtout plus accessible pour un·e néophyte.

Actuellement la fonctionnalité est encore en beta, il faut demander l'activation pour un ou plusieurs de ses projets personnels sur ce ticket : https://www.drupal.org/project/drupalorg/issues/3152637.

Si vous voulez jouer un peu et tester la procédure, n'hésitez pas à le faire sur le dépôt pour lequel j'ai activé la fonctionnalité, je ferai le ménage plus tard : https://www.drupal.org/project/apidae_tourisme/issues/3160451 (vous prouvez créer de nouveaux tickets si besoin en mettant « test » dans le titre.

Par kgaut
Kevin Gautreau

Drupal 8 et Drupal 9 - Créer une commande drush personnalisée

Voici un exemple rapide de commande drush appelant une méthode d'un service avec une option lors de l'appel.

À noter : Drupal\mon_module\Service\Resalys est un service existant, je souhaite utiliser la méthode syncResalys de ce service qui accepte un paramètre optionnel : $force

Déclaration de la commande

modules/mon_module/drush.services.yml

services:  mon_module.drush.resalys: # clé du fichier de commande, à définir vous même    class: Drupal\mon_module\Command\ResalysCommand # Namespace de la classe contenant la commande    arguments:      - '@mon_module.resalys' # Service à injecter dans notre commande    tags:      -  { name: drush.command }

Définition de la commande

modules/mon_module/src/Command/ResalysCommand.php

resalys = $resalys;  }   /**   * Sync resalys cache   *   * @command resalys:sync   * @usage drush resalys:sync   * @usage drush resalys:sync --force   *   * @param int[] $options   */  public function sync($options = ['force' => FALSE]) {    $force = (bool) $options['force'];    $this->resalys->syncResalys($force);  } }

Utilisation

drush resalys:syncdrush resalys:sync --force

 

Par kgaut
Kevin Gautreau

Drupal 8 et Drupal 9 - Attacher une librairie CSS ou JS à une vue

Voici comment inclure des fichiers CSS ou JS sur une page contenant une vue.

Pour rappel les librairies peuvent être définies dans un thème ou un module.

Utilisation du hook HOOK_views_pre_render.

Dans le .module de votre module :

function MON_MODULE_views_pre_render(\Drupal\views\ViewExecutable $view) {  if ($view->storage->id() === 'front_blog') {    $view->element['#attached']['library'][] = 'theme/swiper-library';    $view->element['#attached']['library'][] = 'theme/univers-js';  }}

 

Par Q__nt_n
Adhérent
Quentin Fonteneau

Obtenir un objet URL à partir de l'alias

Obtenir un objet URL à partir de l'alias
Q__nt_n
lun 22/06/2020 - 10:33

Dans le cadre d'un import où je devais remplir des données pour plusieurs types de contenu (node, taxo etc..), j'ai du me baser sur la seule entrée que j'avais : l'URL de la page.

// Morcellement de l'URL  
$url_parts = explode("/", parse_url($item['new'], PHP_URL_PATH));
// Suppression du langcode
unset($url_parts[1]);
// Reconstruction de l'alias sans le langcode
$alias = implode('/', $url_parts);


$url_object = \Drupal::service('path.validator')->getUrlIfValid($alias);
$route_name = $url_object->getRouteName();
$route_parameters = $url_object->getrouteParameters();

Suite à la récupération de l'objet 'URL', j'ai pu distinguer mes différents cas et faire les traitements adéquats.

Par kgaut
Kevin Gautreau

Drupal 8 & Drupal 9 - Entity Query - Ajouter une condition sur une colonne spécifique

Dans le cadre d'une EntityQuery, il peut être nécessaire parfois de faire une requête sur une colonne spécifique de notre table, autre que le traditionnel « value ».

Rien de bien compliqué, il faut alors le spécifier dans le nom du champ sur lequel on ajoute une condition.

Exemple normal :

// Condition sur la colonne « value » du champ « field type »$query->condition('field_type', 'FETE_ET_MANIFESTATION');

Pour spécifier la colonne, on concatène le nom de la colonne avec le nom du champ avec un point :

// Condition sur la colonne « dateDebut » du champ « field_apidae_dates »$query->condition('field_apidae_dates.dateDebut', $now->format('Y-m-d'), '>');

 

Par kgaut
Kevin Gautreau

Accélérer l'administration de son site drupal avec Makefile

Un Makefile est un fichier contenant des rules, (des fonctions) permettant d’exécuter une suite d'action. Beaucoup utilisé dans les langages compilés pour permettre de gérer la compilation d'un programme, c'est aussi utilisable dans le cadre d'un projet php.

J'ai découvert les Makefile après avoir commencé à utiliser docker pour mes projets web.

Quand on utilise docker pour le php les binaires php (drush, composer, drupal-console...) sont à exécuter dans le container php et non pas sur notre machine hôte.

Ce qui donne des commandes ressemblant à :

docker-compose exec php drush crdocker-compose exec php composer install

au lieu de simples

drush crcomposer install

ça n'est pas la mort, mais un développeur est feignant.

L'ensemble d'images docker docker4drupal propose un Makefile avec des rules permettant d’exécuter drush ou composer plus simplement :

make drush crmake composer install

C'est très pratique, mais on peut aller encore plus loin et écrire nos propres rules en les ajoutant à la suite du fichier. Voici par exemple une rules pour supprimer la base de données et la recréer :

## db-empty	: drop and recreate database.PHONY: db-emptydb-empty:	@docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "DROP DATABASE IF EXISTS $(DB_NAME)"	@echo Database $(DB_NAME) dropped	@docker-compose exec -T $(DB_HOST) mysql -u"$(DB_USER)" -p"$(DB_PASSWORD)" -e "CREATE DATABASE $(DB_NAME)"

Un autre exemple pour afficher en continu le contenu du fichier drupal_debug.txt (voir : Drupal - Découvrez la fonction ddm, pour débuguer même en aveugle) :

## dd-tail	: show the tail of drupal-debug.txt file.PHONY: dd-taildd-tail:	tail -f $(LOCAL_TMP_PATH)/drupal_debug.txt

Vous voyez ici l'utilisation de variables, comme $(DB_HOST) qui sont définies dans le fichier .env :

Image

.env variables

À force d'ajouter des rules au fur et a mesure, j'ai finis par en avoir pas mal. J'ai fais un petit boulot de généralisation et tout est maintenant sur un dépôt github : https://github.com/kgaut/drupal-makefile.

L'installation est relativement rapide est simple :

Ajoutez le package à vos dépendances

composer require kgaut/drupal-makefile

Modifiez votre fichier .env et ajoutez les variables nécessaires présentées ici : https://github.com/kgaut/drupal-makefile/blob/master/.env.example

Si vous n'avez pas d'environnement de prod ou de preprod, vous pouvez supprimer les variables correspondantes ou bien les garder pour plus tard.

Enfin, il faudra lier ce nouveau fichier makefile à votre fichier makefile principal, à la racine de votre projet, en ajoutant après la ligne include .env, la ligne suivante :

include vendor/kgaut/drupal-makefile/drupal.mk

Les différentes rules sont présentées ici : https://github.com/kgaut/drupal-makefile#availables-rules

Une que j'utilise régulièrement est : db-prod-import qui fait en fait appel à plein d'autres rules :

Suppression de la base de données local et récréation (via db-empty)
Récupération du dump de base de données le plus récent en prod (via db-prod-get)
Import de ce dump en local (db-import)
Vidage des cache, mises à jour de base de données, import de la configuration et affiche un lien de connexion en tant qu'utilisateur 1 (via db-post-import)

Évidement tout ça est très lié à mon organisation de projet, mais vous pouvez certainement en récupérer des idées ou de l'inspiration.

N'hésitez-pas à suggérer des modifications ou des améliorations !

Personnaliser un export CSV avec Entity Export CSV sur Drupal 8

Le module Entity Export CSV nous permet de mettre en place très rapidement des exports CSV pour n'importe quelle type d'entité de contenu de Drupal 8. Parfois, nous pouvons avoir besoin de personnaliser les exports réalisés, comme exporter 2 informations différentes d'un même champs Entity Reference par exemple. Nous allons découvrir comment procéder pour personnaliser nos exports CSV.

Par lequipe.tech
L'Équipe.tech

Fin de vie de Drupal 7 et 8, êtes-vous prêts ?

Les versions 7 et 8 de Drupal arriveront en fin de vie en novembre 2021.

Qu’entend-on par fin de vie ?

La "fin de vie" annonce qu’il n’y aura plus de mise à jour de sécurité pour les versions en question.
À partir de cette date (novembre 2021), les failles qui seront découvertes et corrigées sur la version 9 ne le seront plus sur les versions 7 et 8.

Votre site sera donc vulnérable aux attaques.

Par kgaut
Kevin Gautreau

Drupal 8 & 9 - Hook Update - Tester si une table existe, la supprimer et la recréer

Pour un projet drupal, j'avais besoin de créer deux tables identiques dans une base de données séparée sur un serveur différent, afin de servir de cache pour un webservice.

Voici le code que j'ai utilisé pour créer ces tables avec un test si les tables existe avant de les récréer (si j'ai besoin de mettre à jour le modèle par exemple).

Définition du schéma de ma table dans le fichier MODULE.install :

# Le nom de cette fonction est personnel, je n'utilise pas le HOOK_schema() icifunction MODULE_schema_db_cache() {  $schema['proposals'] = [    'description' => 'distribProposal',    'fields' => [],    'primary key' => ['id'],    'indexes' => [      'id' => ['id'],      'room_type_code' => ['room_type_code'],    ],  ];   $schema['proposals']['fields']['id'] = [    'description' => 'id',    'type' => 'serial',    'not null' => TRUE,    'unsigned' => TRUE,  ];   $schema['proposals']['fields']['name'] = [    'type' => 'varchar',    'length' => 255,  ];  //Ajout des champs supplémentaires ici}

Création des tables via un hook_update() :

/** * DB cache ws - Creation tables */function MODULE_core_update_8005() {  try {    // Je passe sur une autre base de données définis dans mes settings     // ici : $databases['cache_ws']['default']    Database::setActiveConnection('cache_ws');    // Je récupère le schéma    $db = MODULE_schema_db_cache();    if($schema = Database::getConnection()->schema()) {      // Je veux avoir deux fois la même table afin de passer sur la seconde quand je met à jour la première      $tables = ['proposals_a', 'proposals_b'];      foreach ($tables as $table) {        // Si la table existe déjà je la supprime        if ($schema->tableExists($table)) {          $schema->dropTable($table);        }        // Puis je la recrée        $schema->createTable($table, $db['proposals']);      }    }  }  catch (Exception $e) {    // En cas de soucis je commence par basculer sur la base de donnée par défaut    Database::setActiveConnection();     // Puis je lance une erreur    throw new \Drupal\Core\Utility\UpdateException(t('vacanceole_core_update_8005 error : @message', ['@message' => $e->getMessage()]));  }    // Si tout s'est bien passé je repasse sur la base de données par défaut.  Database::setActiveConnection();  return t('Tables proposals_a and proposals_b successfully created');}

Pour bien faire je devrais ajouter l'installation de mes tables dans un hook install, en faisant appel à la fonction que je viens de définir :

function MODULE_install() {  MODULE_update_8005();}

 

Par admin

Drupal 9 est là !

Logo Drupal

5 ans après la version 8, Drupal 9 est sorti en version stable ce mercredi 3 juin 2020.

Les nouveautés sont nombreuses depuis Drupal 8.0 : gestion des médias, éditeur de mise en page, gestion des flux de publication, intégration avec Composer...

Une évolution dans la continuité...

...plutôt qu'une révolution.

Drupal 7 -> Drupal 8 & Drupal 8 -> Drupal 9 -> Drupal 10

Contrairement au passage de Drupal 7 à Drupal 8, le passage de Drupal 8 à Drupal 9 sera très simple.

En effet, depuis Drupal 8.0.0, la gestion du code a changé :

  • De nouvelles fonctionnalités sont ajoutées entre les versions intermédiaires (8.1.* => 8.2.*)
  • Entre ces mêmes versions intermédiaires, certaines fonctions ou méthodes de l'API Drupal peuvent être signalées comme « dépréciées » (deprecated) mais restent fonctionnelles.
  • Ce sont ces dépréciations qui sont aujourd'hui supprimées dans Drupal 9

Pour faire simple : Drupal 9.0 = Drupal 8.9 - Toutes les fonctions dépréciées.

API Drupal 8.9 et API Drupal 9.0

De nombreux modules sont déjà compatibles et de nombreux outils existent pour rendre vos modules personnalisés compatibles avec la nouvelle version du CMS.

Questions / Réponses

Quels sont les prérequis pour Drupal 9 ?

  • PHP 7.3 minimum
  • MySQL 5.7.8 minimum
  • Drush 10
  • Composer grandement recommandé !

Je viens de commencer un projet sous Drupal 8. Faut-il que je recommence tout sous Drupal 9 ?

Non, vous pourrez facilement mettre à jour le core de Drupal vers la version 9 une fois que tous les modules tiers que vous utilisez seront compatibles.

Comment tester Drupal 9 ?

Avec composer c'est très simple et cela se fait en deux lignes :

composer create-project drupal/recommended-project:9.0.0 drupal9<br />php drupal9/web/core/scripts/drupal quick-start demo_umami

Cela vous lancera l'installation d'un drupal 9 avec un site de démo présentant des recettes de cuisite.

Comment migrer mon site Drupal 8 vers Drupal 9 ?

  1. Assurez-vous que votre hébergeur / serveur répond bien aux prérequis pour Drupal 9 (voir plus haut)
  2. Faites les mises à jour du core, la migration vers Drupal 9 ne sera possible que pour les version 8.8.* et supérieures.
  3. Faites les mises à jour des modules tiers en vous assurant que les modules sont compatibles avec Drupal 9.
  4. Mettez votre code custom en conformité avec l'API de Drupal en supprimant les appels dépréciés.
  5. Mettez le core à jour.

« et voila ! »

Comment savoir si un module est compatible avec Drupal 9 ?

Cela peut-être vérifié de plusieurs manière. Pour commencer sur la page du projet sur drupal.org, dans les informations de téléchargement :

Drupal 9 project

Aussi vous pourrez trouver l'information équivalente sur le fichier .info.yml du projet.

Enfin, vous pouvez faire des recherche directement sur le site https://dev.acquia.com/drupal9/deprecation_status

J'ai un site Drupal 7, dois-je passer par Drupal 8 avant de migrer sous Drupal 9 ?

Pas forcement, via l'API de migration (Migrate API) il est possible de migrer un Drupal 7 directement sous Drupal 9.

Quand s'arrêtera le support de Drupal 7 ? De Drupal 8 ?

Le support de Drupal 7 devait s'arrêter aujourd'hui, il a finalement été étendu à la fin 2021, le support de Drupal 8 s’arrêtera aussi au même moment.

J'ai un site Drupal 7 qui ne peut pas être mis à jour, que se passera-t-il à la fin du support ?

Vous ne recevrez plus de mise à jour de sécurité pour votre site, il sera donc vulnérable.

Un programme de support payant, assuré par des entreprises tierces sera mis en place.

Quand Drupal 9.1 sortira-t-il ?

Drupal devrait garder les cycles de 6 mois mis en place depuis la version 8.0, théoriquement la version 9.1 devrait sortir le 2 décembre 2020.

Quand Drupal 10 sortira-t-il ?

Toujours en théorie, Drupal 10 sortira au deuxième trimestre 2022.

Plus d'informations

Toutes les informations sur Drupal 9 : https://www.drupal.org/9

Migrer de Drupal 8 à Drupal 9 : https://www.drupal.org/about/9/from-8

Statut des modules : https://dev.acquia.com/drupal9/deprecation_status


Vous avez des questions ? N'hésitez-pas à les poser sur le Slack de la communauté francophone ou sur Twitter avec le hashtag : #drupal9FR. Nous les ajouterons à cet article si nous pouvons y répondre.

Par Christophe MOLLET
Christophe Mollet

Comment créer un module avec Drupal 8 ?

Un module est un ensemble de fichiers PHP, Javascript et/ou CSS qui étendent les fonctionnalités du site et en ajoutent de nouvelles

Nous allons voir dans cet article comment créer un module avec Drupal 8.

Par kgaut
Kevin Gautreau

Drupal 8 - Modifier les onglets (local tasks)

Voici comment modifier un onglet Local Task dans le langage drupal, en utilisant le hook HOOK_local_tasks_alter:

function MONMODULE_local_tasks_alter(&$local_tasks) {  $local_tasks['entity.user.edit_form']['title'] = 'Modifier mes informations';}

La clé est définie dans la déclaration de l'élément :

Image

Drupal local task

 

Ici uniquement le titre est changé,il est possible de modifier les autres propriété, comme l'ordre (weight), la destination de l'élément...

Par Q__nt_n
Adhérent
Quentin Fonteneau

Exporter/Importer une base de données avec Drush

Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 07/05/2020 - 12:26

Thèmes :

Pour exporter sa base de données :

drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql

Pour importer sa base données :

gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc

 

Créer un sous-thème avec Drupal 8

Créer un thème ou un sous-thème dédié à un projet Drupal 8 fait partie des actions de base lors du démarrage du projet. Un thème dédié pour le front office, mais aussi un autre thème pour le back office. Ainsi toute personnalisation du rendu en sera facilité, par l'ajout de région, styles CSS ou encore librairies JS le cas échéant. Créer un sous-thème se fait en quelques minutes.

Intégrer automatiquement un mail via les styles CSS avec Drupal 8

Comment mettre des couleurs dans vos mails émis depuis votre site Drupal 8 ? Bien souvent, intégrer les mails émis par un site Drupal 8, ou de n'importe quel site web, peut s'avérer (très) chronophage, avec des contraintes fortes au niveau du rendu du mail pour disposer d'un rendu correct sur tous les types de courrielleur ou webmail. Découvrez une méthode pour faciliter l'intégration des emails avec de l'inline CSS automatisée.

Par vincent59
Vincent Liefooghe

Migration Media et Images Inline

Migration Media et Images Inline

Dans la série d'articles sur la migration de mon site https://www.vincentliefooghe.net/content/migration-drupal-7-vers-drupal-8 j'en viens maintenant à une partie qui m'a pris pas mal de temps et demandé un peu de développement.

Sur mon site en Drupal 7, j'avais utilisé le module Media_Wysiwyg et Colorbox, qui me permettaient d'insérer des images directement dans le texte.

Je n'ai pas trouvé d'équivalent sous Drupal 8, mais en utilisant comme format d'affichage "Colorbox" pour le champ media_image, ceci répond à mon besoin : ouvrir un champ image dans une "lightbox".

Image
Définition du format d'affichage Media Image

Il reste donc à convertir les fichiers en média, et ensuite à convertir, dans le corps du texte de chaque contenu, les tags "colorbox" en tags "drupal media".

Création des Media liés aux fichiers

Lors de la migration, les fichiers ont bien été importés. Par contre ils ne sont pas reconnus comme media par Drupal ,et donc pas réutilisables.

Après avoir cherché - en vain - des modules qui géraient ceci, j'ai fini par passer par un bout de programme PHP qui utilise les fonctions de Drupal pour réaliser cette opération.

Le code php est le suivant :

query("select * from file_managed where filemime like 'image%'")->fetchAll();

foreach ($results as $file ) {
  echo "File name:",$file->filename," Id : ",$file->fid," mime : ",$file->filemime," uid : ",$file->uid;
  echo "Creation du Media Image pour ",$file->filename,PHP_EOL;
  $media = Media::create([
  'bundle' => 'image',
  'uid' => $file->uid,
  'langcode' => $file->langcode,
  'field_media_image' => [
    'target_id' => $file->fid,
    'alt' => $file->filename
   ]

  ]);

  $media->setPublished(TRUE);
  $retour=$media->save();

  if ( $retour != 1 ) {
    echo "Retour KO ? ",$retour,PHP_EOL;
  }

}

return (TRUE);

 

On peut le lancer avec drush, via la commande :

 

drush --uri=drupal.loc scr /chemin/vers/mon/fichier.php

Après cette étape, on récupère bien dans la librairies de media tous les fichiers

Reprise des images inline

 

Pour convertir les tags, j'ai développé un programme PHP qui va remplacer les instructions inline Colorbox, par exemple

[[{"type":"media","view_mode":"colorbox","fid":"88","attributes":{"alt":"","class":"media-image","height":"300","typeof":"foaf:Image","width":"494"}}]]

par

Le script sera lancé avec en paramètre le Node Id à traiter :

php mediaInline.php -i nid

Par exemple

php mediaInline.php -i 136

Note : j'ai fait le choix de traiter les contenus un par un. Au total, j'avais identifié une vingtaine d'articles concernés. La migration unitaire me permettait de vérifier le traitement pour chacun.

Afin de voir le résultat, il faut vider le cache Drupal avec la commande :

drush cr

 

vincentl
lun 20/04/2020 - 21:54

Catégorie

Ajouter un commentaire

Par vincent59
Vincent Liefooghe

Migration avec le module migrate_upgrade

Migration avec le module migrate_upgrade

Installation et activation des modules Drush requis

On va installer les 2 modules suivants : migrate_upgrade, migrate_tools.

composer require drupal/migrate_upgrade composer require drupal/migrate_tools 

Puis activer les modules :

drush pm:enable migrate_upgrade migrate_tools -y 

Dans le fichier settings.php , il faut ajouter la définition de la base source.

Important : elle doit s'appeler migrate.

Par exemple :

$databases['migrate']['default'] =
  array ( 'database' => 'dbdrupal7',
  'username' => 'user_drupal7',
  'password' => 'mdp_drupal7',
  'prefix' => '',
  'host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql'
);

Générer la migration Drupal 7 vers Drupal 8

Dans la version que j'ai installé, on peut utiliser migrate_upgrade pour générer les scripts de migration, qui seront lancés avec drush.

Prérequis

Attention : à cause d'une incompatibilité avec drush 10, cette fonction nécessite que l'on modifie le fichier vendor/drush/drush/includes/drush.inc pour ajouter la définition de drush_print :

function drush_print($message = '', $indent = 0, $handle = NULL, $newline = TRUE) {
  $msg = str_repeat(' ', $indent) . (string)$message;
  if ($newline) {
    $msg .= "\n";
  }
  if (($charset = 'UTF-8' ) && function_exists('iconv')) {
    $msg = iconv('UTF-8', $charset, $msg);
  }
  if (!$handle) {
    $handle = STDOUT;
  }

  fwrite($handle, $msg);

}

 

Sinon on a le message :

drush migrate-upgrade --legacy-db-key=migrate --configure-only [error] Error: Call to undefined function drush_get_option() in drush_print()

Lancer la commande avec le chemin vers le répertoire source "legacy", ce qui permet de migrer les fichiers également :

drush migrate-upgrade --legacy-db-key=migrate --legacy-root /var/www/drupal7/vincentl --migration-prefix=upg1_ --configure-only

On peut ensuite voir le résultat avec la commande drush migrate-status

Et on peut lancer la migration avec :

drush migrate:import upg1_d7_taxonomy_vocabulary
drush migrate:import upg1_d7_taxonomy_term_categorie
drush migrate:import upg1_d7_taxonomy_term_tags
drush migrate-import --group=migrate_drupal_7

Note : je lance d'abord les migrations de taxonomie pour que la génération des liens de menu se passe correctement. Comme dit précédemment, le processus est assez itératif et a demandé plusieurs essais avant de trouver les bons réglages.

Après cette étape, le contenu a été migré, ainsi que les types de contenu, les menus, etc.

Il reste à faire quelques mises au point et reprise de paramétrage sur les formats de texte (insertion du bouton media par exemple), ainsi que refaire le thème, et traiter le cas des images inline.

 

vincentl
lun 20/04/2020 - 21:42

Catégorie
Tag

Ajouter un commentaire

Pages