OctoberCMS, est il le futur du CMS ?

Depuis plusieurs temps, nous nous intéressons fortement à CMS ayant pour nom: OctoberCMS.

Que possède ce CMS de plus que les autres ?

Encore un autre CMS me direz vous ? Oui mais non. Avec October nous ne parlons plus de CMS mais de CMF (Content Management Framework).

Ce CMS / CMF est un peu particulier, il utilise le très populaire Framework Laravel à merveille. Comparé aux autres CMS, celui-ci s'est créé tout autour de ce framework, sans Laravel, OctoberCMS ne pourrait ni fonctionner et encore moins exister.

Que retrouvons sous le capot ?

Pour les puristes, ce CMS tourne sous Laravel (5.5 à l'heure où je vous parle)

jQuery est utilisé pour l'Ajax Framework

Semantic Ui / Bootstrap pour l'admin

Tournant sur un front office en Twig (afin de mettre tout le monde d'accord), cela dit, rien n'est imposé, si un développeur veux faire tout en PHP sans Twig, il en a la possibilité.

Mais ce n'est pas tout bien entendu. Jusqu'ici nous vous apprendrons rien.

Pourquoi OctoberCMS est-il si génial ?

Venons en aux faits, depuis que nous le testons, nous n'avons jamais pris autant de plaisir à développer sur un CMS et nous allons vous expliquer pourquoi.

Une documentation plus que fournie.

Pour un développeur qui découvre une technologie, il n'y a rien de plus important que sa documentation, si celle-ci n'est pas fournie, il est très compliqué de faire un développement aboutit et donc la plupart du temps, les développeurs abandonnent. Car il ne faut pas oublier, que le but d'un développeur est de gagner du temps à développer un code flexible et réutilisable.

Dans le cas d'OctoberCMS, la documention est bien fournie et détaillée, dans les plugins que nous avons développé nous avons trouvé la solution à 95% dans le documentation, chose très rare pour les autres technologies que nous avons utilisés auparavant.

L'ajax devient simple et magique

Faire de l'ajax c'est vraiment bien, mais ça prends plus de temps.

Avec ce CMS, il n'a jamais été aussi facile de faire de l'ajax que ce soit en backoffice ou en front office, cela reste très facile.

Par défaut, dans le thème de demo, ils nous expliquent comment fonctionnement l'ajax framework, et c'est vraiment simple, à vous de juger:

Voici un exemple afin de réaliser un todoList (pas vraiment innovant comme exemple, cela dit c'est pratique pour montrer comment cela fonctionne sur le fond)

Dans le

le data-request correspond au code PHP qui va être exécuté lors de la soumission du formulaire:

function onTest()
{
    $value1 = input('value1');
    $value2 = input('value2');
    $operation = input('operation');

    switch ($operation) {
        case '+' :
            $this['result'] = $value1 + $value2;
            break;
        case '-' :
            $this['result'] = $value1 - $value2;
            break;
        case '*' :
            $this['result'] = $value1 * $value2;
            break;
        default :
            $this['result'] = $value1 / $value2;
            break;
    }
}

la second attribut data-request-update="calcresult: '#result'"

permet de mettre à jour une vue une fois la requête ajax terminée.

En gros, october fait toute sa moulinette lors d'une requête ajax, créé des variables, puis les réinjecte dans une vue (sous Twig) tout ça en 2 lignes de codes. Magique non ?

Ce qui est encore plus beau, c'est que vous pouvez le coder très simplement depuis l'interface d'admin qui est vraiment bien pensée.

Interface OctoberCMS

Lorsque nous nous formons sur une nouvelle technologie, nous avons pour habitude de prendre un de nos projets favoris et de l'adapter dessus:

Ce projet est toujours le même, il s'agit de control-erp.com, pour l'annecdote, ce petit projet à vu le jour sous CodeIgniter, puis fait un bref passage sous cakePHP, pour passer sur Laravel 4.2 et 5. Il va désormais passer sous OctoberCMS et nous reviendront en détails afin de détaillé notre choix.

Coder un plugin devient un jeu d'enfant.

La grande force d'October réside aussi dans les plugins.

Il s'agit simplement de générer des controllers et models, pour les views, la où encore une fois c'est très fort, c'est qu'il n'y a pas grand chose à faire !

Bien entendu notre cher et tendre artisan étant de la partie, générer un plugin se fait grâce à un coup de:

php artisan create:plugin Namespace.PluginName

et hop ! votre plugin se génère automatiquement.

De plus, faire un plugin quand on est développeur habitué de Laravel,

ne vous changera pas grands chose.

Prenons pour exemple un plugin de Customer (exemple de notre Erp)

Créons d'abord un controller:

php artisan create:controller Prestasafe.Erp Customers

Voici le fichier généré:

Jusqu'ici rien de fou, créons ensuite notre model:

php artisan create:model Prestasafe.Erp Customer

Attention: les controllers sont à nommer au pluriel (Customers) et les models au Singulier (Customer) de préférences

Voici le model:

Idem, rien de bien particulier, et pourtant, vous n'avez plus grands chose à faire, à part bien entendu votre migration qui s'est générée dans votre dossier du plugins/updates/create_customers_table.php (dans notre cas)

Pour faire le listing, rien de plus simple:

On ajoute le model dans le Controller et dans la methode index on génère la liste:

vars['postsTotal'] = Customer::count();
        $this->asExtension('ListController')->index();
    }

}

Maintenant en allant sur la route dédiée:

dans notre cas: /backend/prestasafe/erp/customers

Listing des customers

On peut voir que le listing est présent, il n'y a pas de colonne dans recherche sauf l'id (nous allons voir comment en ajouter)

idem si l'on fait click sur New Customer:

Page de création de customer

Idem, vide, mais voici comment ajouter nos champs:

Dans le plugin, dans le dossier des models (/models/customer) on trouve 2 fichiers yaml, le columns.yaml sert à afficher les colonnes lors du listing de votre model, par défaut, il n'y a que l'id:

# ===================================
#  List Column Definitions
# ===================================

columns:
    id:
        label: ID
        searchable: true

En le remplissant un peu:

# ===================================
#  List Column Definitions
# ===================================

columns:
    id:
        label: ID
        searchable: true
    name:
        label: prestasafe.erp::lang.user.name
        searchable: true
    mail:
        label: prestasafe.erp::lang.user.email
        searchable: true
    active:
        searchable: true
        label: prestasafe.erp::lang.user.enable

(les mentions: prestasafe.erp::lang.user.name permettent de gérer les traductions)

Voici désormais à quoi ressemble de listing:

En ajoutant le paramètre: searchable:true, cela me permet de faire des recherche sur ce champs.

Idem pour les champs de formulaire de création ou modification, sauf que les paramètres doivent se modifier dans le le fichier fields.yaml

En modifiant le notre comme ceci (traductions non faites pour l'instant)

# ===================================
#  Form Field Definitions
# ===================================

fields:
    id:
        label: ID
        hidden: true
        disabled: true
    name:
        label: Name
        span: storm
        cssClass: col-md-4
    tel:
        label: Phone
        span: storm
        cssClass: col-md-4
    active:
        label: Activate ?
        type: switch
        on: Yes
        off: No
        span: storm
        cssClass: col-md-4
    fax:
        label: Fax
        span: storm
        cssClass: col-md-6
    mail:
        label: Email
        span: storm
        cssClass: col-md-6
    adresse:
        label: Adresse
        type: textarea
        span: storm
        cssClass: col-md-6

On a simplement placer nos champs (avec des classes Bootstrap si on le souhaite)

Voici le formulaire de création et modification:

crud customer

Voila, en quelques minutes seulement, nous avons créé un CRUD, qui au passage est en bonne partie en ajax (recherche / update) amusez vous à faire un CMD + S ou CTRL + S pour sauvegarder vos modifications (attention on y prends vite goût).

Vous pouvez également faire des customs views (appelées partials), tout à été pensé pour cela, la documentation explique tout cela à merveille.

Vous l'aurez compris, nous sommes tombé amoureux de ce CMS, et nous souhaitons faire de plus en plus de projets sur celui ci.

Où se place-t-il au niveau de la concurrence ?

Ce CMS, assez jeune par son âge (datant de Mai 2015 soit 4 ans à l'heure ou je vous parle) n'a évidemment pas la popularité du géant Wordpress (ça serait trop beau) cela dit, il grimpe petit à petit.

Sur le site de w3tech, on peux voir que les tendances sont clairement en hausse pour OctoberCMS:

Source: https://w3techs.com/technologies/details/cm-octobercms/all/all

Des agences web l'utilisent de plus en plus, et certains services de gestion de sites / monitoring l'embarquent de plus en plus comme par exemple https://1pilot.io/

Qu'en est il des extensions

OctoberCMS possède un "store" où sont regroupés plugins et themes.

Je dois dire que ce dernier est plutôt bien fourni, on y trouve beaucoup de plugins gratuits, ou des plugins vraiment peu cher (5$ pour le plugin de formulaire)

Idem pour les thèmes, il y en beaucoup des gratuits (qui restent assez simples) et des payants (max 60$) ce qui reste très abordable.

Nous avons trouvé beaucoup de plugins et tous sont fonctionnels (du moins ce que nous avons essayé)

Que ce soit des plugins de localisations, traductions, utilisateurs ou blog.

Vous trouverez votre bonheur.

Peut-on faire du e-commerce ?

Le e-commerce est fortement demandé côté web, Wordpress + Woocommerce, PrestaShop, Shopify, Magento, tous se font concurrence les uns les autres afin proposer une solution e-commerce aux clients.

Et bien oui, depuis que nous nous penchons dessus, nous avons repéré 3 plugins de e-commerce.

Le premier se nomme Shopaholic, https://octobercms.com/plugin/lovata-shopaholic

Petit plugin simple et extensible pour un petit commerce.

Cela dit, ses extensions de paiements sont payantes (paypal 15$)

Le 2ème quant à lui est payant JKShop (50$):

https://octobercms.com/plugin/jiri-jkshop

Nous ne l'avons jamais essayé mais ce dernier est très bien noté et semble vraiment convenir à beaucoup d'utilisateurs.

Le dernier, notre préféré est Mall https://octobercms.com/plugin/offline-mall:

Mall

Mall est un plugin e-commerce bien fait, il embarque les devises / pays / frais de port et est compatible avec paypal / Stripe par défaut.

Il est également très simple de l'étendre, une documentation bien rédigée est également fournie.

D'après nos tests, cela nous fait penser à un parfait mélange entre Woocommerce et PrestaShop, d'un côté la légèreté de Woocommerce et de l'autre la robustesse de PrestaShop.

Mall est très jeune, nous l'avons vu naitre, (Octobre 2018), les développeurs sont très réactifs, nous avons soumis un léger bug sur github, le lendemain c'était solutionné.

Faut il s'investir sur ce CMS

Comme nous l'avons évoqué plus haut, concernant notre erp (control-erp) nous souhaitons le porter sur OctoberCMS sous forme de plugin.

Pourquoi avoir fait ce choix ?

La raison est simple: le temps.

Comme vous le savez, le temps est la chose qui manque le plus aux développeurs.

Nous avions commencé à orienter notre erp sous forme de CMS (plugins / hooks etc...) tout était fonctionnel, cela dit et après réflexion nous nous sommes posé la question: Cela ne fait-il pas trop ?

Effectivement, quand nous prenons le cas de nos clients, la plupart ont une boutique PrestaShop, elle-même liée à un ERP, lui-même relié à la caisse (si ce n'est pas la caisse en soi) et parfois un blog wordpress.

Cela aurait fait encore un système à installer sur un serveur, une autre base de données, une autre configuration système etc...

Pour avoir un système, qui à lui aussi, sa propre interface, sa propre UI/UX etc...

En pesant les pours et les contres, et en plus des points cités plus haut, voici ce qu'il en est ressorti:

En passant sous OctoberCMS, nous n'avons plus à gérer les mise à jour du Core de Laravel (ce qui est un très bon point).

Les clients hébergent eux même leur données (moins de resources pour nos serveurs et plus de flexibilité pour eux)

Le code est plus simple à gérer pour une communauté open source

Nous participons à l'évolution du produit (OctoberCMS).

Les mise à jour sont extrêmement simple à gérer.

C'est pour cela, que nous avons décidé de passer la plupart de nos développements Laravel sur ce dernier. Cela nous fait gagner un temps considérable et c'est bien plus flexible pour nous.

Cerise sur le gâteau

Lors de notre aventure sous OctoberCMS, nous avons trouvé un plugin qui, je pense, va vous permettre de vous faire une idée sur celui-ci:

Il s'agit du plugin RainLab Builder

ce plugin vous permet de générer votre propre plugin de manière très rapide depuis le backoffice, voici la démonstration: (en anglais)

https://vimeo.com/154415433

Pour un petit développement, ce plugin est extraordinaire.

Pour résumer

Vous l'aurez compris, nous sommes vraiment tombé amoureux de ce CMS / CMF, il est simple facile très bien pensé et très intuitif.

Nous pensons et espérons un futur fructueux pour ce dernier.

Ses points faibles sont sa jeunesse et sa communauté encore trop faible (en France) et qui, nous l'espérons va s'accroître rapidement.

Si nous devions le comparer au géant Wordpress, sur le point technique, il est plus abouti (Laravel / Namespace / Php Objet / MVC etc...), beaucoup de développeurs Wordpress travaillent avec cette solution car il y a un marché plus qu'énorme et que la communauté est bien présente dans le monde entier.

N'hésitez pas à nous confier votre avis sur ce CMS, nous sommes très ouvert et très curieux d'avoir vos retours d'expériences et points de vue sur ce dernier.

Enjoy ;)