Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 17 HTML
  gp 17.1 HTML_BBCodeParser
  gp 17.2 HTML_Crypt
  gp 17.3 HTML_Page2
    gp 17.3.1 Methoden zur Manipulation des Heads
    gp 17.3.2 Methoden zur Manipulation des Bodys
    gp 17.3.3 Ausgabe der HTML-Daten
  gp 17.4 HTML_CSS
    gp 17.4.1 Ausgabe des Stylesheets
  gp 17.5 HTML_Javascript
  gp 17.6 HTML_Template_IT
  gp 17.7 HTML_Template_Flexy
    gp 17.7.1 Fomulare in Flexy
    gp 17.7.2 Plugins
  gp 17.8 HTML_Form
  gp 17.9 HTML_QuickForm
    gp 17.9.1 Standard-Formularelemente
    gp 17.9.2 Erweiterte Formularelemente
    gp 17.9.3 Gruppen
    gp 17.9.4 Verarbeitung des Formulars
    gp 17.9.5 Filter
    gp 17.9.6 Serverseitige Validierung
    gp 17.9.7 Clientseitige Validierung
    gp 17.9.8 Datei-Uploads
    gp 17.9.9 Templates
  gp 17.10 HTML_QuickForm_Controller
  gp 17.11 HTML_Menu
  gp 17.12 HTML_TreeMenu
  gp 17.13 HTML_Progress
  gp 17.14 HTML_Table
  gp 17.15 HTML_Table_Matrix
  gp 17.16 Pager


Rheinwerk Computing

17.7 HTML_Template_Flexy  downtop


Besprochene Version: 1.2.1 Lizenz: PHP-Lizenz
Klassendatei(en): HTML/Template/Flexy.php

HTML_Template_Flexy ist deutlich leistungsfähiger, aber auch ein wenig komplizierter als HTML_Template_IT. Einer der augenfälligsten Unterschiede ist, dass die Templates, die in Flexy genutzt werden, selbst Logik enthalten können. Hierzu sind einige einfache Befehle definiert. Somit kann der »komplizierte« Teil der Logik in der eigentlichen Anwendung verbleiben, aber der Template-Designer gewinnt ein höheres Maß an Flexibilität. Der zweite große Unterschied in der Anwendung ist, dass die Daten, die in das Template eingefügt werden, recht einfach aus beliebigen Objekten übernommen werden können, solange sie in öffentlichen Eigenschaften abgelegt sind.

Um HTML_Template_Flexy nutzen zu können, muss die Template-Engine korrekt initialisiert werden. Die dazu notwendigen Werte müssen dem Konstruktor in Form eines Arrays übergeben werden. Hierzu gibt es zwei Möglichkeiten. Zum einen können Sie die Daten natürlich direkt in die Datei hineinschreiben, die die Templates verarbeitet. Die zweite Möglichkeit ist, mit einer ini-Datei zu arbeiten. Ich habe mich für die zweite Variante entschieden, da die Flexy-Dokumentation selbst auch damit arbeitet und ich hoffe, Ihnen den Zugang damit ein wenig zu erleichtern.

Eine Konfigurationsdatei für Flexy könnte so aussehen:

[HTML_Template_Flexy] 
templateDir = /home/web/public_html/templates 
compileDir = /home/web/public_html/compiled_templates 
forceCompile = 0 
debug = 0 
locale= de 
url_rewrite= "/images/:/assets/images/"

templateDir und compileDir enthalten die Pfade zu den jeweiligen Verzeichnissen. Im ersten finden sich die Templates, mit denen gearbeitet werden soll. Sie können diese Konfigurationsdirektive auch wiederholen, wenn Sie verschiedene Verzeichnisse haben, in denen die Templates abgelegt sind. Im Verzeichnis, das mit compileDir festgelegt wird, werden die fertig kompilierten Templates abgelegt. HTML_Template_Flexy gehört zu den kompilierenden Template-Engines. Das heißt, ein Template wird nur einmal übersetzt. Die so entstandene Ausgabedatei wird nicht überschrieben, solange sich nichts am Template ändert. Dieses Verhalten kann aber durch die nächste Direktive (forceCompile) gesteuert werden. Übergeben Sie hier eine 1, wird die Ausgabedatei immer überschrieben. Schalten Sie den Debug-Modus mit debug = 1 ein, werden zusätzlich Informationen ausgegeben. Allerdings ist dieser Modus wirklich nur für die Entwicklung gedacht.

Mit locale wird die Sprache festgelegt, in der Sie arbeiten. Genauer gesagt wird der String, der hier übergeben wird, dazu genutzt, den Namen der Ausgabedateien zu ergänzen, um erkennen zu können, welche Sprache enthalten ist.

Die letzte Direktive, url_rewrite, ist nicht erforderlich, definiert aber eine sehr nützliche Funktionalität. Hiermit können URLs, die im Template enthalten sind, automatisch umgeschrieben werden. In diesem Fall wird /images/ in /assets/images/ umgewandelt.

Möchten Sie nicht mit einer Konfigurationsdatei arbeiten und lieber ein Array benutzen, ist das kein Problem. In dem Fall nutzen Sie die oben erläuterten Bezeichner als Array-Schlüssel und übergeben ihnen die jeweiligen Werte.

Das folgende Beispiel basiert auf diesem Template:

<html> 
   <head> 
      <title>{title}</title> 
   </head> 
   <body> 
       {content} 
       {ausgabe()} 
   </body> 
</html>

Listing 17.9 Beispiel-Template für Flexy

Wie Sie schon ahnen, werden die Platzhalter auch bei dieser Template-Engine mit geschweiften Klammern markiert. Alle Texte, die aus einem Wort bestehen und direkt von geschweiften Klammern eingeschlossen sind, werden entfernt. Sind in der verarbeitenden Datei entsprechende Variablen vorgesehen, werden diese an der entsprechenden Stelle eingefügt.

Im Body der Seite ist ein Platzhalter zu finden, der runde Klammern enthält. Hier wird nicht der Inhalt einer Variable, sondern des Ergebnis einer Methode eingefügt. Sie können einer Methode, die so eingebunden wird, einen oder mehrere Parameter übergeben. Möchten Sie ihr den Inhalt einer Variable übergeben, schreiben Sie den Namen der Variable zwischen die runden Klammern: {methode(param)}. Um ein String-Literal zu übergeben, setzen Sie den Text zwischen zwei #: {methode(#string#)}.

Enthält Ihr Objekt in einer Eigenschaft ein weiteres Objekt, bei dem Sie auf eine Methode oder Eigenschaft zugreifen wollen, ist das auch kein Problem. Sie nutzen in dem Fall einfach eine Verknüpfung mithilfe eines Punktes: {objekt.eigenschaft} oder {objekt.methode()}.

Die Datei, die das Template verarbeitet, sehen Sie in Listing 17.10.

require_once ('HTML/Template/Flexy.php'); 
 
// Klasse, die fuer die Verarbeitung genutzt wird 
// Der Aufbau ist frei gewaehlt 
class daten_container 
{ 
   public $title; 
   public $content; 
 
   // Konstruktor, der die Eigenschaften mit Werten belegt 
   public function __construct() 
   { 
      $this->title="Hallo Welt"; 
      $this->content="Dies ist ein Flexy-Test"; 
   } 
 
   // Methode, die einen Text ausgibt 
   public function ausgabe() 
   { 
      echo "<br />Ausgabe einer Methode"; 
   } 
} 
 
// Name des Templates 
$template='hallo_welt.tpl'; 
 
// Neues Objekt ableiten 
$daten= new daten_container(); 
 
// Konfigurationsdaten einlesen 
$config = parse_ini_file('flexy.ini',TRUE); 
$options = $config['HTML_Template_Flexy']; 
 
