• Home
  • Nous contacter

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab

Guillaume DEPLANQUE

CMS

Drupal 8 : formulaire d’upload et custom API

Drupal 8 : formulaire d’upload et custom API

Hello à tous ! Si vous suivez un peu mes articles sur ce blog (si vous ne le faites pas, honte à vous !), vous connaissez tous mon amour pour Drupal 7.
Mais avec la sortie de Drupal 8, je peux enfin vous proposez mon premier tuto, qui va regrouper un petit peu de tout : des custom Form, en passant par des custom Service et un peu d’API… On va se régaler !

Enjoy !

LIRE LA SUITE
03/06/2016 TAGS: API, Développement, drupal, Drupal 8 BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
CMS

WordPress – Un formulaire de login custom en Ajax

WordPress – Un formulaire de login custom en Ajax

Hello everyone ! Aujourd’hui on va quitter un peu mon domaine de prédilection (je ne t’oublie pas Drupal, promis je reviens vite à toi) pour un petit tuto sur Wordpress afin de répondre à un besoin de plus en plus récurrent

LIRE LA SUITE
03/07/2015 TAGS: Ajax, Wordpress BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
CMS

Drupal 7 – Les EntityFieldQuery et les requêtes aléatoires

Drupal 7 – Les EntityFieldQuery et les requêtes aléatoires

Après une longue absence, me voilà de retour pour vous jouer des mauvais tours et pour vous en apprendre toujours plus sur Drupal 7 ! Au programme d’aujourd’hui, on va découvrir les EntityFieldQuery et comment sélectionner des nodes aléatoirement. Enjoy !

Les EntityFieldQuery

Pour récupérer des nodes en base avec Drupal, on a l’embarras du choix (enfin pas vraiment, juste 3 possibilités, mais c’est déjà beaucoup) : on peut passer par une db_query, un db_select ou .. par les EntityFieldQuery (si vous aviez pas deviné, c’est que vous avez rien lu jusqu’ici. C’est mal).

J’ai une préférence pour ces dernières, parce que c’est une classe PHP, et que ça me manque sur Drupal de faire du véritable objet.

La syntaxe est relativement simple et assez explicite :

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'article')
  ->propertyCondition('status', 1)
  ->propertyOrderBy('created', 'DESC')
  ->range(0, 10)
  ->addMetaData('account', user_load(1)); // Run the query as user 1.
$result = $query->execute();

On commence par déclarer notre requête, et on ajoute nos conditions. Pour les conditions, on en a de 3 types :

  • l’entityCondition, qui vous permet de définir les entités que vous voulez ramener (un node, un user, un commentaire …)
  • la propertyCondition, qui vous permet de filtrer sur des attributs propres à l’entité défini plus haut (là par exemple, je veux des nodes de type « Article », qui sont publié … Oui je sais ça fais beaucoup de nodes !)
  • la fieldCondition, qui vous permet de filtrer sur les champs de votre entité, comme sur le body ou vos champs customs

On peut ensuite faire des range (comme dans l’exemple, où j’en prends que 10), trié par ordre croissant ou décroissant sur pas mal de champs.

On exécute ensuite notre requête, et BOUM ! On a les 10 derniers articles publiés !

Déjà je trouve ça super, mais on peut tomber sur un cas où l’on souhaite ramener des nodes aléatoirement, pour faire un bloc dynamique par exemple. Et là, les EntityFieldQuery se démarque vraiment avec leur système de tag.

Ajouter un tag sur une EntityFieldQuery pour récupérer du contenu aléatoirement

Pour se faire, rien de plus simple !

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'article')
  ->propertyCondition('status', 1)
  ->addTag('random')
  ->range(0, 10)
  ->addMetaData('account', user_load(1)); // Run the query as user 1.
$result = $query->execute();

Je reprends ma requête précédente, et j’ajoute un petit addTag(‘random’), mais vous pouvez l’appeler comme vous voulez, laissez parler votre imagination !

