![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 132 Pomógł: 0 Dołączył: 24.09.2003 Skąd: Giżycko / Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Próbuję napisać własny system szablonów. Właściwie to go napisałem, ale niestety chodzi on zdecydowanie za wolno, więc próbuję go napisać od nowa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Mam pytanie odnośnie parsowania szablonu. Załóżmy że mamy taki plik test.tpl Kod <!-- BEGIN nazwa_sekcji -->
Stała: {JAKAS_STALA}<br> Sekcja językowa: {L_User}<br> Przesłane ze skryptu: {V_TEST_VALUE}<br> <!-- END nazwa_sekcji --> I teraz w kodzie php: [php:1:c76ea6911f]<? $Tpl = new Tpl(); // ustawiamy aktualny szalbon na test.tpl $Tpl -> set ("test"); // dodajemy do szablonu jakas wartosc $Tpl -> add ("TEST_VALUE", "wartosc"); // ustalamy stałą define ('JAKAS_STALA', "wartosc_stalej"); // i jeszcze wartosc z jakiejs tablicy $lang = array(); $lang['User'] = "Użytkownik"; // pokazujemy zparsowany szablon print $Tpl -> get ("nazwa_sekcji"); ?>[/php:1:c76ea6911f] I tutaj moje pytanie: jak napisać metodę klasy Tpl, żeby sprawdzała 3 różne typy zmiennych: stałe, przesłane ze skryptu oraz indeksy tablicy... Czyli żeby zamieniała: {L_Index} na $lang['Index'] {CONST} na constant("CONST") {V_ZMIENNA} na $this->data["ZMIENNA"] (czyli przeslana ze skryptu) Ten kod działa, ale bardzo wolno się wykonuje... Może jakieś sugestie? [php:1:c76ea6911f]<? /* pominalem tutaj definicje klasy itd., to jest metoda parse() */ function parse($section, $txt) { // wylapujemy sekcje z pliku // $pattern = "#<!-- BEGIN ".$section." -->(.*?)<!-- END ".$section." -->#s"; preg_match_all ($pattern, $txt, $_arr); $txt = $_arr[1][0]; // teraz wylapujemy wszystko w nawiasach klamrowych {jakis_tekst} // preg_match_all ("/{(.*?)}/si", $txt, $words); $patterns = array (); $replacements = array (); foreach ($words[1] as $key => $value) { $word = $words[1][$key]; $start = substr ($word, 0, 2); $patterns [] = "{$word}"; if ($start == "L_") { $word = $lang [substr ($word, 2)]; } elseif ($start == "C_") { $word = $c_lang [substr ($word, 2)]; } elseif ($start == "V_") { $word = $this -> V_[substr ($word, 2)]; } else { if (defined ($word)) $word = constant ($word); else $word = ""; } $replacements [] = $word; } $i = count ($patterns); while ($i--) $txt = ereg_replace ($patterns[$i], $replacements[$i], $txt); return $txt; } ?>[/php:1:c76ea6911f] Naprawde sie troche z tym mecze i bede wdzieczny za wszelkie podpowiedzi... Jak to da sie zrobic prościej? pozdrawiam Denver |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 23:05 |