// Neues Flexy-Objekt auf Basis der Konfiguration ableiten 
$ausgabe = new HTML_Template_Flexy($options); 
// Template kompilieren 
$ausgabe->compile($template); 
// Daten aus Objekt einfuegen und Seite ausgeben 
$ausgabe->outputObject($daten);

Listing 17.10 Verarbeitung eines Templates mit Flexy

Die Klasse daten_container, die in diesem Beispiel genutzt wurde, hat einen frei wählbaren Aufbau. Die einzige Vorgabe ist, dass alle Eigenschaften und Methoden, deren Werte bzw. Ausgaben in das Template ausgegeben werden sollen, public sein müssen. Möchten Sie nur Eigenschaften verwalten und benötigen Sie keine Logik in der Klasse, können Sie auch einfach ein Objekt der stdClass von PHP ableiten und nutzen.

Das HTML_Template_Flexy-Objekt bekommt die Vorgaben, die aus der ini-Datei ausgelesen wurden, mit auf den Weg, so dass Sie sich keine Gedanken mehr um Pfade machen müssen. Nach der Instanziierung kann die Methode compile() direkt auf das gewünschte Template zugreifen. Die Methode prüft erst, ob das Template schon in einer kompilierten Version vorliegt. Ist das der Fall, so wird die bereits fertige Version von der Festplatte gelesen. Andernfalls wird das Template übersetzt und abgespeichert.

Die Methode outputObject() bekommt das Objekt übergeben, dessen Daten ausgegeben werden sollen, und fügt diese in das Template ein. Die resultierende fertige Datei wird dann direkt zum Client geschickt, wie Sie in Abbildung 17.1 sehen können.

Abbildung 17.1 Ausgabe des Templates im Browser

Das kompilierte Template wird im vorgegebenen Ordner abgelegt, wobei der Name sich aus dem ursprünglichen Namen zuzüglich des Inhalts von locale und der Endung .php zusammensetzt. Somit ergibt sich in diesem Beispiel aus hallo_welt.tpl der Name hallo_welt.tpl.de.php.

Das kompilierte Template ist eine PHP-Datei, die allerdings nicht direkt aufgerufen werden kann, da sie keine Werte enthält. Das Kompilat sieht so aus:

<html> 
   <head> 
      <title><?php echo htmlspecialchars($t->title);?></title> 
   </head> 
   <body> 
       <?php echo htmlspecialchars($t->content);?> 
       <?php if ($this->options['strict'] || (isset($t) && 
       method_exists($t,'ausgabe'))) 
       echo htmlspecialchars($t->ausgabe());?> 
       <?php echo htmlspecialchars($t->hf);?> 
   </body> 
</html>

Der Code ist nicht sonderlich strukturiert, was aber auch nicht schlimm ist, da er ja nur maschinell verarbeitet wird. Wie Sie sehen können, werden die Ausgaben standardmäßig alle mit htmlspecialchars() bearbeitet.

Sollte Ihnen das nicht zusagen, ist das kein Problem. Sie können an den Namen einer Variable oder einer Methode ein :h anhängen, um zu verhindern, dass htmlspcialchars() genutzt wird. Anstelle von {content} müssten Sie dann also {content:h} schreiben. Sollten Sie eine URL-Kodierung vorziehen, ist es möglich, den Namen einer Variable oder Methode mit dem Filter :u zu ergänzen.

Wie schon erwähnt, unterstützt Flexy ein gewisses Maß an Logik in den Templates.

So ist es beispielsweise möglich, in einem Template eine if-Abfrage zu nutzen. Leider ist hierbei kein Vergleich mit einer anderen Variable oder Konstante möglich.

{if:variable} 
   Ja, Variable ist da 
{else:} 
   Nein, Variable ist nicht da 
{end:}

In der kompilierten Datei wird die Abfrage so eingeleitet:

