On Github thelia / slides
Créée en 2005
Objectif : solution souple et modulaire
Publiée sous licence GPL en 2006
Septembre 2012 : fusion Octolys / OpenStudio
Société de Services en Logiciels Libres
26 collaborateurs
Espace contributeurs
TheliaTour
Salon e-commerce
<thelia_prod type="PRODUIT" ref="ref_prod"> <p class="bloc_description"> #DESCRIPTION </p> prix : #PRIX </thelia_prod>
#FILTRE_egalite(variable à tester||valeur||affichage si égale)
<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>
<repeter_nom_boucle debut="nombre" fin="nombre" increment="nombre"> texte à répéter </repeter_nom_boucle>
Version 1.6
Nouveau Parser
Indépendant !
{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}
{if var==value && var2==value2} <p>display if true</p> {else} <p>display if false</p> {endif}
{#VAR|strtoupper}
Structure d'un plugin (local/modules)
MyModule MyModule.php Config config.xml Loop Product.php MyLoop.php Actions Customer.php Cart.php Model ...
<!--?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>
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() { } }
/** * @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
/** * @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; }
La boucle product de Thelia ne me convient pas, je veux implémenter ma propre boucle product !
<!--?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>
Même principe que Thelia 1 mais une implémentation différente
<!--?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>
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 } }
Je veux remplacer le traitement des actions par défaut avec les miennes !
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(); } }
Support base de données (postgresql, sqlite, autres)
Cache multi niveaux
Reverse proxy (Varnish)