Mais là, il vous faudra faire un hook pour altérer la requête. Encore une fois, c’est facile 🙂

Dans votre module, déclarez la fonction [NOM_CUSTOM_MODULE]_query_[NOM_DU_TAG]_alter($query) :

function adfab_query_random_alter($query){
  $query->orderRandom();
}

Dans mon module Adfab, j’ai donc déclarer la fonction adfab_query_random_alter($query), et je rajoute un orderRandom, et on a nos 10 articles aléatoires, qui changeront à chaque rechargement de page.

P.S : Si vous en avez moins de 10, ça sera toujours les mêmes par contre hein !

 

A bientôt pour de nouvelles aventures !

LIRE LA SUITE
10/11/2014 BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
CMS

Drupal 7 – Importer ses types de contenu avec Drush et Bundle Copy

Drupal 7 – Importer ses types de contenu avec Drush et Bundle Copy

Dans ce tutoriel, on va aborder la question de l’import/export des types de contenu entre plusieurs collaborateurs sur un même projet Drupal

Problématiques

Pour quiconque a déjà travaillé sur un Drupal, vous vous êtes surement confronté au problèmes de la gestion de la configuration, et plus particulièrement, de la configuration de vos types de contenus. Parce que oui, sans type de contenu, Drupal, ça marche drôlement moins bien ! Si vous travaillez en collaboration avec des collègues, et si vous avez un environnement de recette (si vous en avez pas, tendez vos doigts que je vous fouette !), vous avez plusieurs solutions pour re-créer les types de contenus que vous avez crée en local :

  • Vous faîtes de la documentation, et vous ou vos collègues vous amusez à re-créer à la main chaque contenu, sur chaque environnement … Envisageable quand on a 2-3 types de contenu, mais se retaper 10 types de contenus possédant 15 champs chacun, c’est un peu long et les risques d’erreur de configuration sont bien trop nombreux. On passe !
  • Vous pouvez aussi créer un script dans lequel vous créez en PHP chaque type de contenu ainsi que leur champs associés. Plus de soucis d’erreur de recopiage, mais on perd la facilité de création que propose le back-office.Et c’est long. On passe !
  • On regarde du côté des modules, et si on cherche bien, on tombe sur Bundle Copy. Et là, que du bonheur … ou presque.

Bundle Copy rajoute deux onglets sur votre page de type de contenu, « Export » et « Import ». En cliquant sur « Export », on choisis les types de contenus qu’on veut exporter, les champs qu’on souhaite, et il nous génère dans l’admin une GROSSE zone texte avec les déclarations en PHP de vos types de contenu. Texte que vous allez devoir copier dans un fichier texte, enregistrez quelque part, mettre à disposition sur vos logiciels de versionning préférés, pour que vos collègues copient le contenu dans la zone texte de l’onglet « Import ». Sur le principe, c’est pas si dérangeant que ça. Mais je suis fainéant. Sur nos projets Drupal, on utilise Drush, l’outil d’administration en ligne de commande spécifique à Drupal. Et quand on a goûté à Drush, on a du mal à s’en passer ! Alors pourquoi pas faire son propre module qui combine les deux 😉 ?

Création du module

Le but de ce fabuleux module ? Simplement enregistrer automatiquement le code PHP généré par Bundle Copy lors de l’export, et proposer une commande Drush pour importer tout ça sans effort ! On va commencer par créer l’arborescence du module ainsi que le fichier .info associé. Dans mon cas, mon module s’appelle adfab_command (oui je sais, tellement d’originalité que j’en pleure !) On va donc créer le dossier adfab_command, dans lequel, petite nouveauté que j’expliquerais plus tard, on va aussi créer le dossier var. Viens ensuite notre fichier adfab_command.info, dans lequel on trouvera :

name = Adfab Custom Drush Command
description = Adfab Custom Drush Command
package = Development
dependencies[] = bundle_copy
core = 7.x
version = 7.x-1.0
tags[] = developer

