OPT Open Power Template System szablonów OPT System szablonów PHP5 Niektóre możliwości: Cache Nagłówki HTTP oraz kompresja Rozszerzalność Struktury kontrolne Wysokopoziomowe struktury Ułatwienia Wysoka wydajność Przykładowy skrypt oraz szablon OPT OPT API <?php define( OPT_DIR,../ lib / require( OPT_DIR. opt. class. php try { $tpl = new optclass ; $tpl > root =./ templates / ; $tpl > compile =./ templates_c / ; $tpl > gzipcompression = 1 ; $tpl > httpheaders ( OPT_HTML $tpl > assign( current_date, date ( d.m.y, H:i ) catch ( optexception $exception ) { opterrorhandler ( $exception?> Hello World! It s {$current date example.tpl <?php define ( OPT_DIR,../ lib / require ( OPT_DIR. opt. api. php class optparser extends optapi { // nasz w l a s n y kod try { $tpl = new optparser ; $tpl > root =./ templates / ; $tpl > compile =./ templates_c / ; $tpl > assign ( current_date, date ( d.m.y ) $tpl > parse ( my_template. tpl catch ( optexception $exception ) { opterrorhandler ( $exception?>
Instrukcja Section Instrukcja section <table> <th>#</ th> <th>name</ th> <th>description</ th> {section=products <td>{$products.id</ td> <td>{ $products. name </ td> <td>{ $products. description </ td> {/section </ table> $list = array ( $list [ ] = array ( id => 1, name => Produkt 1, description => Opis produktu 1 $list [ ] = array ( id => 2, name => Produkt 2, description => Opis produktu 2 $tpl > assign ( products, $list # Name Description 1 Produkt 1 Opis produktu 1 2 Produkt 2 Opis produktu 2 Instrukcja show Instrukcja show <ul>{ section=categories <li>{ $categories. name {show=products <br/> <table> <th>#</ th> <th>nazwa</ th> { section=products <td>{ $products. id</ td> <td>{ $products. name </ td> {/ section </ table> {showelse ( No results ) {/show </li> {/ section </ul> $categories = array ( $categories [ 1 ] = array ( name => Kategoria 1 $products = array ( $products [ 1 ] [ ] = array ( id => 1, name => Produkt 1 $tpl > assign ( categories, $categories $tpl > assign ( products, $products Kategoria 1 # Nazwa 1 Produkt 1
Bloki językowe { wstaw obecna date do bloku jezykowego global@date { $apply( $global@date, $current_date ) {$global@text1<br> { $global@text2 <br> { $global@date <br> Bloki językowe $lang = array ( global => array ( text1 => To jest tekst 1, text2 => To jest tekst 2, date => Dzis jest %s, dobry dzien na wedkowanie ) $tpl > setdefaulti18n ( $lang $tpl > assign ( current_date, date ( d.m.y ) To jest tekst 1 To jest tekst 2 Dzis jest 23.01.2008, dobry dzien na wedkowanie Instrukcja include Instrukcja place {include=" header. tpl " ;! x ; content <p>strona :</ p> {@content <i>cialo strony</ i> { include=" footer. tpl " { place file=" header. tpl " assign=" content " { @content <i>cialo strony</ i> { place=footer. tpl
Komponenty Komponent zdefiniowany Komponent port Rodzaje komponentów niezdefiniowane zdefiniowane selectcomponent textinputcomponent textlabelcomponent formactionscomponent Wybierz kategorie : {selectcomponent datasource=" $list " { param name=" name " value=" selected " {/ param { param name=" message " value=" $message " {/ param {onmessage message=" msg " position=" down " <font {/onmessage {/selectcomponent color=" red ">{ @msg </ font> $list = array (0 => array ( value => 0, desc => SELECT ) $list [ ] = array ( value => 1, desc => Opis 1 if ( / wybrano,, SELECT / ) $tpl > assign ( message, Bledny wybor! $tpl > assign ( list, $list Komponent niezdefiniowany Cache owanie wyjścia HTTP Wybierz kategorie : {component id="$selector" { onmessage message=" msg " position=" down " <font color=" red ">{ @msg </ font> {/ onmessage {/component $selector = new selectcomponent ; $selector > set ( name, selected $selector > push ( 0, SELECT $selector > push ( 1, Opis 1 if ( / wybrano,, SELECT / ) $selector > set ( message, Invalid choice! $tpl > assign ( selector, $selector $tpl > cache =./ cache / ; $tpl > cacheexpire = 3 0 ; $tpl > assign ( current_date, date ( d.m.y, H:i:s ) $tpl > cachestatus ( true {dynamic <p>dynamic date : { $current_date </ p> {/dynamic <p>static ( cached ) date : { $current_date </ p>
Instrukcja capture Instrukcja bind { we don t want to print a table row unless content is displayed {capture=banner { include file=" get_banner.tpl " {/capture {if $opt. capture. banner ne "" <table> <td> { $opt.capture.banner </td> </ table> {/if { var=variable1 ; " Wartosc 1" {bind=snippet <font color=" blue ">Tekst : { @variable1 </ font><br/> {/bind {insert=snippet { skrypt uwzgledni zmiane wartosci zmiennej po ponownym umieszczeniu wstawki { @variable1 = " To jest kolejna wartosc " {insert=snippet <font color=" blue ">Tekst : Wartosc 1</font><br/> <font color=" blue ">Tekst : To jest kolejna wartosc </font> Instrukcja tree <ol> {tree=mytree { leaf <li>{ $mytree. title </ li> {/ leaf { opening <li>{ $mytree. title <ol> {/ opening { closing </ol></li> {/ closing {treeelse <li>nie podano zadnego drzewa.</ li> {/tree </ol> Instrukcja tree $tree = array ( 0 => array ( title => Element 1, depth => 0), array ( title => Element 1.1, depth => 1), array ( title => Element 1.2, depth => 1), array ( title => Element 1.2.1, depth => 2), array ( title => Element 2, depth => 0) $tpl > assign ( mytree, $tree 1. Element 1 1. Element 1.1 2. Element 1.2 1. Element 1.2.1 2. Element 2
Instrukcja pagesystem { show=list <ol> { section <li>{ $list. item </ li> {/ section </ol> {/ show Strona { $ps >active ( ) z { $ps >count ( ) <br> {pagesystem=ps { page [ <a href="{ @url ">{ @title </a> ] { / page { active< ; <strong><a href="{ @url ">{ @title </ a></ strong> > ; { / active { separator { / separator { prev <a href="{ @url ">prev</a> : : {/ prev { next : : <a href="{ @url ">next</a>{/ next { first <a href="{ @url ">first</a> : : {/ first { last : : <a href="{ @url ">last</a>{/ last {/pagesystem Instrukcja pagesystem $data = array ( for ( $i = 1 ; $i <= ITEM_NUM ; $i++){ $data [ ] = Item. $i ; $ps = new pagesystem ( ITEM_NUM, PAGE_SIZE, example. php $rows = array ( for ( $i = $ps > startpos ( $i <= $ps > endpos ( $i++) { if ( isset ( $data [ $i ] ) ) { $rows [ ] = array ( item => $data [ $i ] else { break ; $tpl > assign ( list, $rows $tpl > assign ( ps, $ps 1. Item 1... 11. Item 11 Strona 1 z 30 first :: < 1 >[ 2 ][ 3 ][ 4 ]...[ 30 ] :: next :: last Projekt komponentu Typ: pole tekstowe Samodzielne pobieranie danych Automatyczne załadowanie poprzedniej zawartości Komunikaty błędów y myinputcomponent.php skrypt.php y szablon.tpl szablon wyniki.tpl
Klasa i jej konstruktor Metoda setoptinstance() <?php define ( OPT_DIR,../ lib / require (../ lib / opt. components. php class myinputcomponent implements ioptcomponent { private $name ; private $validform = true ; private $predefinedvalues = array ( private $messagebuffer = array ( private $htmltags = array ( private $opt ; Klasa public function construct ( $name = ) { if ( $name!= ) { $this > htmltags [ name ] = $this > name = $name ; // end c o n s t r u c t ( Konstruktor public function setoptinstance ( optclass $tpl ) { $this > tpl = $tpl ; if ( isset ( $this > tpl > data [ validform ] ) ) { $this > validform = ( bool ) $this > tpl > data [ validform ] ; if ( isset ( $this > tpl > data [ messagebuffer ] ) ) { $this > messagebuffer = &$this > tpl > data [ messagebuffer ] ; if ( isset ( $this > tpl > data [ predefinedvalues ] ) ) { $this > predefinedvalues = &$this > tpl > data [ predefinedvalues ] ; // end s e t O p t I n s t a n c e ( Metody set(), push() oraz setdatasource() Metody begin() oraz end() public function set ( $name, $value ) { $this > htmltags [ $name ] = $value ; if ( $name == name ) { $this > name = $value ; // end s e t ( public function push ( $name, $value, $selected = false ) { // end push ( public function setdatasource (& $source ) { $this > predefinedvalues = $source ; // end s e t D a t a s o u r c e ( public function begin ( ) { if (! $this > validform ) { $this > htmltags [ value ] = $_POST [ $this > name ] ; else { $this > htmltags [ value ] = ; if ( isset ( $this > predefinedvalues [ $this >name ] ) ) { $this > htmltags [ value ] = $this > predefinedvalues [ $this >name ] ; echo <input type =" text ". generatetagelementlist ( $this >htmltags ). / > ; // end b e g i n ( public function end ( ) { // end end (
Metoda onmessage() z komunikatami błędów?> public function onmessage ( $msg ) { if (! $this > validform ) { if ( isset ( $this > messagebuffer [ $this >name ] ) ) { $this > tpl > vars [ $msg ] = $this > messagebuffer [ $this >name ] ; return true ; return false ; // end onmessage ( <opt:bindevent i d=" defaultmessage " name=" onmessage " message=" msg " p o s i t i o n=" down "> <br/><span style=" color : # ff0000 ;">{ @msg </ span> </opt:bindevent> <opt : i f t e s t=" not $validform "> <p>formularz nie zostal prawidlowo wypelniony.</ p> </ opt : i f> <form method=" post " action=" skrypt. php "> <opt : s e c t i o n name=" components "> <strong>{ $components. title </ strong> <opt:component id=" $components. item "> <opt:load e v e n t=" defaultmessage "/> </opt:component> </ opt : s e c t i o n> <form> z wynikami Początek skryptu <table border=" 0"> <td>imie :</td> <td>{ $name </ td> <td>nazwisko :</ td> <td>{ $surname </ td> <td>e mail :</td> <td>{ $email </ td> <?php define ( OPT_DIR,./ lib / require (./ lib / opt. class. php require (./ myinputcomponent. php try { $tpl = new optclass ; $tpl > root =./ templates / ; $tpl > compile =./ templates_c / ; $tpl > gzipcompression = true ; $tpl > xmlsyntaxmode = true ; $tpl > httpheaders ( OPT_HTML $tpl > registercomponent( myinputcomponent
Tworzenie formularza Kontrola poprawności danych $components = array ( $components [ 0 ] = array ( title => Imie, item => new myinputcomponent ( name ) $components [ 1 ] = array ( title => Nazwisko, item => new myinputcomponent ( surname ) $components [ 2 ] = array ( title => Adres e- mail, item => new myinputcomponent ( email ) if ( $_SERVER [ REQUEST_METHOD ] == POST ) { $valid = 1 ; $messages = array ( if ( strlen ( $_POST [ name ] ) < 3) { $valid = 0 ; $messages [ name ] = Podane imie jest zbyt krotkie! ; if ( strlen ( $_POST [ surname ] ) < 3) { $valid = 0 ; $messages [ surname ] = Podane nazwisko jest zbyt krotkie! ; if (! preg_match ( /(.+) \@ (.+) \.(.+) /, $_POST [ email ] ) ) { $valid = 0 ; $messages [ email ] = Podany adres e- mail ma nieprawidlowy format. ; Ponowne ładowanie formularza Koniec skryptu if (! $valid ) { $tpl > assign ( validform, false $tpl > assign ( messagebuffer, $messages $tpl > assign ( components, $components $tpl > parse ( szablon. tpl else { $tpl > assign ( name, $_POST [ name ] $tpl > assign ( surname, $_POST [ surname ] $tpl > assign ( email, $_POST [ email ] $tpl > parse ( szablon_wyniki. tpl?> else { $tpl > assign ( validform, true $tpl > assign ( components, $components $tpl > parse ( szablon. tpl catch ( optexception $exception ) { opterrorhandler ( $exception
OPT 2.0 Literatura Składnia oparta o język XML Wsparcie dla dokumentów XML i XHTML Wsparcie dla HTML Tryb tekstowy T. Jędrzejewski, T. Szczupliński, Open Power Template. Dokumentacja - wersja 1.1.3. T Jędrzejewski, Wprowadzenie do OPT.