Einführung

Einführung --  Was HTML_Template_Flexy kann.

Einführung

HTML_Template_Flexy (kurz: Flexy) war ursprünglich eine eine Vereinfachung von HTML_Template_Xipe. Das Langzeit-Ziel von Flexy ist eine universale Basis-Schnittstelle für kompilierende und PHP-erzeugende Templates.

Flexy unterstützt eine Reihe von Backends (Templateformaten) und wurde entwickelt um weitere zu unterstützen. Schlüsselformate sind:

Daten können auf zwei Wegen mit Flexy zugewiesen werden, abhängig davon, welche Methode Sie bevorzugen.

Trotz seiner Flexibiltät:

Wie sich HTML_Template_Flexy von anderen Templatesystemen unterscheidet

Wenn man sich umschaut, findet man sehr viele Templatesysteme für PHP. Sie fallen normalerweise in zwei Kategorien: Ersetzungssystem und (PHP-)Code-Erzeugungssystem.

Ersetzungsysteme sind z.B.: HTML_Template_IT, FastTemplate, PhpLib. Diese tendieren dazu langsam bei der Verarbeitung von (verschachteln) Blöcken zu sein und benötigen viel Code um jede Variable im Template zu ersetzen.

Code-Erzeugungssysteme wir Flexy, Smarty, HTML_Template_Xipe tendieren dazu besser mit komplexen Templates zurechtzukommen und sind besser erweiterbar. Das Ziel von Flexy ist es integrierten Support für alle diese PHP-Generatoren anzubieten.

Der standardmäßige Template-Kompiler benutzt einen Tokenizer, der HTML-Tags und -Attribute benutzt, um Schleifen und Bedingungen zu formulieren, und um die Elemente eines HTML-Formulares ähnlich wie bei XML_Tree zu manipulieren. Die Umwandlung erfolgt dabei nur einmal während der Template-Kompilierung.

Typische Benutzung

Ein Flexy-Template wird normalerweise innerhalb einer Comntroller-Klasse aufgerufen. HTML_Template_Flexy wird dazu der Name des Templates und dem auszugebenden Objekt übergeben - jede Variable die Sie ausgeben wollen, muss darin definiert sein.

Beispiel 42-1. Anwendungsbeispiel für HTML_Template_Flexy

<?php

/* configure the application - probably done elsewhere */
require_once 'HTML/Template/Flexy.php';
require_once 'PEAR.php';
$options = &PEAR::getStaticProperty('HTML_Template_Flexy','options');
$config = parse_ini_file('example.ini',TRUE);
$options = $config['HTML_Template_Flexy'];


/* the page controller class */

class controller_test
{

    var $template = "home.html"; // name of template
    var $title;                  // this relates to {title};
    var $numbers = array();      // this relates to {numbers} , used with foreach
    var $anObject;

    var $elements = array();      // this is where the elements are stored

    /* start section - deals with posts, get variables etc.*/

    function controller_test()
    {
        $this->start();
        $this->output();
    }


    function start()
    {
        // the title
        $this->title = "Hello World";

        // store an object.
        $this->anObject = new StdClass;

        // assign a value to a member.
        $this->anObject->member = 'Object Member';

        // if you need form elements - you have to include them.
        require_once 'HTML/Template/Flexy/Element.php';

        // create an HTML Element for the form element.
        $this->elements['input'] = new HTML_Template_Flexy_Element;

        // assign a value to it
        $this->elements['input']->setValue('Hello');


        for ($i = 1;$i< 5;$i++) {
            $this->numbers[$i] = "Number $i";
        }
    }

    /* output section - probably best to put this in the default_controller class */

    function output() {
        $output = new HTML_Template_Flexy();
        $output->compile($this->template);
        $output->outputObject($this,$this->elements);
    }


    function someMethod() {
        return "<b>Hello From A Method</b>";
    }



}

/* the page controller instantaation - probably done with a factory method in your master page controller class */

new controller_test();


?>

Als nächstes das Beispiel-Template:

Und die Ausgabe: