Planète

Par anavarre

Meetup Drupal Lyon - Présentation sur la sécurité

Pour le dernier meetup Drupal Lyon avant la coupure de l'été, j'ai fait une présentation sur la sécurité. Puisque le panel est assez hétérogène et qu'on parle aussi bien à des nouveaux venus sur Drupal qu'à des experts, je me suis dit qu'il serait intéressant de faire une présentation à la fois high-level et qui récapitule un ensemble de bonnes pratiques sur la sécurité qu'on a parfois tendance à oublier. L'idée principale c'est : ne pensez pas être "nul" en sécurité ou pas assez expert pour en parler ou vous y coller.

Par anavarre

Bilan 2013 et perspectives 2014

L'année 2013 aura littéralement été une année en demi-teinte pour DrupalFacile. Les 6 premiers mois de l'année ont été intenses avec des vidéos postées régulièrement et même un record de traffic battu en mars (6924 visiteurs uniques). Hélas, depuis avant l'été, le site est au point mort et DrupalFacile reçoit régulièrement des encouragements et des demandes de vidéos qui sont précieusement consignées !

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

PLes thèmes avec twig

Présentation du fonctionnement des thèmes customs que Drupal
8 met à disposition.
De la déclaration en php en passant par le template Twig, du
rendu à la surcharge, cet article essaiera d'aborder
la majeure partie des points concernant les thèmes.

Créer des entrées de menu sans lien avec Drupal 8

Il n'est pas rare de vouloir regrouper des liens d'un menu principal d'un site, afin de les grouper par thématique, ou par cible, ou tout autre critère. Une des manières la plus simple d'arriver à ses fins est tout simplement de créer des entrées dans le menu principal de votre site Drupal 8, mais des entrées sans lien, vous permettant de les distinguer comme en-tête de section. Et aussi pour ne pas avoir à créer un page spéciale, à cet unique usage, du fait que les entrées d'un menu Drupal 8 doivent obligatoirement avoir un lien. Découvrons comment parvenir à nos fins.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Promotion des autres blogs Drupaliste

Pour mon premier billet de blog, je vais faire la promotion des blogs de développeurs Drupal.
Ces blogs m'ont inspirés et m'ont dépannés dans certains projets professionnels

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Promotion des autres blogs Drupaliste

Pour ce premier billet de blog, j'ai envie de faire la promotion des blogs de drupalistes. À force de lire des articles de ces personnes j'ai eu envie à mon tour, d'en écrire afin d'essayer d'apporter un peu plus de contenu francophone concernant Drupal.
Voici les blogs que je fréquente et que je lis dès qu'un nouvel article sort.

Par kgaut
Kevin Gautreau

Drupal 8 - Migrate - exemples réels de migrations

Ce site à été construit à l'origine sous Drupal 6, migré sous drupal 7 en 2012, Je suis en train de préparer la migration de ce site vers Drupal 8 via la Migrate API.

Vu que je galère pas mal à trouver des exemples à jours, complets et qui fonctionne, je me suis dis que ce serait intéressant de partager mon expérience, le plus simple étant de partager directement mon module de migration, je l'ai donc mis directement sur github afin que vous puissiez piocher directement dedans pour voir comment je migre l'intégralité du contenu de ce site vers une installation de Drupal 8.

J'ai tenté de faire un readme assez complet, mais les recettes YAML ne sont pas encore super bien documentées, c'est à faire... Pour l'ensemble, c'est du glané à droite à gauche, sur internet mais aussi dans les exemples du module migrate_plus.

