Co chciałem osiągnąć:
-całkowicie oddzielić PHP od (X)HTML.
-by uzupełniane były fragmenty pomiędzy {}
Nick: {MY_NICK}
-by sekcje kodu mogły się powtarzać na podstawie elementów tablicy ( również zagnieżdżone )
<!--BEGIN REPEAT_SECTION--> {REPEAT_ELEMENT} <!--END REPEAT_SECTION-->
-by w zależnosci od parametru można było włączać/wyłączać pewne sekcje (np. w zależności od tego czy zalogowany jest admin)
<!--ON BLOCK--> Jakiś fragment strony. <!--OFF BLOCK-->
Dlaczego nie użyłem 'gotowych' rozwiązań:
-nie chciałem mieć w plikach stylów żadnych dodatkowych form sterujących (nie licząc 2 wymienionych) jak to np. jest w smartach i większości podobnych klas
-chciałem żeby kod mógł być zaimplementowany na serverach w których nie mam dostępu do plików konfiguracyjnych
Założenia:
-klasa wykorzystywana przez jedną osobę, nie stosowana w wielkich projektach, w których uczestniczą zespoły.
-łatwa w obsłudze
-w miarę szybka
-do obsługi raczej małych stron
Klasa:
<?php class temp{ private $t_name; private $temp_name; private $temp_array; //$t_name - nazwa pliku ze stylem lub gotowy styl (string) //$t_array - tablica z danymi //$t_type - 0=plik 1=string public function __construct($t_name,$t_array,$t_type){ if($t_type == 0){ $this->t_name = $t_name; $this->temp_name = $this->GetFile(); } else { $this->temp_name = $t_name; } $this->temp_array = $t_array; } //pobieranie pliku (domyœlnie zakładam 'templates/*.tpl' public function GetFile(){ if(!$fr){ $content = "Nie wczytano pliku"; } else { } return $content; } private function repl($str){ return $output; } private function repl_ar($str){ $output = preg_replace_callback('/<!--BEGIN ([A-Z_]*)-->([dDs]*)<!--END [A-Z_]*-->/',array($this,'check_key_array'),$str); return $output; } private function repl_on_off($str){ $output = preg_replace_callback('/<!--ON ([A-Z_]*)-->([dDs]*)<!--OFF [A-Z_]*-->/',array($this,'check_key_on_off'),$str); return $output; } private function check_key_on_off($param){ //TRUE - włšcza //FALSE lub brak - Wyłšcza else $send = ''; return $send; } private function check_key($param){ else $send = ''; return $send; } private function check_key_array($param){ foreach($this->temp_array[$param[1]] as $lp=>$v_arr){ $repe = new temp($param[2],$v_arr,1); $send = $send.$repe->ret(); } return $send; } } private function change(){ $first = $this->temp_name; $first = $this->repl_on_off($first); } $first = $this->repl_ar($first); } $first = $this->repl($first); } return $first; } //zwracanie zamienionego stylu public function ret(){ $out = $this->change(); return $out; } } ?>
Kod wykonujący:
<?php include("class/mytpl.php"); 'OPT' => 'test_1' ); 'OPT' => 'test_2' ); 'OPT' => 'Test_01' ); 'OPT' => 'Test_02' ); 'OPT' => 'Test_03' ); 'CL' => 'Pierwszy', 'OPTION' => $z_repeat_tpl ); 'CL' => 'Drugi', 'OPTION' => $y_repeat_tpl ); $ar['SECTION'] = 'Sekcja'; $ar['START_REPEAT'] = $x_repeat_tpl; $ar['ALLOW'] = TRUE; //FALSE wylacza //Utworzenie klasy $test = new temp('test_template',$ar,0); //wyświetlenie wygenerowanego kodu ?>
Plik 'test_template.tpl'
<?php Poczatek<br><br> <!--ON ALLOW--> {SECTION} on/off<br><br> <!--OFF ALLOW--> <!--BEGIN START_REPEAT--> Nazwa testu: {CL}<br> <!--BEGIN OPTION--> -{OPT}<br> <br> Koniec ?>
Tekst wyświetlany:
Poczatek Sekcja on/off Nazwa testu: Pierwszy -Test_01 -Test_02 -Test_03 Nazwa testu: Drugi -Test_1 -Test_2 Koniec
Cierpliwym, którzy przeczytali całość i są gotowi ocenić moją pracę i pomóc w poprawieniu ewentualnych niedociągnięć lub udoskonalić tę klasę,
bardzo dziękuję.