Symfony2 Content Management Framework

Le retour d'experience sur le site CRM du groupe Bel nos-bel-idees.fr





About David Buchmann

Twitter: @dbu

David is a senior developper at Liip SA, specializing in Symfony2. He happens to also be a certified Scrum Master and sometimes enjoys doing the scrum master or product owner role for a project.

Liip is doing custom web development with PHP in Switzerland.

About Alexis Janvier

Twitter: @alexisjanvier


Alexis est Lead Developer Php au sein de l'agence Rapp depuis maintenant 2 ans.

About Rapp France

Twitter: @RAPP_FRANCE

Site: rappfrance.com


Rapp est une agence marketing & communication digitale, riche de 160 collaborateurs.

Champs d'actions:
- Conception et développement d'interfaces digitales
- Stratégies Social Media
- Stratégie PRM et CRM
- Dispositif Digitaux Full Service
- Shopper Experience


Quelques clients:

Introduction to the Symfony2 CMF

The Symfony CMF project makes it easier for developers to add CMS functionality to applications built with the Symfony2 PHP framework. Key development principles for the provided set of bundles are scalability, usability, documentation and testing

CMF = Content Management Framework

Do we suffer from NIH?

Content Management = user controlled...


Content

Content Management = user controlled...


Menu structure

Content Management = user controlled...


URLs (Routes)

Content Management = user controlled...


Page structure (to some extent)

Symfony2 CMF Project


Diagrams

An overview with lots of pictures.

Symfony2 Control Flow

 


Symfony2 Control Flow

CMF additions


Routing

Content Bundle

Menu Bundle


Block: Sonata PHPCR ODM BlockBundle


Utility services

Publish Workflow

Media bundle

Frontend Editing: Create.js


Backend: Sonata PHPCR ODM Admin


Some words on storage

Doctrine PHPCR ODM

PHP Content Repository + Doctrine ODM

PHPCR (aka PHP-ified JCR specification)

Like MongoDB / CouchDB ODM

but different

PHPCR provides a standardized API that can be used by any PHP content management system to interface with any content repository.

Not all data fits well in PHPCR/JCR

Le retour d'experience sur

nos-bel-idees.fr

Le projet

Le site "Nos Bel Idées" est le site CRM (Customer Relationship Management, ou gestion de la relation client) du groupe Bel.


Les deux objectifs principaux fixés par le client étaient :



Pour cela, le site devait mobiliser plusieurs type de contenu, existant ou à créer :

- des bons de réduction -

Les bons de réductions sont gérés par un prestataire externe via des iframes et un webservice

- des opérations spéciales (jeux, tirages au sort, ...) -

Les "temps forts" sont gérés indépendamment du site CRM

- des recettes de cuisine -

Toutes les recettes proviennent d'une base de recettes centrale du groupe via des webservices.

- des contenus éditoriaux originaux (créés sur le site) -

Il fallait donc trouver un système de gestion de contenu sous Symfony2 qui puisse :


Il fallait aussi que le système puisse répondre à des demandes fonctionnelles spécifiques du client :

L'édition frontale des pages



Système d'édition basé sur Create.js, avec ckeditor comme éditeur wysiwyg.

L'édition des homes pages



Homepage principale du site composée de zones de push et d'un slider.


Widget d'édition du slider.


Widget d'édition d'un dossier recettes (lien vers un contenu recette en webservice).

L'édition des zones de push



Widget d'édition d'un push bon de réduction.
L'édition d'une zone de push peut être propagé à toutes les pages sœurs.

Evolution du contenu

public function Up()
{
    $manager = $this->documentHandler->getManager();

    // coverflow
    $push = new Block\PushBlock();
    $push->setParentDocument($parent);
    $push->setPosition(3);
    $push->setContent(<<<HTML
        <a class="square push" href="/idees-recettes/Recette-de-dorian-cuisine">
            <img src="/bundles/nosbelideessite/img/push/push-dorian.png" alt="Les recettes tradi de notre blogueur Dorian">
        </a>
    HTML
    );
    $manager->persist($push);

    // save
    $manager->flush();

    // create publish page
    $manager->checkpoint($parent);
}
            

La sécurisation de l’édition

Les performances

Statistiques du site:



Le frontal est derrière un serveur de cache http.

Conclusion



Les points forts


- L'efficacité de l'édition frontale

- La souplesse d'évolution



Le point mitigé


- Le double tranchant de l'édition front: éditeur wysiwyg et contenu stocké en html



Les difficultés rencontrées


- La jeunesse du projet

- La difficulté à trouver des développeurs sur la techno, compétant en développement Javascript

Thank you & merci!


Please give feedback on joind.in/9359

Contact us on IRC or Twitter or by Email:


@dbu / david@liip.ch


@alexisjanvier / alexis.janvier@rappfrance.com

Github projects

Resources

Modules utilisés


Routing

Sonata BlockBundle

Frontend Editing: Create.js et ckeditor

Doctrine PHPCR ODM

Jackrabbit



Modules non-utilisés


Menu

Sonata ODM Admin

La création de page



Duplication d'une page existante.


Widget de duplication de page.


Widget d'édition d'une zone de push (lien).