![]() |
![]() |
--Woody-- |
![]()
Post
#1
|
Goście ![]() |
Witam,
Szukałem na forum, ale jakoś nie umiem wykorzystać tego co znalazłem. Więc do rzeczy. Mam sobie klase szablonu template.php - standard. Wywołuje ja w indeksie łącząc z plikiem szablonu html i css. Wszystko ładnie działa, jednak w katalogu class koło klasy template mam jeszcze kilka klass, które wykorzystuje dołączając je żmudnie ręcznie. Chciałem sobie to zautomatyzować próbując wykorzystać __autoload i dopisując go do klasy template. Jednak za nic nie chce ze mną to współpracować. Oczywiście manual na temat __autoload przeczytałem i nic mi to nie dało, przykład z manuala działa ale już próba połączenia z moim template niestety nie. Może mi ktoś pomóc i łopatologicznie wytłumaczyć jak to ogarnąć lub podsunąć jakiś przykład, naprowadzić na dobrą drogę - cokolwiek. Pozdrawiam Woody |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie mam powodu dlaczego miałbym nie pokazać swojego kodu na forum - nie wstydzę się go (IMG:style_emoticons/default/tongue.gif) nie mniej, sama klasa templatek to nie wszystko, bo to jest tylko w sumie parser i domyślnie nie pobiera z jakiegoś cache przetworzonego szablonu. Podzielić na dwie klasy musiałem, żeby pierwsza klasa działała w sumie bez niczego, ponieważ wykorzystuje ją jeszcze do rendrowania szablonów stron błędów, a tak jako tako błędów być nie może, spowodowanych np przez system cache. Ale posiada ona swoje podstawowe funkcjonalności a wygląda ona tak: https://gist.github.com/1471387 jedyne co byś musiał w niej zmienić, to 35 linijkę:
zamiast tej tablicy ścieżek, bo można podać ich kilka, ze względu takiego że u siebie wykorzystuje coś w rodzaju aplikacji, gdzie jest domyślna aplikacja "common", która też służy jako aplikacja do współdzielenia (szablonów/tłumaczeń/modułów/komponentów/modeli) między innymi aplikacjami. Wymyśliłem sobie coś takiego, ponieważ w kilku miejscach zdarzało mi się wykorzystywać mojego fw, do kilku różnych aplikacji, więc żeby utrzymać jakoś w miarę rozsądnie ten kod, zrobiłem podział na aplikacje - raczej nic odkrywczego. Więc tą linijkę 35, możesz zmienić na taką linijkę:
Pamiętając o umieszczeniu slasha na końcu podanej ściezki. Możesz podać tablicę ścieżek. Z racji tego że jest to tylko parser, nie ma takich bajerów jak includowanie innych templatek, czy includowanie całego komponentu (coś w rodzaju akcji w module, może to być np jakiś system komentarzy etc). Jak tego używać? Już pokazuje:
Tak wygląda kod php, a tak wygląda szablon:
Przetworzony szablon wygląda tak:
Pojedyncza małpa (@) w klamrach oznacza echo, ale można też normalnie używać echo i w sumie jakiejkolwiek składni php chcemy. Jedynie pamiętając, że jak będziemy w klamrze chcieli wykorzystać małpę, to musimy "escapować" małpę, małpą. Czyli postawić dwie mały, a wyjdzie nam jedna. Korzystanie z bloków kodu (pętle, warunki) jest takie samo jak w php, z tym że lepiej korzystać z alternatywnego zapisu tych bloków:
O alternatywnym zapisie można poczytać w dokumentacji php, a na szybko wygląda to tak:
Klamry prawdę mówiąc nie są niczym innym jak tagami php: <?php ({) oraz ?> (}). Ale żeby przypadkiem nam tych klamer nie podmieniło w miejscu w którym nie chcemy, a może to być css, javascript, lub nawet sam html. Wówczas taki kawałek kodu który zawiera klamry, łapiemy blokiem ignore:
Odnośnie samej klasy szablonu - nie jest to szczyt, pewnie są lepsze, pewnie kale w oczy wredny eval, no ale inaczej nie wiedziałem jak to rozwiązać. Eval jest używany tylko wtedy kiedy nie można sobie za bardzo pozwolić na uruchomienie cache i skorzystanie z cache. W przypadku kiedy cache działa - czyli kiedy aplikacja działa prawidłowo, można napisać właściwą klasę szablonu, która nadpiszę metodę rendrer klasy TemplateParser, dodają dodatkowe funkcje (includowanie innych szablonów, lub includowanie komponentów), a wyglądać to może tak: https://gist.github.com/1471520 w ten sposób zyskujemy możliwość includowania komponentów i szablonów, oraz nasze szablony są już przetrzymywane w cache, dzięki czemu nie korzystamy z evala, a nasze szablony działają dużo szybciej, ponieważ cache szablonów, to zwykły kod php, czyli największym narzutem będzie includowanie tego szablonu. Użycie dodatkowych opcji: komponentem może być nasz cały skomplikowany top strony, możemy przekazać do niego jakieś parametry etc. W stopce możemy mieć tylko zwykły kod html, więc wystarczy że zaincludujemy szablon. Niektóre rozwiązania podpatrzone w symfony (metoda evaluate, z nieszczęsnym evalem ;p). Jak się komuś podoba - korzystać, nie zapominając napisać do tego klasy która będzie dziedziczyła klasę parsera i nadpisywała metodę render, która nie tylko nie potrzebnie przetworzy nam szablon w evalu, ale również w przypadku kiedy stosujemy cache, to metoda ta, sama sprawdzi czy szablon który chcemy przetworzyć, czy istnieje. W przypadku kiedy mamy w miarę przyzwoity system cache, w którym możemy podać sobie "zależność" od innego pliku, wówczas ta dodatkowa funkcjonalność parsera będzie zbędnym narzutem wydajnościowym (nie wielkim, ale grosz do grosza i będzie kokosza). Stosować możecie klasę gdzie chcecie, zmieniając ją jak chcecie, jedynie zostawiając info o autorze. Ewentualnie jak ktoś będzie chciał może zarzucić jakąś krytyką. @watas odnośnie jakichś materiałów do czytania, w sumie obiektówki nie uczyłem się jakoś specjalnie z książek, znaczy podstawy tam przeczytałem, ale nie wiele tam na temat obiektywności tak na prawdę było. Resztę doczytałem z internetu, jak w sumie sporo osób. Czytaj blogi na planeta.php.pl analizuj popularne frameworki (symfony, zend, kohana, yii itp). W sumie najwięcej się nauczyłem z analizy frameworków. EDIT: zapomniałem o jednej jeszcze rzeczy, w smarty podobał mi się sposób zapisywania tablicy wielowymiarowej:
I w tej mojej klasie, również można tak zapisywać tablice, ale można również je zapisywać w klasyczny sposób:
Praktycznie żadnych ograniczeń, prócz właściwie 2: - kod php umieszczamy w klamrach, lub w tagach php (nie wiem czy to ograniczenie, ten kod tak czy siak musimy umieścić w tagach, więc umieszczanie w klamrach chyba nie jest ograniczeniem) - wewnątrz klamry lub kodu php, nie możemy umieszczać klamr przykładowo bloków warunkowych, lub pętli. Stąd alternatywny zapis tych instrukcji. Ten post edytował by_ikar 13.12.2011, 11:36:52 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 16:26 |