<?php if ($t->variable) {?>Ja, Variable ist da <?php } else 
                     {?>Nein, Variable ist nicht da <?php } ?>

Die if-Abfrage prüft also nur, ob die Variable in ein true konvertiert werden kann, was problematisch wird, wenn die Zahl 0 oder ein Leerstring gültige Werte für die Variable sind.

Das {else:} ist genau wie in PHP optional, wohingegen das {end:} angegeben werden muss. Anstelle einer Variablen kann auch hier eine Methode genutzt werden, deren Rückgabewert dann als Bedingung ausgewertet wird.

Um das Verhalten umzukehren, können Sie den Ausdruck auch negieren, indem Sie {if:!variable} nutzen.

Des Weiteren ist auch eine foreach-Schleife definiert, mit der Sie Arrays abarbeiten können. Sie ist, ähnlich wie in PHP, in zwei Varianten nutzbar. Entweder lesen Sie nur die Werte oder die Schlüssel und die Werte aus.

Mit

{foreach:daten,wert} 
   <li>{wert} 
{end:}

würde jeder Wert aus dem Array daten ausgelesen und ist dann als Variable {wert} verfügbar. In der zweiten Variante geben Sie nach dem foreach das Array und den Namen für Schlüssel und Wert an:

{foreach:daten,schluessel,wert} 
   {schluessel}: {wert}<br /> 
{end:}

Die Ablaufsteuerung kann allerdings auch über HTML-Attribute stattfinden. Mit anderen Worten: Es ist möglich, Flexy-Befehle in HTML-Tags als Attribute zu platzieren. Diese Attribute werden mit flexy: eingeleitet, so dass sie von normalen HTML-Attributen unterschieden werden können. Mit der Zeile

<a href="php.html" flexy:if="wert">Hier klicken</a>

wird geprüft, ob die Variable wert in true konvertierbar ist. Sollte das nicht der Fall sein, wird das gesamte Tag nicht angezeigt. Ein Beenden der if-Abfrage ist nicht nötig, und ein else-Teil ist auch nicht vorgesehen. Eine negierte Variante mit flexy:if="!wert" ist hier genauso möglich wie die Nutzung von Methoden anstelle einer Variable.

Sie können auch die foreach-Schleife in dieser Syntax zum Einsatz bringen.

<ul> 
   <li foreach="daten,wert">{wert}</li> 
</ul>

In diesem Beispiel wird das Array daten abgearbeitet, und bei jedem Schleifendurchlauf wird der aktuelle Wert des Arrays in der Variable wert abgelegt. Sie können auch hier eine Variante mit Schlüssel und Wert nutzen, indem Sie noch eine zusätzliche Variable anhängen.

Ein interessantes Feature ist die Möglichkeit, nur bestimmte Elemente eines Templates ausgeben zu lassen bzw. bestimmte Elemente zu ignorieren. Dahinter steckt die Idee, dass Sie vielleicht ein visuelles Entwurfstool wie Dreamweaver nutzen wollen, um Templates zu erstellen. Hieraus könnte das Problem resultieren, dass Dreamweaver alle Tags wie <html>, <head> etc. benötigt, diese im Template aber nicht erwünscht sind, weil es vielleicht in eine bestehende HTML-Seite eingebaut werden soll. Mit flexy:start="here" legen Sie fest, welches Tag als Erstes ausgegeben werden soll.

<body> 
   <table flexy:start="here"> 
      <tr><td>Hallo Welt (schon wieder )</td></tr> 
   </table> 
</body>

Flexy gibt dann alle Daten zwischen diesem und dem dazugehörigen schließenden Tag aus. In diesem Beispiel würde also alles von <table> bis </table> ausgegeben. Alternativ können Sie mit flexy:startchildren="here" auch festlegen, dass das nachfolgende Tag als Erstes ausgegeben wird und dass das Tag, in dem das Attribut steht, auch ignoriert wird.

