Twig

Aus Contao Community Documentation


Erweiterungs-Übersicht
Name des Entwicklers Tristan Lins
Kompatibilität mit Contao Version 2.11 (potentiell kompatibel mit 2.9+ und 2.10+ aber ungetestet)
Link zum Extension Repository http://www.contao.org/erweiterungsliste/view/twig.de.html


Twig ist eine Moderne und beliebte Template Engine. Sie wird unter anderem in Symfony2 und vielen weiteren Systemen eingesetzt. Twig ist recht jung, die bekannteste kompilierende Template Engine für PHP düfte wohl Smarty sein.

Die Contao Erweiterung twig bringt Twig nun auch nach Contao.

Twig Templates

Twig Templates werden wie Contao Templates in den templates Verzeichnissen abgelegt. Sie erhalten zusätzlich die Endung *.twig, z.B. ce_mycontent.html5.twig oder ce_mycontent.xhtml.twig.

Globale Variablen

Die twig Erweiterung liefert einige globale Variablen mit, auf die man in den Templates Zugriff hat.

  • _lang bietet Zugriff auf $GLOBALS['TL_LANG'], z.B. {{ _lang.MSC.confirm.0 }}
  • _dca bietet Zugriff auf $GLOBALS['TL_DCA'], z.B. {{ _dca.tl_content.fields.headline.label.0 }}
  • _config bietet Zugriff auf $GLOBALS['TL_CONFIG'], z.B. {{ _config.dateFormat }}
  • _db bietet Zugriff auf das Datenbankobjekt, z.B. {{ _db.query('SELECT * FROM tl_user').fetchAllAssoc() }} (siehe auch die speziellen Database-Filter Funktionen)

Allgemeine Filter Funktionen

Die twig Erweiterung liefert einige allgemeine Filter Funktionen.

  • deserialize, z.B. {{ row.groups|deserialize }} oder {{ row.groups|deserialize(true) }}
  • standardize, z.B. {{ row.title|standardize }}
  • dateFormat format einen Zeitstempel nach dem globalen Datumsformat, z.B. {{ row.tstamp|dateFormat }}
  • datimFormat format einen Zeitstempel nach dem globalen Datum+Zeitformat, z.B. {{ row.tstamp|datimFormat }}

Datenbank Filter Funktionen

Neben dem _db Objekt werden auch Filterfunktionen bereitgestellt, um auf die Datenbank zuzugreifen.

  • prepare bereitet ein Statement vors (vgl. Database::prepare), z.B. {% set stmt = 'SELECT * FROM tl_user WHERE admin=?'|prepare %}
  • set fügt SET oder UPDATE einem Statement hinzu (vgl. Database_Statement::set), z.B. {% set stmt = stmt|set({ 'foo': 'foo', 'bar': 'bar' }) %}
  • execute führt ein Statement aus (vgl. Database::execute und Database_Statement::execute), z.B. {% set result = stmt|execute(1) %} oder {% set result = 'SELECT * FROM tl_user WHERE admin=?'|execute(1) %}
  • query führt ein Statement direkt aus (vgl. Database::query), z.B. {% set result = 'SELECT * FROM tl_user'|query %}

Kombinierte Beispiele

{% set result = 'SELECT * FROM tl_user WHERE admin=?'|prepare|execute(1) %}
{% set result = 'UPDATE tl_user %s WHERE id=?'|prepare|set({ 'admin': 1 })|execute(id) %}
{% for row in 'SELECT * FROM tl_user'|query %}
    {# do somethink with row #}
{% endfor %}

TwigFrontendTemplate und TwigBackendTemplate

Um Twig zu verwenden, werden anstelle der bekannten FrontendTemplate und BackendTemplate Klassen, die Twig Klassen TwigFrontendTemplate und TwigBackendTemplate verwendet. Diese Klassen verhalten sich genau so, wie ihre Contao Pendanten, das gilt auch für die Hooks parseTemplate, parseFrontendTemplate und parseBackendTemplate die ebenfalls verfügbar sind.

$objTemplate = TwigFrontendTemplate('ce_mycontent');
$objTemplate->setData($arrData);
$objTemplate->foo = 'bar';
$strBuffer = $objTemplate->parse();

Twig Module und Inhaltselemente

Um Twig in einem Frontend Modul, Backend Modul oder Inhaltselement zu nutzen, gibt es 3 spezielle Klassen.

  • TwigModule ist eine spezielle Form von Module die TwigFrontendTemplate anstelle von FrontendTemplate verwendet.
  • TwigBackendModule ist eine spezielle Form von BackendModule die TwigBackendTemplate anstelle von BackendTemplate verwendet.
  • TwigContentElement ist eine spezielle Form von ContentElement die TwigFrontendTemplate anstelle von FrontendTemplate verwendet.


class MyContent extends TwigContentElement
{
    protected $strTemplate = 'ce_mycontent';
 
    public function compile()
    {
        // ...
    }
}

Twig Erweitern

Gesteuert wird Twig über die ContaoTwig Klasse. Bei dieser handelt es sich um eine Singleton Klasse, die die Loader und das Twig Environment bereitstellt. Wenn Twig erstmals initialisiert wird (also bei der 1. Verwendung) wird der initializeTwig Hook getriggert, mit dem man Twig Erweitern kann.

$GLOBALS['TL_HOOKS']['initializeTwig'][] = array('MyClass', 'hookInitializeTwig');
 
class MyClass
{
    public function hookInitializeTwig(ContaoTwig $contaoTwig)
    {
        // Twig Environment anpassen
        /** @var Twig_Environment $twig */
        $twig = $contaoTwig->getEnvironment();
        // do somethink with $twig
 
        // Den Standard Filesystem Loader anpassen
        /** @var Twig_Loader_Filesystem $filesystemLoader */
        $filesystemLoader = $contaoTwig->getLoaderFilesystem();
        $filesystemLoader->addPath('custom/path/to/my/templates');
 
        // Eigenen Template Loader hinzufügen
        /** @var Twig_Loader_Chain $loader */
        $loader = $contaoTwig->getLoader();
        $loader->addLoader(new MyTwigLoader());
    }
}
Ansichten
Meine Werkzeuge

Contao Community Documentation

ich hook' mich gleich in die Abstraktion

Martin Mildner
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge