OPT Open Power Template. System szablonów OPT. Przykładowy skrypt oraz szablon OPT OPT API

Podobne dokumenty
Plan prezentacji. System szablonów OPT. OPT Open Power Template. System szablonów. Przedmiot: Internet i jego zastosowanie. Wstęp

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

XHTML - Extensible Hypertext Markup Language, czyli Rozszerzalny Hipertekstowy Język Oznaczania.

I.Wojnicki, PHP. Smarty. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie. 28 marca 2014

MVC w praktyce tworzymy system artykułów. cz. 1

media Blitz wydajne sytemy szablonów

Systemy internetowe Wykład 3 PHP

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Podstawy (X)HTML i CSS

Programowanie i projektowanie obiektowe

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Internetowe bazy danych

Na początku utworzymy formularz w czystym języku HTML i przetestujemy go za pomocą przeglądarki WWW.

Kompozycja Proceduralna

on przeznaczony do gromadzenia plików tekstowych, plików graficznych i innych. Server przetrzymuje ładowany plik w pamięci do rozmiaru 4096 jako plik

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Laboratorium 6 Tworzenie bloga w Zend Framework

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

INSTALACJA I KONFIGURACJA SERWERA PHP.

Smarty PHP. Leksykon kieszonkowy

Aplikacje WWW - laboratorium

Internetowe bazy danych

Wykład 5_2 Arkusze stylów dziedziczenie. Technologie internetowe Zofia Kruczkiewicz

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Wstęp. Ale po co? Implementacja

Dokumenty SEDU składają się z dwóch części: Opisu sprawy Formularza elektronicznego

PRZETWARZANIE ROZPROSZONE ZADAN` Mariusz Gil 4Developers 2012, Poznań

Tworzenie raportów XML Publisher przy użyciu Data Templates

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Dynamiczne generowanie pliku PDF

PHP. Tematyka wykładów: Język PHP PHP i bazy danych Rozszerzenia PHP

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

Usługi WWW. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska Opole zlipinski@math.uni.opole.pl

Bazy Danych i Usługi Sieciowe

SMS Kod Automatyczny

I.Wojnicki, Tech.Inter.

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Języki programowania wysokiego poziomu. Forum, Blog, Sample DB - wskazówki

Metaprogramowanie w Ruby

SIECI KOMPUTEROWE I BAZY DANYCH

akademia androida Składowanie danych część VI

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

MVC w praktyce tworzymy system artykułów. cz. 2

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

Programowanie wielowarstwowe i komponentowe

Internetowe bazy danych

Framework Angular4. Alicja Frankowicz Weronika Węglińska

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Wykład 03 JavaScript. Michał Drabik

Zajęcia 4 - Wprowadzenie do Javascript

FORMULARZE. G. Przęczek

Podstawy programowania III WYKŁAD 6

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

SSK - Techniki Internetowe

Laboratorium 1 Wprowadzenie do PHP

Agenda. Wstęp Zmiany Co nowego dla web developerów? Nowości we front-end developingu Czego spodziewać się może końcowy użytkownik?

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

Język PHP. Studium Podyplomowe Sieci Komputerowe i Aplikacje Internetowe. v1.7, 2007/11/23

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Aplikacje WWW - laboratorium

Szablon główny (plik guestbook.php) będzie miał postać:

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Katedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Zaawansowane bazy danych i hurtownie danych

IOF INTERNET OFFER FORMAT

Kurs WWW. Paweł Rajba.

Wordpress. Wstęp do tworzenia pluginów. Piotr Wasilewski wasilewski.piotrek (at) gmail.com

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

PHP 5 język obiektowy

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

0.1 Logowanie do serwisu

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Zaawansowane aplikacje internetowe

Podstawy JavaScript ćwiczenia

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Programowanie internetowe

Systemy internetowe HTML

JavaScript funkcyjność

Lab4. ciąg dalszy lab3. 9. Konfiguracja wirualnego formularza (Configure Virtual Forms)

3. Silnik MVC Opis rozdziału Organizacja plików. Mini poradnik: Jak stworzyć grę via WWW.

DOKUMENTACJA TECHNICZNA USŁUGI API ver. 1.27

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

TYPO3 eid : AJAX i nie tylko. Artur Cichosz Quintinity Interactive

TECHNOLOGIE SIECI WEB

Transkrypt:

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&lt ; <strong><a href="{ @url ">{ @title </ a></ strong> &gt ; { / 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.