Hierzu ist auch eine inverse Funktionalität definiert. Und zwar können Sie bestimmte Tags von der Verarbeitung ausschließen, wenn das nötig ist. In dem Beispiel

<body> 
   <table flexy:ignore="yes"> 
      <tr><td>Hallo Welt (schon wieder )</td></tr> 
   </table> 
</body>

würden nur die <body>-Tags übrig bleiben. Nutzen Sie flexy:ignoreonly="yes", werden nur die Kind-Elemente entfernt. Zusätzlich zu den <body>-Tags bleiben also die <table>-Tags erhalten.


Rheinwerk Computing

17.7.1 Fomulare in Flexy  downtop

Um Formulare möglichst einfach nutzen zu können, ist in Flexy eine spezielle Klasse vorgesehen. Für jedes Formular-Element, das über Flexy angesprochen werden soll, ist ein Objekt der Klasse HTML_Template_Flexy_Element vorzusehen. Diese Objekte werden in einem Array zusammengefasst und als zweiter Parameter an die Methode outputObject() übergeben. Im folgenden Beispiel wird dieses Template genutzt:

<html> 
   <head> 
      <title>{title}</title> 
   </head> 
   <body> 
   <form method="post"> 
   <input type="text" name="text" /> 
   <input type="radio" name="anrede" id="rad_herr" 
                                      value="Herr" /> 
   <input type="radio" name="anrede" id="rad_frau" 
                                      value="Frau" /> 
   <select name="land"></select> 
   </form> 
   </body> 
</html>

Listing 17.11 Formular für die Beispiele

In dem Formular sind ein Text-Feld, eine Optionsliste und zwei Radio-Buttons enthalten. Mit Ausnahme der Radio-Buttons werden alle Elemente über ihren Namen identifiziert. Da in einer Gruppe von Radio-Buttons alle Elemente denselben Namen haben müssen, ist das hier nicht möglich. Diese müssen über das id-Attribut identifiziert werden, das mit einem eindeutigen Wert versehen werden muss. Um das Formular nutzbar zu machen, können Sie den Code aus Listing 17.12 nutzen.

require_once ('HTML/Template/Flexy.php'); 
// Zusaetzliche Datei einbinden 
require_once ('HTML/Template/Flexy/Element.php'); 
$template='hallo_welt.tpl'; 
class daten_container 
{ 
   public $title; 
   // Array fuer die Formular-Elemente 
   public $elemente = array(); 
 
   public function __construct() 
   { 
      $this->title= 'Test mit einem Form'; 
      // Neues Element-Objekt 
      $this->elemente['text']=new HTML_Template_Flexy_Element; 
      // Wert fuer das Element 
      $this->elemente['text']->setValue('Hier schreiben'); 
      // Text vor dem Element 
      $this->elemente['text']->prefix='Ihr Name'; 
      // Text hinter dem Element 
      $this->elemente['text']->suffix='Kein Pflichtfeld<br/>'; 
 
      // Neues Element fuer Radio-Button Herr 
      $this->elemente['rad_herr']= 
                           new HTML_Template_Flexy_Element; 
      $this->elemente['rad_herr']->prefix='Anrede<br />'; 
      $this->elemente['rad_herr']->suffix='Herr<br />'; 
      // Attribut setzen 
      $this->elemente['rad_herr']->setAttributes( 
                                       'checked="checked"'); 
 
      $this->elemente['rad_frau']= 
                           new HTML_Template_Flexy_Element; 
      $this->elemente['rad_frau']->suffix='Frau<br />'; 
 
      // Laender, die in der Optionsliste auftauchen sollen 
      $laender = array ('DE','AT','CH'); 
      $this->elemente['land']=new HTML_Template_Flexy_Element; 
      //Optionen aus Array uebernehmen 
      $this->elemente['land']->setOptions($laender); 
      $this->elemente['land']->prefix='Ihr Land '; 
   } 
} 
 
