THELIA Solution e-commerce 100% libre – Thelia Aujourd'hui – Thelia V2



THELIA Solution e-commerce 100% libre – Thelia Aujourd'hui – Thelia V2

0 0


slides

Presentation used during theliatour http://theliatour.net

On Github thelia / slides

THELIA Solution e-commerce 100% libre

Créée en 2005

Objectif : solution souple et modulaire

Publiée sous licence GPL en 2006

Editée par OpenStudio

Septembre 2012 : fusion Octolys / OpenStudio

Société de Services en Logiciels Libres

26 collaborateurs

Quelques clients

Quelques exemples de réalisations

THELIA Nos projets pour 2013

Espace contributeurs

TheliaTour

Salon e-commerce

Thelia Aujourd'hui

  • Version 1.5 Long Term Support
  • Sourceforge.net
  • Documentation complète
  • Communauté active
  • +7 000 boutiques
  • +300 Plugins
    • Paysite Cash
    • Shoppingflux
    • SoColissimo
    • Mailjet

Syntaxe

Boucle

                            <thelia_prod type="PRODUIT" ref="ref_prod">
    <p class="bloc_description">
        #DESCRIPTION
    </p>
    prix : #PRIX
</thelia_prod>
                        

Filtre

                            
#FILTRE_egalite(variable à tester||valeur||affichage si égale)
                            
                        

Boucle test

                            <test_nom_boucle variable="var_ou_val" test="type test" valeur="var_ou_val">
    afficher si la condition est vérifiée
</test_nom_boucle>
    afficher si la condition n'est pas vérifiée
<\//TEST_nom_boucle>
                        

Boucle Répéter

                            <repeter_nom_boucle debut="nombre" fin="nombre" increment="nombre">
    texte à répéter
</repeter_nom_boucle>
                        

Thelia V2

  • Renforcer les performances
  • Internationalisation du code source
  • Faciliter l'interopérabilité
  • Nouvelles fonctionnalités
  • Nouvelle documentation
  • Solution toujours plus modulaire

Fonctionnalités

  • Moteur de taxes
  • Combinaison de déclinaisons
  • Gestion de codes promo avancée
  • Multi rubriquage

Symfony components

  • Dependency Injection
  • Event Dispatcher
  • Http Kernel
  • Http Foundation
  • Config
  • Console
  • Gestion de dépendance des librairies
  • Utilisation de l'autoloader
  • Dump d'un class map

Version 1.6

https://github.com/thelia/model

Intégration continue

PHP FIG

  • PSR-0 (class autoloader and namespaces)
  • PSR-1 (coding standard)
  • PSR-2 (coding standard)
  • PSR-3 (logger interface)

Tpex

Nouveau Parser

Indépendant !

Syntaxe

Boucle

                            {ifloop rel="loop_id"}
    <p>Display if loop returns at least 1 result</p>
    {loop id="loop_id" type="product" arg1="value1" arg2="value2"}
        price : #PRICE
    {endloop}
    <p>Display if loop returns at least 1 result</p>
{elseloop}
    <p>Display if loop returns nothing</p>
{endifloop}
                        

Boucle test

                            {if var==value && var2==value2}
    <p>display if true</p>
{else}
    <p>display if false</p>
{endif}
                        

Filtre

                            {#VAR|strtoupper}
                        

Codons !

Structure d'un plugin (local/modules)

                            MyModule
    MyModule.php
    Config
        config.xml
    Loop
        Product.php
        MyLoop.php
    Actions
        Customer.php
        Cart.php
    Model
        ...
                        

Config.xml

                            <!--?xml version="1.0" encoding="UTF-8" ?-->

<config xmlns="http://thelia.net/schema/dic/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">
    <loops>
        <loop name="MyModule_Product" class="MyModule\Loop\Product">
        <loop name="MyModule_MyLoop" class="MyModule\Loop\MyLoop">
    </loop></loop></loops>
    <services>
        <service id="myplugin.action.customer" class="MyModule\Actions\Customer">
            <tag name="kernel.event_subscriber">
        </tag></service>
    </services>
</config>
                        

Boucle MyModule_Product

                            namespace MyModule\Loop;

use Thelia\Tpex\Element\Loop\BaseLoop;
use Thelia\Tpex\Element\Loop\LoopResult;
use Thelia\Tpex\Element\Loop\LoopResultRow;

class Product extends BaseLoop
{
    public function defineArgs()
    {

    }

    public function exec()
    {

    }
}
                        

defineArgs

                            /**
* @return array defining all loop arguments
*/
public function defineArgs()
{
    return array(
        "ref",
        "id" => "optional",
        "stock" => array(
            "optional",
            "default" => 1
        )
    );
}
                        

Tous les arguments sont accessibles comme des propriétés publiques de la classe

exec

                            /**
* @return \Thelia\Tpex\Element\Loop\LoopResult
*/
public function exec()
{
    $result = new LoopResult();
    if($this->stock < 0) $this->stock = ($this->stock * -1);
    $this->stock += 10;
    for ($i=0; $i < $this->stock; $i++) {
        $loopResultRow = new LoopResultRow();
        $loopResultRow->set('modulo', $i%2);
        $result->addRow($loopResultRow);
    }
    return $result;
}
                        

Récapitulons

  • Nombre infini de boucles par module
  • Une API claire permettant d'implémenter facilement une nouvelle boucle

What else ?

La boucle product de Thelia ne me convient pas, je veux implémenter ma propre boucle product !

Let's do it !

                            <!--?xml version="1.0" encoding="UTF-8" ?-->

<config xmlns="http://thelia.net/schema/dic/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">
    <loops>
        <loop name="product" class="MyModule\Loop\Product"></loop>
    </loops>
</config>
                        

Actions

Même principe que Thelia 1 mais une implémentation différente

config.xml

                            <!--?xml version="1.0" encoding="UTF-8" ?-->

<config xmlns="http://thelia.net/schema/dic/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">
    <services>
        <service id="myplugin.action.customer" class="MyModule\Actions\Customer">
            <tag name="kernel.event_subscriber">
        </tag></service>
    </services>
</config>
                        

classe action

                            namespace MyModule\Actions;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\ActionEvent;

class Customer implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            "action.createCustomer" => "create"
        );

    }

    public function create(ActionEvent $event)
    {
        //code here
    }
}
                        

Récapitulons

  • Nombre infini d'actions par module
  • Gérer une priorité d'exécution
  • Possibilité de stopper une action

What else ?

Je veux remplacer le traitement des actions par défaut avec les miennes !

Let's do it

                            namespace MyModule\Actions;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\ActionEvent;

class Customer implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            "action.createCustomer" => array("create", 0)
        );

    }

    public function create(ActionEvent $event)
    {
        //code here

        $event->stopPropagation();
    }
}
                        

Ce n'est pas tout !

Support base de données (postgresql, sqlite, autres)

Cache multi niveaux

Reverse proxy (Varnish)

Merci !

http://thelia.net

https://github.com/thelia

@theliaecommerce