En vrac ce que vous pourrez trouver :

  • Explications de base sur la mise en oeuvre de migrate
  • Migration de termes de taxonomie (les vocabulaires étant été recréés préalablement)
  • Migration de noeuds (pareil, les types de contenus et les champs sont recréés manuellement)
  • Migration de « managed files » (fichiers liés à des noeuds (comme l'image d'introduction de ce post)
  • Migration et traitement (process) de zone  « wysiwyg » avec fichiers intégrés : j'en ai profité pour « ranger » l'ensemble des fichiers uploadés dans ckeditor.
  • Migration d'alias d'url (module path)
  • Migration de redirections (module redirect)

Sera fait dans les prochains jours :

  • Migration de commentaires
  • Migration de flag (les noeuds de ce blog ont des "likes" qui sont des flags.
  • Documentation des fichiers YAML, Sources et Process.

Comme je l'ai dis, je me suis beaucoup inspiré du sous-module migrate_example de migrate_plus, c'est pourquoi il reste encore pas mal de commentaire en anglais faisant référence à des types de contenu « beer », qu'il faut que j'adapte.

Remarque : Je ne suis pas un expert de migrate, l'ensemble est probablement améliorable, mais comme disait un sage : « le mieux est l'ennemi du bien », je cherche avant tout à avoir quelque chose qui fonctionne. Ceci étant dit, n'hésitez-pas à me faire part de vos remarques, commentaires ou questions via les commentaires ou bien les issues sur Github ! Je suis preneur de toute idée d'amélioration.

Le tout est disponible sur Github : https://github.com/kgaut/kgaut_migrate.


 

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Et c'est r'parti

Et c'est r'parti pour un DrupalCamp. Après Nantes nous voici conviés, pour ce rendez-vous 2017, à Lannion.

 

Par admin

Drupalcamp Lannion, au boulot ou en famille ?

Comme tous les ans, les organisateurs des drupalcamp lancent des appels à partenariat.
Sur le site de l'événement, vous trouverez le détail des offres.
Avis aux entreprises : nous avons besoin de vous !

Mais cette année, nous avons aussi pensé aux participants et à leurs familles. Le camp se déroulant du 27 au 29 octobre prochain, pendant les vacances de la Toussaint, nous nous sommes dit que certains pourraient être tentés par une expérience bretonne un peu plus conséquente.

Alors si l'envie vous prend de profiter du camp pour visiter le coin, nous vous proposons de répondre à ce questionnaire rapide. Avec un peu de chance, nous pourrions vous proposer quelque chose.

Par kgaut
Kevin Gautreau

Docker image pour SolR avec plusieurs cores

Pour un projet en cours sur Drupal 8, j'ai besoin d'un moteur de recherche avec plusieurs indexes. J'utilise évidement le module search_api avec un moteur de recherche SolR, Vu que je suis en mode "développement" je vais utiliser une image docker qui me fournira une installation fonctionnelle de SolR, directement plugable avec Drupal.

Par habitude j'utilise les images de Thiebaud Schmittlin : https://github.com/TehesFR/docker-solr

Une fois docker installé l'image se lance avec la commande suivante :

docker run -p 8080:8983 tehes/docker-solr:4.10

Cela lancera une image SolR 4.10 sur le port 8080, si on souhaite utiliser une autre version du moteur il suffit d'adapter le tag :

docker run -p 8080:8983 tehes/docker-solr:6.6

Et si besoin de plusieurs indexes ?

Par contre dans mon cas, j'avais besoin de plusieurs cores pour mes différents indexes, j'ai donc adapté son image pour en créer une nouvelle : https://github.com/kgaut/docker-solr-multicore

C'est du « quick'n'Dirty » Je me suis basé uniquement sur la version 6.6 de SolR, la seule modification par rapport au DockerFile original est l'ajout d'une variable NB_CORES qui est par défaut à 4. L'image créé donc 4 core permettant d'avoir 4 indexes.

J'ai mis mon image sur Docker hub : https://hub.docker.com/r/kgaut/docker-solr-multicore/

Pour lancer l'image :

docker run -p 8080:8983 kgaut/docker-solr-multicore

4 cores et pourquoi pas 8 ?

Si jamais vous avez besoin de changer le nombre de cores, vous pouvez modifier cette image de la façon suivante :

git clone git@github.com:kgaut/docker-solr-multicore.git my-docker-solr-multicore
cd my-docker-solr-multicore

Modifiez le fichier DockerFile et à  la ligne 11 remplacez "env NB_CONTAINER 4" par "env NB_CONTAINER 8"

Construisez votre image (cette étape peut prendre un peu de temps) :

docker build -t my-docker-solr-multicore .

une fois terminée, lancez l'image :

docker run -p 8080:8983 my-docker-solr-multicore

et bim ! 8 cores :

Améliorations

Je suis loin d'être un expert docker, et si vous connaissez un moyen de passer le nombre de core voulu lors du lancement de l'image, je suis preneur. Même si vu que les cores sont créés au moment du build de l'image, je ne suis pas bien sur que cela soit possible...

Si vous avez d'autres idées d'améliorations, n'hésitez-pas, merci !

Tags: 

 

Par kgaut
Kevin Gautreau

MesPronos : Une nouvelle saison de pronostics commence

Comme pour la saison dernière, mon site mespronos.net vous proposera de faire vos pronostics sur la saison 2017-2018 de « Ligue 1 Conforama » (oui, c'est comme ça qu'il faut dire maintenant...)

C'est toujours évidement gratuit, toujours la possibilité aussi de créer ses propres groupes pour faire un concours entre amis ou collègues.

Commencé à l'origine pour mettre les mains dans drupal 8 à l'époque des premières version alpha, le module est en version alpha depuis un an maintenant, j'ai bon espoir de sortir une version beta d'ici le mondial 2018. Le code est disponible pour les curieux sur github,  ainsi que sur drupal.org. Alors, oui avant de sortir une version stable, il y a beaucoup de chose à refactoriser afin que le code soit plus propre !

 

 

Tags: 

 

Par Artusamak
Julien Dubois

Contourner l'erreur : "The SQL storage cannot change the schema for an existing field"

Contourner l'erreur : "The SQL storage cannot change the schema for an existing field"
admin
mar 11/07/2017 - 09:02

null

Corps

Je vous partage aujourd’hui une astuce qui peut vous épargner de perdre quelques cheveux. Il s’agit de l’erreur suivante :

The SQL storage cannot change the schema for an existing field (field_meta_keywords in taxonomy_term entity) with data.

Cette erreur survient lorsque vous avez créé un champ et que vous avez configuré ses settings, que cette configuration est passée en production et que vos utilisateurs ont créé du contenu qui remplit les données de ce champ.
Il arrive que vous ayez besoin de modifier la configuration de ce champ. Simple me direz-vous ? Et bien non, pas toujours car Drupal ne va pas vous laisser faire (à raison).

Selon le type de champ que vous modifiez, les settings du champ peuvent être utilisés pour créer les colonnes de la table. Avec du contenu dans la table, hors de question de vous laisser faire n’importe quoi au risque de perdre des données. Drupal va donc lever une exception (FieldStorageDefinitionUpdateForbiddenException) qui est assez explicite, pas de mise à jour du stockage du champ lorsque des données sont présentes.

Comment contourner cela ?

Vous pourriez tenter de modifier directement le fichier .yml de configuration de l’instance du champ à la main mais cela ne contournerait pas votre problème, Drupal comprendrait toujours que vous voulez modifier la configuration et vous protégerait contre la perte de vos données.

La seule solution pour cela est de travailler à un plus bas niveau via un hook_update_N() pour faire le changement de configuration. Il faudra travailler directement sur les fonctions de base de données pour manipuler les colonnes.

Voici donc le code qui permet de faire cela :

/**
* Changement du schéma de field_meta_keywords stocké dans la configuration.
*/
function project_social_update_8006() {
  // Augmentation de la longueur max du champ de 255 à 500 caractères.
  try {
    // 1. On vide le cache de la définition des champs pour travailler les mains libres.
    \Drupal::service('entity_field.manager')->clearCachedFieldDefinitions();

    // 2. On récupère la définition de notre instance de champ depuis les fichiers de config et on la sauve.
    $storage_definition = \Drupal::service('entity_field.manager')->getFieldStorageDefinitions('taxonomy_term')['field_meta_keywords'];
    \Drupal::service('entity.last_installed_schema.repository')->setLastInstalledFieldStorageDefinition($storage_definition);

    // 3. On récupère la définition du champ.
    $field_schema = \Drupal::keyValue('entity.storage_schema.sql')->get('taxonomy_term.field_schema_data.field_meta_keywords');

    // 4. On définit la nouvelle valeur de notre configuration.
    $field_schema['taxonomy_term__field_meta_keywords']['fields']['field_meta_keywords_value']['length'] = 500;
    // 6. On applique notre nouvelle configuration dans le stockage du champ.
    \Drupal::keyValue('entity.storage_schema.sql')->set('taxonomy_term.field_schema_data.field_meta_keywords', $field_schema);
  }
  catch (SchemaException $e) {
    \Drupal::logger('project_social')->error($e->getMessage());
  }
}

La solution a été réalisée suite à ce patch très inspiré de Berdir qui montre la voie de l'implémentation : https://www.drupal.org/node/2641828#comment-10711058

Bien que l'on ait utilisé les fonctions de bas niveau pour faire les modifications, on aura tout de même exporté la configuration dans son état final pour s'assurer que le la longueur du champ de l'exemple est bien définie à 500 caractères. Cela permet de ne pas détecter de diff une fois notre correctif effectué. (L'export YML et la définition en base doivent être raccords).

Il est à noter évidemment que si vous aviez dû faire des modifications plus compliquée du type supprimer une colonne il aurait fallu des étapes supplémentaires pour ne pas perdre des données. Vous saurez maintenant comment vous y prendre.

 

 

Image de couverture par Florent Darraultvia Wikimedia Commons.

Catégories
Développement
Drupal
Drupal 8
Tags
configuration
fatal

Insérer des pièces jointes dans un corps de texte avec Drupal 8

Drupal 8 permet nativement d'insérer des images au sein d'un corps de texte, à condition d'utiliser bien sûr un format de texte qui autorise cette fonctionnalité. Mais peut-on faire de même et insérer facilement des documents, des pièces jointes, au sein d'un texte de base ? Nous disposons bien sûr de nombreuses solutions avec Drupal 8 pour associer des documents à un contenu. Découvrons une solution très simple, configurable en une minute top chrono, pour pouvoir charger un document dans un corps de texte

Créer un mega menu avec Drupal 8

Créer un mega menu responsive est souvent un pré-requis régulier sur tout projet, Drupal 8 ou autre. Et si nous pouvons trouver quelques solutions proposant de créer des mega menus facilement, très souvent, ces solutions restent assez rigides et peuvent difficilement être adaptées aux pré-requis d'un projet. Mais qu'est-ce qu'un mega menu ? Ce n'est ni plus ni moins qu'un menu qui contient un peu plus qu'une liste de liens, avec du texte, des images, etc. Plutôt qu'une solution rigide, qui peut convenir si nous sommes prêts à nous plier à ses exigences, nous pouvons aussi utiliser une solution plus souple, ouverte, mais qui demande aussi un peu plus de travail au niveau du theming. Découvrons comment construire un mega menu avec le module Simple Mega Menu.

Les 13 défauts mythiques (ou pas) de Drupal 8

Ayant eu l'occasion de lire quelques récents comparatifs de Drupal et SPIP,  j'ai découvert une perception de Drupal qui n'est pas la mienne. Loin de moi l'idée de vouloir comparer Drupal et SPIP. En effet, je connais très mal SPIP, tout du moins seulement en tant qu'utilisateur de base, et beaucoup moins que Drupal, et donc je ne m'aventurerai pas sur une telle comparaison. Aussi, j'ai souhaité partager ces 13 défauts mythiques, réels ou perçus de Drupal 8, que j'ai pu (re)-découvrir récemment et qui me paraissent mériter un contre point.

Pages