Rien de bien follichon pour quelqu’un qui a déjà crée un module Drupal, notez juste la ligne « dependencies[] = bundle_copy », parce que sans lui, notre module marcherait moins bien (voire même pas du tout en fait). On passe à l’autre fichier indispensable pour un module, le fichier adfab_command.module. Dans ce fichier, on va juste implémenter le hook form_alter sur le formulaire d’export de Bundle Copy. L’étape qui nous intéresse le plus est la 3e étape, c’est à dire la génération du PHP. Là, on va automatiquement créer (ou effacer le contenu pour le re-remplir si le fichier existe déjà) un fichier texte contenant ce que Bundle Copy a généré, tout ça dans le dossier var (voilà pourquoi il était important lui !) :

function adfab_command_form_alter($form, $form_state, $form_id) {
    if($form_id == 'bundle_copy_export' && $form_state['step'] == 3) {   
        if(strpos($form['#action'], 'types'))
            $file_name = 'export_types.txt';
        else if(strpos($form['#action'], 'taxonomy'))
            $file_name = 'export_taxonomy.txt';

        $data = $form['export']['#value'];
        $module_path = drupal_get_path('module', 'adfab_command') . '/var';
        $file_path = $module_path . '/' . $file_name;

        if($file = file_put_contents($file_path, $data))
            drupal_set_message(t('Le fichier ' . $file_name . ' a été crée'));
        else
            drupal_set_message(t('Erreur à la création du fichier ' . $file_name), 'error');
    }
}

C’est à peu près tout en fait !

Et la commande Drush ?

Maintenant qu’on a notre fichier texte dans notre répertoire var qu’on peut svn-iser ou autre, il nous reste plus que la commande Drush. Et créer une commande Drush custom, y’a vraiment rien de plus simple ! Commencer par créer le fichier adfab_command.drush.inc dans le répertoire de votre module, et copier le code suivant :

/**
 * Implements hook_drush_command().
 */

function adfab_command_drush_command() {

    $items = array();

    $items['import-data'] = array(
        'description' => dt('Import content type'),
        'callback' => 'drush_import_data',
        'aliases' => array('cdi')
    );

    return $items;
}

function drush_import_data() {

    $module_path = drupal_get_path('module', 'adfab_command') . '/var';
    $files = array_diff(scandir($module_path), array('..', '.'));

    foreach($files as $file) {

        drupal_set_message('--- Debut de l\'import du fichier ' . $file . ' ---');

        $file_contents = file_get_contents($module_path . '/' . $file);
        $form = drupal_get_form('bundle_copy_import');
        $form_state['values']['macro'] = $file_contents;
        bundle_copy_import_submit($form, $form_state);

        drupal_set_message('--- Fin de l\'import du fichier ' . $file . ' ---');
    }
}

Un poil d’explication ferait pas de mal quand même (à moins que vous êtes là uniquement pour créer le module en vitesse, et dans ce cas je ne vous en veux pas … pas vraiment) : La première fonction est primordiale, puisque c’est elle qui va déclarer votre commande à Drush. C’est une implémentation du hook_drush_command. On déclare un tableau avec comme clé le nom de votre commande, et dans notre cas, seulement 3 paramètres :

  • La description de ce que votre commande fait. Je suis allé à l’essentiel (je suis fainéant vous vous rappelez ?)
  • Le callback, soit la fonction que votre commande va appeler
  • Un alias, pour taper votre commande encore plus vite !

La deuxième fonction, elle, est le cœur de notre module. Elle va scanner le répertoire var de notre module, et va créer le formulaire utilisé par Bundle Copy rempli avec le contenu de notre fichier texte pour l’import des types de contenus, et appeler sa fonction submit. En gros, on simule le formulaire de Bundle Copy avec Drush. Une ligne de commande plus tard, qui ressemblera à ça :

drush cdi

Et c’est tout ! Voilà les types de contenus définis dans le fichier texte que vous avez récupéré sont ajoutés à votre projet Drupal !

LIRE LA SUITE
06/05/2014 BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
CMS

