.. _template-cheetah:

Template Cheetah
=======================


Syntaxe
--------

Contrairement à Creole, la syntace Cheetah utilisée dans l'Ead2 est la syntaxe d'origine,
'#' correspond à '%' et '$' correspond à '%%'.

Vous pouvez donc vous référez directement à la documentation d'origine voir depuis le site

`Site officiel <http://www.cheetahtemplate.org/>`_

Mise en place
--------------

Une fois votre template renseigné dans votre action, celui-ci sera appelé au niveau du frontend,
et compilé avec les données renvoyées. Si vous renvoyé un dictionnaire ::

    self.send_all({'titre':'Hello world'}, template='hello.tmpl', templates=[])

Votre template hello.tmpl aura la forme::

    #if $is_defined('titre')
    <div>$titre</div>
    #end if

Le test is_defined permet de s'assurer qu'un résultat sera fourni, évitant un message d'erreur pour l'utilisateur.

.. note::
    La modification d'un template ne nécessite qu'une suppression de celui-ci côté frontend (ead2/frontend/web/template)

Modules (widgets)
------------------

Des modules .tmpl proposent des fonctions permettant la construction de données (bouton, input de formulaire, checkbox...).

Ces modules doivent être passé en paramètre en entête de votre template::

    #extends ead2.frontend.web.template.main
    #implements respond

Les fonctions de main seront alors disponibles depuis votre template, par exemple, dans votre action vous avez::

    datas = {'title':'Hello World',
            'btn'{'libellé':'Hello World', 'title':'Dis bonjour', 'icone':'', 'href':"javascript:alert('Hello World');"}}
    self.send_all(datas, template='helloworld.tmpl', 'templates=[])

Votre template sera::

    #if $is_defined('titre')
    <div>$titre</div>
    #end if
    #if $is_defined('btn')
    $main().make_btn($btn)
    #end if

Vous obtenez un titre et un bouton qui lance une popup avec "Hello World" qui s'affiche.

.. important::

    La modification d'un module demande le redémarrage du service ead-web (où les modules sont compilés).

Les widgets 'communs' :

:ref:`main-widget`
