Créer une entité Drupal 8 en 10 secondes top chrono
Comment (bien) faire du Drupal ? Faut-il utiliser ce module ou préférer le coder ? Mon budget permet-il de réaliser ces développements ? Ne vous posez plus ces questions et venez vous former avec des experts !
Comment faire du Drupal ? Faut-il utiliser ce module ou préférer le coder ? Mon budget permet-il de réaliser ces développements ? Ne vous posez plus ces questions et venez vous former avec des experts !
Plusieurs failles de sécurité Drupal ont été annoncées cette semaine. Le danger est réel. Le correctif pour la faille la plus importante est simple à appliquer. Ne laissez pas votre site Drupal exposé à ces risques.
Plusieurs failles de sécurité Drupal ont été annoncées cette semaine. Le danger est réèl. Le correctif pour la faille la plus importante est simple à appliquer. Ne laissez pas votre site Drupal exposé à ces risques.
Le Forum PHP 2014, l'événement majeur de l'AFUP et la communauté PHP francophone depuis plus de 10 ans, aura lieu à Montrouge les 23 et 24 octobre.
Il s'agit d'un rendez-vous incontournable autour du langage PHP, avec cette année les grandes thématiques suivantes :
et bien sur des têtes d'affiches célèbres, que vous retrouverez sur le programme de ce grand événement : http://afup.org/pages/forumphp2014/sessions.php
On y parlera de Drupal (Live coding : construisons ensemble notre premier site Drupal 8) ou d'outils intéressant Drupal et d'autres langages (platform.sh le PAAS qui résout le casse tête dev/staging/prod)
Les membres de l'association Drupal France et Francophonie, à jour de cotisation, peuvent bénéficier d'une remise sur le prix de l'entrée. Pour cela, il suffit d'envoyer un courriel au bureau (bureau [à] listes.drupalfr.org) pour que l'on vous communique le code "coupon".
Enfin, de nombreuses surprises vous attendent comme les ateliers pratiques, les cliniques co-organisés par les sponsors, une soirée communautaire, etc...
Avec l'intégration de composants de Symfony2, l'adoption du format YAML, la refonte complète de Drupal 8 vers la programmation orientée objet, etc. l'initialisation d'un module Drupal 8 est devenue plus complexe (au sens chronophage) que sur Drupal 7 où il suffisait de déclarer son module (fichier .info) et de créer un fichier .module pour pouvoir commencer tout de suite à développer des fonctionnalités métier.
Avec l'intégration de composants de Symfony2, l'adoption du format YAML, la refonte complète de Drupal 8 vers la programmation orientée objet, etc. l'initialisation d'un module Drupal 8 est devenue plus complexe (au sens chronophage) que sur Drupal 7 où il suffisait de déclarer son module (fichier .info) et de créer un fichier .module pour pouvoir commencer tout de suite à développer des fonctionnalités métier.
L'association Drupal France et Francophonie (DrupalFR) est partenaire de Drupagora 2014. Il s'agit d'un événement dédié aux Chefs de Projets et DSI.
Pour l'édition 2014, un programme de qualité est proposé avec les thématiques suivantes :
Enfin, grâce à l'association, vous pouvez bénéficier d'une remise sur le prix d'entrée de 50 % jusqu'au 24 octobre et après 30 %.
Ce coupon de réduction est disponible sur simple demande à bureau [ALT] listes [POINT] drupalfr [POINT] org, si vous êtes membre de l'association et à jour de votre cotisation
Le programme de Drupagora 2014
Site de l'événement Drupagora 2014
Depuis Drupal7, on peut ajouter des champs à un terme de taxonomie.
Ceci peut être intéressant pour ajouter une image ou d'autres informations. Mais comment dans ce cas chercher un terme de taxonomie sur la base de ce champ spécifique ?
Imaginous que nous avons une taxonomie de type "Music Categories", sur laquelle nous ajoutons un champ spécifique, "music_code", qui est utilisé dans une interface avec une autre système.
Nous avons alors 2 options :
Dans cet article, j'explique comme retrouver un terme, en se basant sur un champ spécifique, en utilisant EntityFieldQuery.
Cet example peut être lancé en ligne de commande, sans être inclus dans un module. Voyons le code :
<?php $_SERVER['REMOTE_ADDR']='localhost'; // drupal bootstrap $drupal_directory = "/var/www/drupal"; chdir($drupal_directory); define('DRUPAL_ROOT', getcwd()); require_once './includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // Retrieve Vocabulary ID (VID) $vocabulary_name='categories'; $vocab = taxonomy_vocabulary_machine_name_load($vocabulary_name); // bundle = Machine Name of the vocabulary $query = new EntityFieldQuery(); $query --->entityCondition('entity_type', 'taxonomy_term') ->entityCondition('bundle', $vocabulary_name) ->propertyCondition('vid', $vocab->vid) ->fieldCondition('field_music_code', 'value', 'C042', '='); $results = $query->execute(); if (!empty($results['taxonomy_term'])) { foreach($results['taxonomy_term'] as $tid) { $term = taxonomy_term_load($tid->tid); $name=$term->name; echo "Term ID = ",$term->tid," Name = ",$name,PHP_EOL; echo "Field Code Client Value = ",$term->field_music_code[LANGUAGE_NONE][0]['value'],PHP_EOL; } } else { echo "No result for this code ! ",PHP_EOL; } ?>
Les 7 premières lignes sont utilisées pour lancer le bootstrap Drupal puisque nous n'utilisons pas de module.
Ensuite, nous recherchons le Vocabulary ID, avec la fonction taxonomy_vocabulary_machine_name_load. Ceci nous donne le VID (vocabulary ID).
Nous construisons ensuite la requête Entity Query, avec plusieurs paramètres :
Dans cet exemple, le code est C042, et nous cherchons tous les termes qui utilisent ce code dans leur champ spécifique.
Le résultat, dans notre cas, est :
Term ID = 4 Name = Funk Field Code Client Value = C042
Depuis Drupal7, on peut ajouter des champs à un terme de taxonomie.
Ceci peut être intéressant pour ajouter une image ou d'autres informations. Mais comment dans ce cas chercher un terme de taxonomie sur la base de ce champ spécifique ?
Imaginous que nous avons une taxonomie de type "Music Categories", sur laquelle nous ajoutons un champ spécifique, "music_code", qui est utilisé dans une interface avec une autre système.
Nous avons alors 2 options :
Dans cet article, j'explique comme retrouver un terme, en se basant sur un champ spécifique, en utilisant EntityFieldQuery.
Cet example peut être lancé en ligne de commande, sans être inclus dans un module. Voyons le code :
<?php $_SERVER['REMOTE_ADDR']='localhost'; // drupal bootstrap $drupal_directory = "/var/www/drupal"; chdir($drupal_directory); define('DRUPAL_ROOT', getcwd()); require_once './includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // Retrieve Vocabulary ID (VID) $vocabulary_name='categories'; $vocab = taxonomy_vocabulary_machine_name_load($vocabulary_name); // bundle = Machine Name of the vocabulary $query = new EntityFieldQuery(); $query --->entityCondition('entity_type', 'taxonomy_term') ->entityCondition('bundle', $vocabulary_name) ->propertyCondition('vid', $vocab->vid) ->fieldCondition('field_music_code', 'value', 'C042', '='); $results = $query->execute(); if (!empty($results['taxonomy_term'])) { foreach($results['taxonomy_term'] as $tid) { $term = taxonomy_term_load($tid->tid); $name=$term->name; echo "Term ID = ",$term->tid," Name = ",$name,PHP_EOL; echo "Field Code Client Value = ",$term->field_music_code[LANGUAGE_NONE][0]['value'],PHP_EOL; } } else { echo "No result for this code ! ",PHP_EOL; } ?>
Les 7 premières lignes sont utilisées pour lancer le bootstrap Drupal puisque nous n'utilisons pas de module.
Ensuite, nous recherchons le Vocabulary ID, avec la fonction taxonomy_vocabulary_machine_name_load. Ceci nous donne le VID (vocabulary ID).
Nous construisons ensuite la requête Entity Query, avec plusieurs paramètres :
Dans cet exemple, le code est C042, et nous cherchons tous les termes qui utilisent ce code dans leur champ spécifique.
Le résultat, dans notre cas, est :
Term ID = 4 Name = Funk Field Code Client Value = C042
Starting with Drupal7, once can add fields to taxonomy terms.
This can be interesting to add images or other informations. But what if you want to search a taxonomy term on this custom field in a module ?
Imagine we have a list of Music Categories, and we add a custom field, "music_code", that is used to interface with one other system.
Then we have 2 options :
In this article, I explain how to retreive a term ID based on a custom field on a Drupal taxonomy.
This example can be run on the command line for testing, no need for a module.
<?php $_SERVER['REMOTE_ADDR']='localhost'; // drupal bootstrap $drupal_directory = "/var/www/drupal"; chdir($drupal_directory); define('DRUPAL_ROOT', getcwd()); require_once './includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // Retrieve Vocabulary ID (VID) $vocabulary_name='categories'; $vocab = taxonomy_vocabulary_machine_name_load($vocabulary_name); // bundle = Machine Name of the vocabulary $query = new EntityFieldQuery(); $query ->entityCondition('entity_type', 'taxonomy_term') ->entityCondition('bundle', $vocabulary_name) ->propertyCondition('vid', $vocab->vid) ->fieldCondition('field_music_code', 'value', 'C042', '='); $results = $query->execute(); if (!empty($results['taxonomy_term'])) { foreach($results['taxonomy_term'] as $tid) { $term = taxonomy_term_load($tid->tid); $name=$term->name; echo "Term ID = ",$term->tid," Name = ",$name,PHP_EOL; echo "Field Code Client Value = ",$term->field_music_code[LANGUAGE_NONE][0]['value'],PHP_EOL; } } else { echo "No result for this code ! ",PHP_EOL; } ?>
The first lines are here only to bootstrap Drupal when you are not in a module.
Then we define the Vocabulary ID, with taxonomy_vocabulary_machine_name_load function. This gives us the vocabulary ID (we suppose it is created).
Then we build the Entity Query, with several parameters :
In this example, the code is C042, and we search all terms (well, there is only one) that is using this code.
The result in our case is :
Term ID = 4 Name = Funk Field Code Client Value = C042
Starting with Drupal7, once can add fields to taxonomy terms.
This can be interesting to add images or other informations. But what if you want to search a taxonomy term on this custom field in a module ?
Imagine we have a list of Music Categories, and we add a custom field, "music_code", that is used to interface with one other system.
Then we have 2 options :
In this article, I explain how to retreive a term ID based on a custom field on a Drupal taxonomy.
This example can be run on the command line for testing, no need for a module.
<?php $_SERVER['REMOTE_ADDR']='localhost'; // drupal bootstrap $drupal_directory = "/var/www/drupal"; chdir($drupal_directory); define('DRUPAL_ROOT', getcwd()); require_once './includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // Retrieve Vocabulary ID (VID) $vocabulary_name='categories'; $vocab = taxonomy_vocabulary_machine_name_load($vocabulary_name); // bundle = Machine Name of the vocabulary $query = new EntityFieldQuery(); $query ->entityCondition('entity_type', 'taxonomy_term') ->entityCondition('bundle', $vocabulary_name) ->propertyCondition('vid', $vocab->vid) ->fieldCondition('field_music_code', 'value', 'C042', '='); $results = $query->execute(); if (!empty($results['taxonomy_term'])) { foreach($results['taxonomy_term'] as $tid) { $term = taxonomy_term_load($tid->tid); $name=$term->name; echo "Term ID = ",$term->tid," Name = ",$name,PHP_EOL; echo "Field Code Client Value = ",$term->field_music_code[LANGUAGE_NONE][0]['value'],PHP_EOL; } } else { echo "No result for this code ! ",PHP_EOL; } ?>
The first lines are here only to bootstrap Drupal when you are not in a module.
Then we define the Vocabulary ID, with taxonomy_vocabulary_machine_name_load function. This gives us the vocabulary ID (we suppose it is created).
Then we build the Entity Query, with several parameters :
In this example, the code is C042, and we search all terms (well, there is only one) that is using this code.
The result in our case is :
Term ID = 4 Name = Funk Field Code Client Value = C042
Dans un précédent billet, nous avions pu voir que l'API Drupal 8 pour manipuler les menus avait assez peu changé. Mais c'était encore avec une version alpha, et les choses ont quelque peu évolué depuis...et notamment la sortie de la première version bêta de Drupal 8. Repassons en revue quelques techniques pour pouvoir intervenir sur un menu sous Drupal 8.
Que vous soyez à la recherche d’un module pour un but précis, ou simplement à la recherche de nouvelles fonctionnalités pour votre site e-commerce il n’est pas simple de s’y retrouver dans tous ces modules. Ainsi chercher un module peu vite s’avérer long et fastidieux. Voici donc une petite liste de modules qui vous permettront de trouver votre chemin.
Comme avec le guide des modules pour Drupal 7, j’ai reparti les modules dédiés au e-commerce en différentes sections. Cette liste est une liste collaborative, ainsi, n’hésitez pas à commenter si vous trouvez des modules à ajouter !
Drupal Commerce est une suite de modules dédié au e-commerce qui s’est imposée sur Drupal.
Commerce VAT et Commerce EU VAT pour gérer les taxes en fonction du pays de votre client. Pensez à ne pas utiliser le module Taxe si vous utilisez ces deux modules. Ils sont bien maintenus et prennent en comptes les changements de lois.
Address book pour simplifier la vie de vos clients en leur permettant de créer un carnet d’adresse de façon ce qu’ils réutilisent leurs adresses dans le tunnel d’achat.
Shipping fourni un système de calcul de prix de frais de port. Ce module est un framework que vous devrez utiliser avec les modules de livraisons de votre transporteur préféré.
Commerce billy et Commerce billy mail pour générer des factures depuis votre site au format PDF afin que vos clients puissent les télécharger.
Commerce search api couplé à Search api vous permettra d’indexer les entités Drupal Commerce dans un moteur de recherche. Vous pourrez alors construire vos pages de catalogues robustes et performantes.
Search API ranges pour donner à vos visiteurs la possibilité de réduire les résultats entre deux prix.
Commerce backoffice afin d’avoir une meilleure expérience utilisateur dans la gestion et l’administration de votre boutique. Si vous avez déjà installé Commerce Kickstart v2 vous avez pu noter que le backoffice était plus beau que la version précédente et c’est principalement grâce à ce module.
Commerce reports permet aux marchands d’avoir une idée de ce qu’il se passe sur leur site. Ce module fourni un dashboard de statistiques sur l’évolution des commandes, clients…
Google analytics pour Commerce couplé à Google analytics vous permettra de traquer vos ventes en plus de vos statistiques de visites depuis le dashboard Google Analytics.
Commerce checkout redirect redirige vos utilisateurs non connectés vers une page de création de compte ou de login avant de rentrer dans le tunnel d’achat. Notez que forcer les utilisateurs à créer un compte peut être source d’abandon de paniers.
Commerce checkout complete registration offre la possibilité aux clients de compléter le tunnel d’achat en anonyme et de créer un compte après le paiement s’ils le souhaitent.
Commerce checkout progress affichera dans votre checkout une barre en haut de la page de façon à indiquer à vos clients à quelle étape du checkout ils sont.
Commerce cart expiration permet de définir une durée de validité pour un panier. Par défaut les paniers n’ont pas de limite de validité, or il peut être intéressant d’en définir une de façon à faire un peu de ménage tous les 15 jours. Ce module vous permettra de supprimer les paniers selon vos critères. Pensez à avertir vos clients qu’ils ont laissé un panier histoire de les relancer.
Commerce add to cart confirmation affichera une pop-in lors de l’ajout au panier d’un produit. Cette pop-in offrira à vos clients le choix de poursuivre leurs achats ou de commencer le tunnel d’achat.
Commerce ajax cart donnera à vos clients la possibilité d’avoir une idée de leur panier via un bloc en Ajax. Cette fonctionnalité est bien moins intrusive que la pop-in de confirmation.
Commerce stock vous aidera à gérer vos stocks et ainsi les produits disponibles à la vente.
Commerce stock notification pour ne plus louper une vente lorsque vous êtes en rupture de stock ! En cas de rupture de produit, le champ stock de la fiche de produit sera remplacé par un formulaire afin que le client puisse soumettre son email afin d’être notifié lors du réapprovisionnement.
Retour de marchandises Il arrive des fois où tout ne se passe pas comme prévu dans la vente à distance. Ce module permettra à vos clients de faire une demande de retour de leurs produits directement depuis leur commande. Notez qu’avec la loi Hamon, vous devez permettre à vos clients de pouvoir faire une demande de retour via un formulaire sur votre site.
Wishlist est utile lorsque vous voulez permettre à vos visiteurs de créer des listes d’envies afin d’acheter plus tard. Un lien permettant d’ajouter le produit dans une liste de souhaits sera inséré sur chaque fiche produit. L’utilisateur pourra par la suite retrouver ses produits préférés depuis son compte.
Commerce productpopularity vous permettra d’afficher un bloc des produits les plus populaires sur votre site.
Commerce rec permet d’afficher une liste de produits que d’autres clients ont acheté en commandant ce produit. Pratique pour booster le panier moyen, cette fonctionnalité vous demandera d’avoir déjà réalisé un certain nombres de vente pour être efficace.
Discounts et Coupon 2.x vous permettront de créer des offres spéciales pour vos clients. Vous pourrez alors faire des réductions sur des produits, des profils de clients avec ou sans limite dans le temps.
Si vous utilisez le module Features pour exporter la configuration de votre site, vous pourrez ajouter Commerce Features à votre projet pour exporter ce qui est relatif au module Commerce.
Deux solutions s’offrent à vous si vous voulez importer des données. La plus simple des solutions consiste à utiliser Feeds, Commerce Feeds, voir même Xpathparser pour Feeds. Simple et efficace vous pourrez créer un import pas trop compliqué.
Si vous souhaitez quelque chose de plus robuste je vous conseille d’utiliser le couple Migrate et Commerce Migrate. Plus compliqué à prendre en main vous pourrez néanmoins réaliser des imports/exports complexes.
Commerce Devel et un module additionnel pour Devel qui vous aidera dans votre développement de tous les jours.
Commerce Entitycache vous permettra en complément de Entitycache d’améliorer les performances de votre site en ajoutant aux caches les entités Drupal Commerce.