Drupal 7 – Ajouter un Splash Screen à votre site en moins de 30 minutes !

Drupal 7 – Ajouter un Splash Screen à votre site en moins de 30 minutes !

Vous avez surement déjà vu, lors de vos pérégrinations sur Internet, un superbe splash screen vous souhaitant la bienvenue ou vous informant d’une offre spéciale. Et bien avec ce tuto, on va apprendre (dans la joie et la bonne humeur !) à en mettre un en place sur votre Drupal … et ce en moins de 30 minutes !

LIRE LA SUITE
08/04/2014 BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
Outils

Les erreurs de débutant en programmation

Les erreurs de débutant en programmation

Vous souhaitez vous lancer dans la folle aventure de la programmation ? Bienvenue à vous ! Dans cette article, vous découvrirez les principales erreurs et les conseils d’un (jeune) sage pour devenir le meilleur développeur.

LIRE LA SUITE
24/03/2014 BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
Outils

Les langages de programmation WTF

Les langages de programmation WTF

On m’a souvent posé la question de comment je faisais pour comprendre ce que j’écrivais quand je programmais. Pour un développeur, lire un programme en PHP ou autre devient, avec l’expérience, aussi facile que lire un livre. Mais dans certains langages, ça se complique ! Voici un aperçu des langages les plus improbables qui soient.

LIRE LA SUITE
18/03/2014 BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
CMS

Les meilleurs modules sous Drupal 7

Les meilleurs modules sous Drupal 7

C’est parti pour un bref aperçu des modules « Must Have » (donc que vous vous devez de posséder) si vous vous lancez dans l’aventure Drupal !

LIRE LA SUITE
04/03/2014 TAGS: Chef de projets BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
CMS e-Commerce

J’ai testé pour vous Drupal Commerce !

J’ai testé pour vous Drupal Commerce !

Pour une entreprise, avoir sa boutique en ligne est de nos jours un atout primordial pour booster ses ventes. Avec des solutions telles que Magento, Prestashop et tant d’autres, choisir entre l’une d’elles est devenu compliqué, chaque entreprise ayant ses propres contraintes techniques. Dans cet article, nous parlerons de la solution open-source proposée par The Commerce Guys,  Drupal Commerce.Pour une entreprise, avoir sa boutique en ligne est de nos jours un atout primordial pour booster ses ventes. Avec des solutions telles que Magento, Prestashop et tant d’autre, choisir entre l’un d’elles est devenu compliqué, chaque entreprise ayant ses propres contraintes techniques. Dans cette article, nous parlerons de la solution open-source proposée par The Commerce Guys,  Drupal Commerce.

LIRE LA SUITE
25/02/2014 TAGS: Chef de projets BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
Gestion de projet

Les 10 choses à faire quand vous travaillez avec un développeur

Les 10 choses à faire quand vous travaillez avec un développeur

Le développeur est un travailleur à part, c’est bien connu. Lunatique, parlant un langage perdu depuis la nuit des temps et incroyablement difficile à cerner, le développeur est un drôle d’animal. Si vous aussi, chef de projet, vous devez collaborer avec cette secte, voici quelques conseils pour vous !Le développeur est un travailleur à part, c’est bien connu. Lunatique, parlant un langage perdu depuis la nuit des temps et incroyablement difficile à cerner, le développeur est un drôle d’animal. Si vous aussi, chef de projet, vous devez collaborer avec cette secte, voici quelques conseils pour vous !

LIRE LA SUITE
14/02/2014 TAGS: Chef de projets BY: Guillaume DEPLANQUE
SHARE
LIRE LA SUITE
1 2 Next

A propos d’Adfab

Nous sommes un studio de production digitales et d’innovation digitales au service des agences et des annonceurs
Nous recherchons le scintillement dans les regards et le plaisir de réalisations sur-performantes
Nous sommes techno-agnostiques
Nous sommes Adfab

Le blog d'Adfab
Copyright © 2018 Adfab Connect