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:

  • Standard - eine mächtige, token-basierte Template-Engine. Es unterstützt {Variablen_Platzhalter} , Attribute (flexy:foreach="....") und selbstdefinierte Tags <flexy:tojavascript ... > . Durch das Markup wird unmittelbar PHP-Code erzeugt. Die Templates können in WYSIWYG-HTML-Editoren ohne Probleme bearbeitet werden.

  • Regex - eine klassische Template-Engine die Smarty, Xipe oder Email-Templates konvertiert.

  • Raw - ein nicht kompilerendes Backend, mit dem Templates mit PHP erzeugt werden können. Nützlich, wenn eine Anwendung weitergegeben werden soll und die Kompilierung u.U. nicht möglich ist.

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

  • Push - Sie übergeben Daten an die Template-Engine über $flexy->setData() und $flexy->setDataByRef(). Das ist vergleichbar, mit der Funktionsweise unter Smarty und ähnlicher Systeme.

  • Push/Pull - Sie stellen ein Objekt mit den Daten zur Verfügung (Data-Provider-Objekt), das die Daten für die Ausgabe enthält. Das hat den Vorteil, dass die Variablen im Template dokumentiert werden können, z.B. mit Hilfe von PHPDoc comments.

Trotz seiner Flexibiltät:

  • besitzt es immer noch eine leichtgewichtige, einfach zu lernende API

  • ist es schnell, da bei Standardoperationen nur wenig Code geladen wird

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.

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;$i5;$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:

Beispiel-Template für HTML_Template_Flexy

//ignore any php tags before this comment
<html>
  <head>
    <title>{title}</title>
  </head>
  <body>
  <H1>{title}</H1>



    <form name="form">
    <table>
      <tr>
        <td>
         <?php /*  this will be merged with the date in the  $element['input']  object*/ ?>

          Input Box: <input name="input">
        </td>
      </tr>

      <?php /*  note here the use for flexy:foreach as an attribute value */ ?>

      <tr flexy:foreach="numbers,number,string">
        <td>

      <?php /*   note here the use for flexy:foreach as an attribute value */ ?>

          <a href="mypage.html?id=%7Bnumber%7D">{string}</a>
        </td>
      </tr>


    </table>

    <?php /*   there is some limited support for array access */ ?>

    this is number 2 : {numbers[2]}


    <?php /*  note that full stops seperate object and variables or methods */ ?>

  This is a {anObject.member}

    <?php /* you can call methods of the object */ ?>

    {someMethod()}

    <?php /* by default everything is htmlspecialchar escaped use the modifier :h to prevent this. */ ?>

    {someMethod():h}

  </body>
</html>

<?php /*  I've used php for comments here as HTML comments didnt work when generating the
manual .. - you dont have to use them - it has nothing to do with the template engine */ 
?>

Und die Ausgabe:

Ausgabe von HTML_Template_Flexy




Hello World

Input Box : [Hello     ]
Number 1
Number 2
Number 3
Number 4

this is number 2 : Number 2


This is a member Variable

<B>Hello From A Method</B>

Hello From A Method
HTML_Template_Flexy (Previous) Setzen der Standardeinstellungen für HTML_Template_Flexy (Next)
Last updated: Sun, 19 Dec 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.