$daten= new daten_container(); 
$config = parse_ini_file('flexy.ini',TRUE); 
$options = $config['HTML_Template_Flexy']; 
$ausgabe = new HTML_Template_Flexy($options); 
$ausgabe->compile($template); 
// Daten und Array mit Elementen uebergeben 
$ausgabe->outputObject($daten, $daten->elemente);

Listing 17.12 Verarbeitung von Formularen mit Flexy

Für jedes Formular-Element wird in dem Array elemente ein eigenes Objekt angelegt. Hierbei müsste es sich nicht unbedingt um ein Array handeln, das in einem Objekt abgelegt ist. Ein »normales« Array würde reichen. Jedes der Objekte kennt die Eigenschaften prefix und suffix. In der ersten können Sie einen Text ablegen, der jeweils vor dem Element ausgegeben wird. Der Inhalt der zweiten Eigenschaft wird jeweils dahinter ausgegeben.

Mit der Methode setValue() können Sie dem Formular-Element einen Wert übergeben, der dann an das Attribut value übergeben wird bzw. bei einer Textarea zwischen dem öffnenden und schließenden Tag ausgegeben wird. Um ein Attribut zu setzen, ist setAttributes() vorgesehen. Diese Methode bekommt das oder die Attribute, die in das Tag eingefügt werden sollen, als Array oder String übergeben.

Nutzen Sie eine Optionsliste, so können Sie diese automatisch mit Werten füllen lassen. Diese können in Form eines Arrays an die Methode setOptions() übergeben werden. Die Schlüssel werden jeweils als Werte für das value-Attribut genutzt, und die Array-Werte werden als Texte ausgegeben.


Rheinwerk Computing

17.7.2 Plugins  toptop

Flexy unterstützt so genannte Plugins. Hierbei handelt es sich um Klassen, die mithilfe bestimmter Methoden zusätzliche Funktionalitäten zur Verfügung stellen. Solche Plugins können Sie, wenn Sie mögen, selbst erstellen, aber eine Bibliothek namens Savant ist bereits im Lieferumfang enthalten.

Um ein Plugin nutzen zu können, müssen Sie die dazugehörige Klasse ins System einbinden. Das kann entweder über die ini-Datei oder über ein Array erfolgen. An dieser Stelle würde ich die Nutzung eines Arrays vorziehen, da das Plugin sicher nicht auf allen Seiten benötigt wird:

// Speicherort des Plugins 
$plugins=array('plugins' => 
                 array('HTML_Template_Flexy_Plugin_Savant' 
                     =>'HTML/Template/Flexy/Plugin/Savant.php' 
                 )); 
$config = parse_ini_file('flexy.ini',TRUE); 
$options = $config['HTML_Template_Flexy']; 
 
// beide Arrays zusammenfuehren 
$options=array_merge($options,$plugins); 
$ausgabe = new HTML_Template_Flexy($options);

Das Plugin Savant basiert auf der Klasse HTML_Template_Flexy_Plugin_Savant, die in der Datei Savant.php abgespeichert ist, die im Ordner HTML/Template/Flexy/Plugin/Savant liegt.

Bei Plugins gibt es unterschiedliche Möglichkeiten, die enthaltenen Methoden anzusprechen. Im Plugin Savant ist dateformat zum Formatieren von Zeitangaben enthalten. Sie können dateformat im Template auf zwei Weisen ansprechen. Zum Ersten können Sie es als Filter ins Template einbinden:

{datum:dateformat}

Da dateformat als Methode definiert ist, kann sie natürlich auch Parameter übergeben bekommen. In diesem Fall akzeptiert die Methode einen Formatbeschreiber, der definiert, wie das Ausgabedatum formatiert sein soll. Nutzen Sie das Plugin als Filter, kann dieser Formatbeschreiber nicht übergeben werden. In diesem Fall ist es möglich, den String für die Formatierung in einem Array abzulegen. Übergeben Sie dem Konstruktor der Klasse HTML_Template_Flexy zusätzlich zu den schon definierten Array-Inhalten noch $options ['plugin.dateformat']='%d %b %Y', würde das Datum entsprechend dieser Vorgabe formatiert. Allerdings ist die Nutzung als Filter nicht bei allen Plugins möglich.

