fabernovel loader

29 août 2016 | 4 min de lecture

Tech

Développer une plateforme de mise en relation avec WordPress et Themosis

Julien Mession

Head of Innovation


FABERNOVEL CODE
Depuis quelques années nous avons réalisé plusieurs plateformes de mise en relation, c’est à dire des sites qui proposent à différents profils de se retrouver et de pouvoir échanger rapidement, avec un accent plus ou moins porté sur l’aspect communautaire. Par exemple : mise en relation d’entreprises et d’assureurs, communauté de recycleurs néophytes et confirmés, mise en relation de freelances et d’entreprises… En général il s’agit pour nos clients de tester un modèle rapidement pour développer le concept en mode start up. En intégrant un design sur mesure et des spécificités particulières à chaque projet, 3 à 4 semaines de dev scrum suffisent pour aboutir à un MVP enthousiasmant.

Voici notre retour d’expérience sur ce ce type de projet : quels plugins, quels réflexes à avoir, les fausses bonnes idées…
C’est orienté pour le développement. Il ne sera pas question de thèmes prêt à l’emploi ou de déballage d’une armada de plugins.

WordPress avec le framework Themosis

Avant de présenter les spécificités de ce type de plateforme, je voulais partager notre enthousiasme concernant le framework Themosis.

Themosis modernise l’approche du développement sur WordPress en y ajoutant les standards des frameworks MVC type Symfony ou Laravel :

  • routing
  • templates (blade)
  • gestion des packages avec composer / git
  • structuration du source

Le source est mieux présenté, le développement en équipe est plus clair. Fini le traditionnel plat de spaghetti mêlant HTML et PHP dans le thème ! Finie, la tentation de bourrer functions.php. Et tout ça en restant fidèle à l’API WordPress, qui reste parfaitement accessible. Ça reste évidement moins ambitieux que les frameworks stars, mais néanmoins très adapté à de nombreux projets quiveulent se lancer rapidement. Et le client bénéficie du fameux back office WP sans effort de développement.

Modèle de données

Pour créer et gérer les méta données de notre modèle de données, nous utilisons le plugin Piklist. Contrairement à ACF et consorts, ici pas d’UI pour créer les champs mais du code très propre et performant qui permet tous les raffinements. Exemple pour un select :

 piklist('field', array(
    'type' => 'select',
    'field' => 'my_select',
    'label' => 'My select',
    'choices' => array(
      'first' => 'First Choice',
      'second' => 'Second Choice',
      'third' => 'Third Choice'
    )
  ));

Un plaisir pour la maintenabilité et l’intégration continue, par rapport à du stockage en base via des options de plugin ou autre…
Themosis permet également de gérer ces métadonnées, mais piklist est plus abouti et nous fait gagner du temps.

En back, il est indispensable d’afficher les bonnes meta données pour chaque type d’utilisateur (nombre de salariés d’une entreprise, expériences pour un freelance…). Certains plugins ne peuvent empêcher d’afficher toutes les meta données, et on peut dans ce cas se retrouver à administrer des données de freelance dans un profil entreprise. Pour peu que certains champs soient obligatoires, c’est la panade, on ne peut pas sauvegarder sans remplir des champs inutiles. Une fois de plus, Piklist et une condition sur le profil connecté permettra de bien compartimenter.

Profils utilisateurs

Dans ce type de plateforme, on a souvent 2 types de profils : entreprise et freelance, par exemple. Chaque profil aura son propre espace connecté.
En général on administre ces rôles avec le plugin User Role Editor, mais on pourrait tout à fait le gérer dans le code. Le tout consiste essentiellement à ajouter des capacité type ‘Entreprise’ et ‘Freelance’, et à valider cette capacité (user_has_cap) chez le user connecté pour lui servir les pages auxquelles il a droit.
De plus grâce à la couche objet qu’apporte Themosis, il facilement possible d’étendre ou de créer des objets users par rôle. Il est ainsi possible d’organiser et optimiser la logique métier autour de ces rôles.

Pour le login customisé, on utilise le classique Theme My Login qui permet de dérouler facilement le workflow d’identification (mdp perdu, notif mail…) avec quelques bonus intéressant, comme la protection au bruteforce.

Formulaire Front

Notre choix s’est porté un temps sur Gravity Form pour la gestion de formulaires front, mais on a fini par l’abandonner : au premier abord, il semble nous faire gagner du temps sur la constitution des formulaires, mais il laisse très peu de latitude pour customiser le comportement des formulaires. L’API est pauvre ou mal foutue, les hooks et filtres pas évidents à exploiter… Il a également tendance à doubler les infos en base. Au final le résultat sur le long terme est assez sale.

Une fois de plus, on utilise la capacité de Themosis à réaliser les formulaires fronts avec un peu de dev propre.

Workflow, notifications

Ce type de projet envoie généralement des mails dans tous les sens : notifier une entre prise qu’un freelance s’est positionné sur une offre, dire au freelance que sa proposition a bien été reçue par l’entreprise, qu’elle est acceptée ou refusée, notifier les admins dès qu’un membre fait évoluer ses datas… Pour garantir l’acheminement on couple le site avec SendGrid via API.

Les plugins qu’on n’utilise plus

CRED, de Toolset : toute la config se fait en back, et on peut bâtir des formulaires plutôt pas mal à partir du modèle qu’on a au préalable défini avec leur autre module Types. Difficile à maintenir, la génération du formulaire repose sur un langage pseudo template difficile à reprendre après coup. Et tout ceci est contribué en textarea en back, pas agréable à maintenir.

Gravity form et ACF (voir plus haut)

Conclusion

En tant que développeur, on a moyen avec Themosis ou Piklist de déployer les composants nécessaires (formulaires front, modèle de données back, workflows et droits) sans charger de nombreux plugins. On sait que les plugins, c’est bon, mais avec modération.

On a également mis l’accent sur le fait de structurer certains sujets dans le code (toujours Piklist par exemple) plutôt que de se baser sur des plugins sympas à l’usage (ACF, Gravity Form) mais qui rendent les mises à jours difficiles car ils génèrent leur données en base. OK, ACF a bien un export pour le code, mais Piklist permet d’écrire ce code et de le maîtriser. Ceci permet de proposer à nos clients un produit spécifique qui pourra évoluer de manière stable et sur lequel il pourra bâtir un business solide.

logo business unit

FABERNOVEL CODE

Nous réalisons des plateformes Internet en un temps record, en mêlant talents et méthodologies agiles.

à lire