| --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 |
|
|
|
-Woody- [PHP]_autoload i klasa szablonu 9.12.2011, 14:41:09
by_ikar Nie działa ci dlatego że te klasy które generuje t... 9.12.2011, 15:08:23
watas Wielkie dzieki funkcja zadzialala wysmienicie. Tro... 12.12.2011, 11:19:47
by_ikar Bez jakiegoś kodu, to raczej nikt ci tutaj nie wyc... 12.12.2011, 12:35:24
watas oczywiscie kod bardzo wazna rzecz :-)
parser sie... 12.12.2011, 13:05:38
by_ikar Nie bardzo rozumiem o co chodzi z podmianą na funk... 12.12.2011, 13:47:03
watas jesli pisales system szablonow to napewno zamienia... 12.12.2011, 14:18:44
by_ikar Mniej więcej rozumiem o co ci chodzi, ale trochę m... 12.12.2011, 15:10:39
watas hmm wydawalo mi sie to dos logiczne takie rozdziel... 12.12.2011, 15:33:01
by_ikar Pokaż mi jeszcze zawartość tej funkcji menu, cieka... 12.12.2011, 15:43:58
watas dokladnie w funcji nemu jest echo wyswietla mi lin... 13.12.2011, 07:33:31
by_ikar Więc tak jak myślałem to echo ci wyświetla twoje ... 13.12.2011, 09:03:01
watas hmm postaram sie jakos to zwalczyc i chetnie zobac... 13.12.2011, 09:47:53
watas UUU sporo tu tego :-) zanim to przetrawie to troch... 13.12.2011, 11:52:49
by_ikar No nie jest jeszcze tego aż tak sporo, bo do tego ... 13.12.2011, 11:59:50
watas Mysle, ze na chwile obecna wystarczy zeby upora... 13.12.2011, 15:23:33 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 17:33 |