Die zweite Variante, ein Plugin anzusprechen, besteht darin, die Methode direkt aufzurufen:

{this.plugin(#dateformat#,datum,#%d#)}

Ein HTML_Template_Flexy-Objekt kennt die Methode plugin(), mit der ein solches Plugin direkt aufgerufen werden kann. Der erste Parameter ist hierbei der Name des Plugins, worauf die Parameter folgen, die das Plugin erwartet bzw. akzeptiert.

Ganz wichtig bei der Nutzung von Plugins ist Folgendes: Wenn Sie eine Methode nutzen, die einen Text ausgibt, beispielsweise ein HTML-Tag, wird dieser an htmlspecialchars() übergeben. Aus einem <p> würde somit ein &lt;p&gt;. Daher ist es sehr wichtig, bei solchen Methodenaufrufen den Filter :h zu nutzen, um diese Konvertierung zu verhindern.

Nachfolgend finden Sie die Methoden, die Savant definiert:

  • ahref Mit ahref können Sie einen Link erzeugen lassen. Das Plugin kann nur über die Methode plugin() aufgerufen werden und bekommt das Linkziel und den Linktext übergeben. Zusätzlich können Sie noch frei formulierbare Attribute als String angeben.
{this.plugin(#ahref#,#http://www.audi.de#,#zu Audi#, 
                                    #target=_blank#):h}
  • checkbox Mit dieser Plugin-Methode können Sie eine Checkbox erzeugen, die immer einen Wert zurückliefert. Hierzu werden eine Checkbox und ein verstecktes Feld in das Formular ausgegeben. Die Methode bekommt den Namen der Checkbox und den Rückgabewert, wenn sie angeklickt wurde, als obligatorische Parameter übergeben. Danach können Sie den Rückgabewert nochmal wiederholen, um der Methode mitzuteilen, dass die Checkbox schon angehakt sein soll, wenn die Seite geladen wird. Danach können Sie noch den Wert angeben, den die Box liefern soll, wenn sie nicht angeklickt ist, sowie einen String mit Attributen, die in das Tag übernommen werden.
{this.plugin(#checkbox#,#werbung#,#ja#,#ja#,#nein#):h}
  • dateformat Wie schon erwähnt, kann dateformat ein Datum entsprechend Ihrer Vorgaben umformatieren. Das Datum selbst kann entsprechend von PHPs strtotime() [www.php.net/strtotime ] -Konventionen angegeben werden. Mit now bekommen Sie somit immer das aktuelle Datum. Der Formatstring ist entsprechend der Vorgaben für strftime() [www.php.net/strftime ] aufzubauen.
{this.plugin(#dateformat#,#now#,#%d %b %Y'#):h}
    • dateformat kann auch als Filter genutzt werden, wenn Sie den Format-String in der PHP-Datei dem Array-Element $options['plugin.dateformat'] zuweisen.
  • image Mit diesem Plugin können Sie auf einfachem Weg ein <img>-Tag erzeugen. Der erste Parameter ist hierbei die URL des Bildes. Darauf folgen optionale Werte, von denen der erste der Text für das alt-Attribut ist. Danach können Sie die Werte für die Attribute border, width und height angeben.
{this.plugin(#image#,#/images/bild.gif#,#ein Bild#):h}
  • input Dieses Plugin kann ein beliebiges <input>-Tag ausgeben. Der erste Parameter ist hierbei der Typ des Tags, also z. B. text, checkbox, password etc. Danach müssen Sie den Namen angeben. Optional können Sie weiterhin einen Wert für das Attribut value und einen String mit Attributen angeben, die direkt übernommen werden.
{this.plugin(#input#,#text#,#Hier schreiben#):h}
  • javascript javascript kann als Filter genutzt oder direkt aufgerufen werden. Der übergebene String wird als URL einer JavaScript-Datei interpretiert, die dann mit <script src="datei.js" type="text/javascript"> eingebunden wird.
{this.plugin(#javascript#,#datei.js#):h}
  • numberformat numberformat dient dazu, eine Zahl korrekt zu formatieren, und kann sowohl als Filter als auch als Methode aufgerufen werden. Im zweiten Fall bekommt numberformat an erster Stalle die Zahl übergeben, die ausgegeben werden soll. Danach können Sie definieren, wie viele Nachkommastellen ausgegeben werden sollen (Standard ist 2). Mit den letzten beiden Parametern können Sie festlegen, wie der Dezimalpunkt und das Tausendertrennzeichen dargestellt werden sollen.
    • Mit
{this.plugin(#numberformat#,zahl,2,#,#,#.#):h}
    • wird der Inhalt von zahl mit zwei Nachkommastellen ausgegeben, wobei diese mit einem Komma und die Tausender mit einem Punkt abgetrennt werden.
    • Um numberformat als Filter nutzen zu können, müssen Sie die Formatierung in der PHP-Datei festlegen, die das Template verarbeitet. Hierbei wird $options['plugin.numberformat.decimals'] die Anzahl der Nachkommastellen zugewiesen; $options['plugin.numberformat.point'] speichert das Zeichen zur Abtrennung der Nachkommastellen, und in $options['plug- in.numberformat.thousands'] ist das Tausendertrennzeichen enthalten.
  • radios Die Methode radios dient dazu, eine Gruppe von Radio-Buttons ausgeben zu lassen. Als ersten Parameter bekommt die Methode den Namen der Gruppe übergeben. Der nächste obligatorische Parameter ist ein assoziatives Array, in dem die Werte und Texte enthalten sind, die hinter den Buttons ausgegeben werden. Die Schlüssel des Arrays werden somit zu den Werten der value-Attribute. Die Anzahl der Buttons entspricht der Anzahl der Elemente in dem Array. Der nächste Parameter ist, genau wie die folgenden, optional und legt fest, welcher der Buttons bereits angeklickt sein soll. Hierzu muss der Wert des Buttons angegeben werden. Danach können Sie angeben, welchen Wert die Gruppe zurückgeben soll, wenn keiner der Buttons angeklickt ist. Zu guter Letzt können Sie noch einen Separator und einen String mit Attributen angeben, der in jeden Radio-Button eingefügt wird. Der Separator dient dazu, die einzelnen Buttons voneinander zu trennen, wozu normalerweise <br />\n genutzt wird.
{this.plugin(#radios#,werte,#aktiv#,#keine 
Auswahl#,#<br>#):h}
  • stylesheet stylesheet bindet, ähnlich wie javascript, eine externe Stylesheet-Datei ein, wobei der Befehl das <link href="datei.css" />-Tag nutzt. Die Methode kann sowohl als Methode als auch als Filter genutzt werden.
{this.plugin(#radios#,#datei.css#):h}
  • textarea Diese Methode kann ein Textarea-Element ausgeben. Der erste Parameter, den die Methode erhält, ist der Name der Textarea, worauf der Text folgt, mit dem die Box vorbelegt werden soll. Auch dieser Parameter ist obligatorisch. Danach können Sie die Anzahl der Zeilen (Standard: 24) sowie die Anzahl der Spalten (Standard: 80) angeben. Mit dem letzten Parameter können Sie auch hier wieder einen String mit Attributen übergeben. Auch wenn die letzten drei Parameter optional sind, sollten Sie schon Zeilen und Spalten angeben, da die Box sonst recht groß wird.
{this.plugin(#textarea#,#eingabe#,##,5,20):h}
 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern