Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> uTemplate, prośba o test systemu szablonów
mingos
post 3.08.2012, 13:45:27
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Witam,

Z góry przepraszam za zakłądanie tematu ocierającego się o autoreklamę, ale chciałbym poznać opinię innych programistów na temat prościutkiego systemu szablonów, który jakiś czas temu popełniłem. Nie chodzi mi tyle o znajdowanie błędów (bo raczej ich tam być nie powinno), ile o wrażenia z samego użytkowania: czy łatwo to ogarnąć (ewentualnie będę wdzięczny za wskazówki, co poprawić/dodać w dokumentacji projektu), czy spełnia Wasze oczekiwania co do systemu szablonów. Będę wdzięczny za wszelkie wskazówki dot. funkcji, których ewentualnie brakuje, czy ogólnie rzeczy, które można poprawić.

Projekt można znaleźć na stronie uTemplate.

Z góry dzięki za odpowiedzi.
Go to the top of the page
+Quote Post
IceManSpy
post 3.08.2012, 15:54:33
Post #2





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Uwagi:
1. A co z tablicami? Nie widzę tutaj obsługi tablic (albo nie ma ich opisanych w dokumentacji).
2. Poza tym patrząc na kod źle użyłeś singletona z getInstance - konstruktor ma być prywatny lub protected inaczej ktoś może zrobić new uTemplate = za każdym razem nowy obiekt.
3. Jeśli deklarujesz stałe to zrób to raz, a nie potem w konstruktorze.
4. 1 plik = 1 klasa
5. Trochę za "prosty" jest ten system. Nic nie oferuje oprócz dodatkowego przypisania do zmiennej.

Ten post edytował IceManSpy 3.08.2012, 16:09:04


--------------------
Go to the top of the page
+Quote Post
mingos
post 3.08.2012, 16:58:54
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Dzięki za uwagi.
1. W jakim sensie? Bo nie za bardzo kumam, co rozumiesz pod pojęciem obsługi tablic.
2. Zaiste, do poprawienia w wersji 1.3 smile.gif
3. Masz na myśli stworzenie tablicy informacji o doctype? Mogę wyrzucić to z konstruktora i zrobić z tego stałą, ale czy to aż taki mankament?
4. Tak miałem na początku, ale zawsze wolę wrzucić sobie w projekt pojedynczy pliczek niż cały katalog. Kwestia gustu, jak ktoś jest purystą, to może sobie tych kilka linijek klasy widoku przerzucić do oddzielnego pliku. Może kiedyś to rozdzielę, ale w tej chwili to jest niecałe 500 linijek kodu (po odrzuceniu komentarzy), więc tragedii nie ma z trzymaniem wszystkiego w jednym pliku (IMO).
5. No ja wiem, że jest prosty. Właśnie dlatego proszę o sugestie, jak go ulepszyć. Nie mam za bardzo doświadczenia z systemami szablonów poza domyślnym w Zend Frameworku i chciałbym, żeby ktoś bardziej doświadczony wskazał mi trochę drogę dalszego rozwoju uTemplate.
Go to the top of the page
+Quote Post
IceManSpy
post 3.08.2012, 17:01:07
Post #4





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


1. Np pobierasz użytkowników z bazy i chcesz ich wyświetlić na liście. Jak to zrobić u Ciebie?
3. Jak stała, to ma być stała smile.gif


--------------------
Go to the top of the page
+Quote Post
mingos
post 3.08.2012, 19:05:13
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Zakładając, że masz listę użytkowników w zmiennej, to ustawiasz zmienną w szablonie:
  1. $template->varAdd("users",$users);

A w samym szablonie jedziesz zwykłym foreachem:
  1. foreach ($users as $user) {
  2. echo "<li>{$user}</li>";
  3. }

Założeniem uTemplate jest korzystać tylko z PHP, bez wprowadzania żadnych sztucznych składni, żadnego metajęzyka, który nie umożliwia korzystania z PHP i wymaga nauczenia się nowej składni. Dzięki temu masz czytelny kod, a przy okazji możesz w samym szablonie użyć sobie funkcji np. ustawiającej znaczniki meta, czy dodającej jakiś javascript w nagłówku strony. Chcesz dopisać coś do titla, to możesz to zrobić bezpośrednio w samym szablonie:
  1. uTemplate::getInstance()->headTitlePrepend("Bla");

Osobiście korzystam z tego na mojej stronie firmowej (gdzieś tam jest link na stronie utemplate), jak i na samej stronie uTemplate - dla takich niewielkich stronek sprawdza się świetnie, ale nie wiem np., czy w większych projektach to ma specjalny sens. Bo np. w Zend Frameworku zwykle ustawiasz takie rzeczy w kontrolerze, a widok wypluwa tylko ten fragment HTMLa, który chcesz wstawić w swoje miejsce w layoucie...

Ten post edytował mingos 3.08.2012, 19:21:07
Go to the top of the page
+Quote Post
rzymek01
post 5.08.2012, 19:57:13
Post #6





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


Cytat(mingos @ 3.08.2012, 20:05:13 ) *
Założeniem uTemplate jest korzystać tylko z PHP, bez wprowadzania żadnych sztucznych składni, żadnego metajęzyka, który nie umożliwia korzystania z PHP i wymaga nauczenia się nowej składni.

głównym powodem powstania systemów szablonów było oddzielenie logiki od prezentacji,
umozliwienie korzystania z php w warstwie prezentacji nie zachęca do utrzymywania takiego podziału...

Cytat
Dzięki temu masz czytelny kod,

spaghetti code nigdy nie będzie czytelnym kodem ;P

Cytat
a przy okazji możesz w samym szablonie użyć sobie funkcji np. ustawiającej znaczniki meta, czy dodającej jakiś javascript w nagłówku strony. Chcesz dopisać coś do titla, to możesz to zrobić bezpośrednio w samym szablonie:

czyli zaburzasz tutaj podstawową ideę systemu szablonu, wczepiasz do warstwy prezentacji logikę



--------------------
:]
Go to the top of the page
+Quote Post
mingos
post 12.08.2012, 19:52:28
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


@rzymek01:
Korzystanie z PHP nie sprawia od razu, że w prezentację wplatasz logikę. Daje taką możliwość, jasne, tu się zgadzam. Ale również zabiera sto innych możliwości, jak chociażby zmiana wielkości liter, formatu liczb, czy użycie gettexta. Jak dla mnie, zmiana "foo" na "FOO" jest czysto prezentacyjna, ale bez PHP musisz sobie z tym radzić w warstwie logiki. Albo inaczej: nie obwiniaj narzędzia za to, że daje możliwość napisania czegoś w sposób, z którego nie korzysta dana aplikacja X (na której opierasz swoje pojęcie "prawidłowej" architektury aplikacji). Jeśli jesteś programistą, a nie byle skrypciarzem, to będziesz wiedział, czego używać, a czego nie używać w widoku.

Spaghetti code? Jeśli fakt korzystania ze znajomej składni PHP do takiego foreacha zamiast jakiegoś metajęzyka od razu przekształca widok w spaghetti, to niech będzie, że masz rację wink.gif. Nie znam Twojego stylu programowania, czy też tego, z jakim masz na co dzień styczność, więc nie chcę rzucać tu słów na wiatr, ale wydaje mi się, że zapędzasz się tu zdecydowanie zbyt daleko, z krytyki przechodzisz w krytykanctwo/narzekanie. Bo co za różnica, czy napiszesz taką, czy inną składnię pętli? Jedynym kryterium jest tu to, z czym czujesz się swobodniej.

Znaczniki meta itd. - ponownie: to tylko możliwość. Nie musisz tego robić, a jeśli w swojej aplikacji oddzielasz logikę od prezentacji, wręcz nie powinieneś. Ale są aplikacje proste, niekorzystające z MVC, gdzie ktoś może chcieć to zrobić, z powodów, w które nie wnikam. Ma możliwość - czy skorzysta, to jego sprawa. Dla mnie to nie jest zachęcanie do programowania aplikacji "złych", "nieprawidłowych", czy "niezgodnych ze standardami", a po prostu elastyczność. Smarty nie daje takiej opcji, uTemplate daje. Tak, jak z samochodem - jeden ma tempomat, a drugi nie ma. A czy go używasz, czy nie, to już Twoja sprawa i Twój wybór smile.gif.

Ten post edytował mingos 12.08.2012, 19:53:21
Go to the top of the page
+Quote Post
rzymek01
post 13.08.2012, 20:09:22
Post #8





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


Jakby było tak jak piszesz, twórcy Symfony2 nie trudziliby się nad Twigiem tylko zostawili pure php ;-)

Cytat(mingos @ 12.08.2012, 20:52:28 ) *
Ale również zabiera sto innych możliwości, jak chociażby zmiana wielkości liter, formatu liczb, czy użycie gettexta.

możesz napisać dekorator, którego w czytelny i jednolity sposób dla całej aplikacji wywołasz z poziomu szablonu
poza tym, po co od razu php, w css jest text-transform: uppercase; ;-)

Cytat
Spaghetti code?

kto co woli, dla mnie pomieszanie czystego php z kodem html zawsze będzie spaghetti, niezbyt dobrze go się czyta, ale to najmniejsza wada.

Umożliwienie korzystania z php to naprawdę zły pomysł, dla tego przykładu z pętlą,
po pewnym czasie zamiast jednej konstrukcji pętli w szablonach będzie miał ich 120.
Zmienisz coś w systemie szablonu, to zamiast poprawić w jednm miejscu wywołanie pętli, będziesz musiał przeszukać cały kod i poprawić ręcznie (mnogość konstrukcji)

Nie wiem, w którym miejscu mojego postu widzisz "krytykanctwo" wink.gif
Pokaż może trochę kodu, w którym wykorzystujesz swój system szablonów,
założę sie, że z możliwością korzystania z php nie trzymasz się ściśle oddzielenia logiki od prezentacji.


--------------------
:]
Go to the top of the page
+Quote Post
mingos
post 14.08.2012, 20:12:09
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Dekorator? Brzytwa Ockhama się kłania: gettext już jest, po kiego grzyba pisać do niego jakiś dekorator? W efekcie masz takie coś: piszesz sobie jakimś metajęzykiem: {gettext Foo}. Do tego musi być parser, który wczyta plik szablonu jako goły tekst, pojedzie po nim jakimś preg_replace, czy jeszcze cięższą magią, żeby ostatecznie i tak dokopać się do wywołania w PHP funkcji gettexta. Ja w tym sensu nie widzę - to tylko niepotrzebne spowalnianie całości, a założę się, że duże projekty by to odczuły. Idąc do osiedlowego sklepiku po browara też "zahaczasz" o drugi koniec miasta?

"Krytykanctwem" dla mnie jest pisanie od razu, że użycie PHP to spaghetti code. Kwestia preferencji. Widzę, że Ty wolisz jakieś tajemne metajęzyki i klamerki, których wiele edytorów nie sparsuje i nie zaoferuje np. podpowiadania składni. Twój wybór, podyktowany pewnie konkretnymi doświadczeniami - nie wnikam, nie neguję. Ja za to jestem przyzwyczajony do Zend Frameworka, gdzie standardowy system szablonów to pliki .phtml, czyli z założenia mieszanka PHP i HTML, a pracując obecnie nad jednym cudzym projektem z jakimś customowym systemem zbliżonym do pierwszego Smarty, od paru miechów przez osiem godzin dziennie rzucam tylko mięchem i marzę o zaczęciu następnego projektu, tym razem opartego na Zendzie lub Drupalu. Dwa odmienne punkty widzenia mamy - i nie dam sobie wmówić, że mój jest "gorszy", bo dla mnie nie jest smile.gif.

Z mnogością konstrukcji chyba nie kumam Twojej uwagi. Jeśli ja coś zmienię w systemie, np. "ulepszę" składnię jego własnych pętli, to musisz potem ręcznie lecieć po wszystkich widokach i poprawiać. Składnia PHP raczej zmianie nie ulegnie za szybko, foreach na długo pozostanie foreachem. Zakładam, że miałeś coś głębszego na myśli - możesz to trochę rozwinąć?

Własnego kodu z wykorzystaniem uTemplate mam mało - dwie stronki zaledwie. Ich źródeł akurat nie udostępnię, nie mam w zwyczaju udostępniania źródeł konkretnych stron internetowych, ale akurat w tych przypadkach masz rację: moje oddzielenie logiki od prezentacji jest umowne. W poszczególnych widokach ustawiam aktualnie potrzebne "bonusy" do sekcji <head>, głównie tytuł strony, czasem dodatkowy JS, wykorzystywany wyłącznie w danym widoku. W przypadku obu stronek nie było sensu oddzielać wszystkiego "dla zasady", bo to są mikroskopijne stronki (moja firmowa i uTemplate). Nie korzystam tam z UMVC, bo to armata na muchę. Strony nie będą rozbudowywane, a w razie, gdybym chciałtam dodawać dynamiczne treści, przepisałbym je od nowa, korzystając z jakiegoś frameworka (pewnie uMVC, bo własne strony wypada stawiać na własnym oprogramowaniu - jak mój blog na przykład) zamiast "gołego" PHP z samym tylko uTemplate smile.gif.

Ten post edytował mingos 14.08.2012, 20:12:34
Go to the top of the page
+Quote Post
rzymek01
post 14.08.2012, 21:33:29
Post #10





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


Cytat(mingos @ 14.08.2012, 21:12:09 ) *
Dekorator? Brzytwa Ockhama się kłania: gettext już jest, po kiego grzyba pisać do niego jakiś dekorator?

pisałeś również o zamianie wielkości znaków czy formatach liczb.
Nawet do gettexta warto napisać nakladkę, po pierwsze oprócz samego gettext być może chcesz wczytać jakąś konfigurację, a po drugie wyraźnie mówisz: pozwalam korzystać z gettext w widoku, i masz pewność, że przykładowo nikt w widoku nie będzie łączyć się z bazą danych wink.gif

Cytat
"Krytykanctwem" dla mnie jest pisanie od razu, że użycie PHP to spaghetti code.

Znam z doświadczenia kilka projektów, w których w widokach stosowane jest php,
nie krytykuję takiego pisania, ale już wspomniałem wyżej, że dla mnie jest to niezbyt czytelne i wprowadza niebezpieczeństwo korzystania w widokach z rzeczy, których nie powinno tam być.

Tutaj kwestia skali. Ty piszesz o projektach typu mała strona WWW. OK. Pewnie piszesz to sam.
W takim układzie to Twoje podwórko, rób co tylko chcesz wink.gif Ale jak nad projektem pracuje kilka(naście) osób, albo w jego trakcie przewinęło się jeszcze więcej ludzi, którzy już nad nim nie pracują, łatwo o różne kwiatki tongue.gif

Odnosnie wydajności to nie masz racji, bo szablony w systemach jakie znam są kompilowane i cachowane.

Cytat
Kwestia preferencji. Widzę, że Ty wolisz jakieś tajemne metajęzyki i klamerki, których wiele edytorów nie sparsuje i nie zaoferuje np. podpowiadania składni.

Zobacz sobie np. na PHPTAL. Czysty xml/xhtml. Żadnych klamerek, szablon możesz sobie normlanie odpalić w przeglądarce.
A jakiego podpowiadania składni oczekiwałbyś od edytorów? Tych max kilkanaście komend wyświetlania zmiennych/obiektów czy pętli?
Czy może zmiennych, które dodałeś do szablonu. Ale to ostatnie jest trudne do wykonania z racji pewnego rozproszenia w systemach szablonów.
Nawet w Twoim podstawowym systemie szablonów nie będzie podpowiadania składni dla zmiennych przesłanych poprzez varAdd.

Cytat
a pracując obecnie nad jednym cudzym projektem z jakimś customowym systemem zbliżonym do pierwszego Smarty, od paru miechów przez osiem godzin dziennie rzucam tylko mięchem ...

Widzisz, osobiście nie jestem nastawiony anty dla takich enginów jak Twój, bo rzeczywistość jest taka, a nie inna i czasem nie ma czasu, nie ma innej możliwości, ale Ty sam się przyznałeś, że jesteś negatywnie nastawiony do enginów z metajęzykami, bo pracujesz na jakimś prehistorycznym systemie smile.gif

Cytat
Z mnogością konstrukcji chyba nie kumam Twojej uwagi ...

O tej porze już nie myślę, także nie powiem nic mądrego, ale weźmy na przykład iterację po zwykłej tablicy,
możesz mieć:
  1. 1. foreach ($a as $b)
  2. 2. foreach ($a as $b => $c)
  3. 3. foreach ($a as $b => &$c)
  4. 4. for ($i =0; $i < $count($a); ++$i)
  5. 5. $count = count($a);
  6. for ($i =0; $i < $count; $i++)
  7. 6. jakiś while, do while itd.

co może powodować problemy z konserwacją kodu i zwiekszeniem ilości WTF/min.
Kod się więcej czasu czyta niż piszę.

Cytat
ale akurat w tych przypadkach masz rację: moje oddzielenie logiki od prezentacji jest umowne. [...] W przypadku obu stronek nie było sensu oddzielać wszystkiego "dla zasady", bo to są mikroskopijne stronki (moja firmowa i uTemplate).

OK, mówisz o projektach pisanych w jeden dzień (?), do których się nie wraca (albo rzadko), skąd też szybciej wykonać taki projekt na małych enginach. Jak już pisałem, nie jestem przeciwnikiem takich enginów dla zasady, przy mniejszych projektach można sobie używać, bo czemu nie.
Jednak w miarę rozrostu aplikacji pewnie zaczniesz odczuwać ogólnie mówiąc brak elastyczności enginu.

Nie mam zwyczaju pisać taich długich postów, ale sądzę, że niejako powiedziałem wszystko, co miałem do powiedzenia na ten temat.
Pozdrawiam

PS. nie podoba mi się nazewnictwo funkcji, zwyczajowo najpierw powinien być czasownik (czynność), np.
addVar a nie varAdd, to tak żeby nie było, że się nie czepiam tongue.gif


--------------------
:]
Go to the top of the page
+Quote Post
pamil
post 15.08.2012, 08:43:52
Post #11





Grupa: Zarejestrowani
Postów: 97
Pomógł: 15
Dołączył: 12.08.2012
Skąd: Zabrze

Ostrzeżenie: (10%)
X----


Dla mnie jednak bardziej czytelne jest:
  1. {% for user in users if user.active%}
  2. * {{ user.name|capitalize }}
  3. {% else %}
  4. * Brak aktywnych użytkowników! *
  5. {% endfor %}


Jak w czystym PHP byś to zrobił? Mamy tablicę tablic/tablicę obiektów users, chcemy wyświetlić tylko tych, których wartość klucza/własności active === true. Pierwsza litera ich nazwy ma być duża, żeby "grzegorz" zmieniło się w "Grzegorz". Jeśli pętla nie wykona żadnej iteracji - wyświetl tekst o braku użytkowników.

Do tego nie martwię się czy w users jest tablica obiektów czy tablic. Dostęp do nich jest taki sam. Jeśli np user.active jest instancją klasy User, gdzie własność active jest nieosiągalna, system szablonów próbuje ją pobrać metodą getActive(). Elastyczne, nieprawdaż? Do tego wszystko jest cachowane, więc nie interpretujesz za każdym razem tego metajęzyka, ale raz.

Cytat
Idąc do osiedlowego sklepiku po browara też "zahaczasz" o drugi koniec miasta?

Nie, w osiedlowym jest tylko jedno piwo, ja idę na drugi koniec miasta po dwie skrzynki i nie muszę więcej wychodzić z domu przez jakiś czas wink.gif
Go to the top of the page
+Quote Post
rzymek01
post 15.08.2012, 17:33:34
Post #12





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


o, wreszcie ktoś mysli podobnie do mnie, a już myślałem, że zostalem sam na placu boju :-)


--------------------
:]
Go to the top of the page
+Quote Post
mingos
post 16.08.2012, 13:25:25
Post #13





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 26.09.2009

Ostrzeżenie: (0%)
-----


Dobra, chciałem tu odpisać jakąś tyradę, ale chyba za bardzo zbaczamy z tematu. Wyższość jednego sposobu pisania szablonów wolałbym zostawić na jakiś inny moment, zwłaszcza, że nie chcę, żeby z tego wyrósł kolejny głupawy flame wink.gif.

uTemplate, jak juz pisałem, ma jedno podstawowe założenie: być prostym systemem szablonów, korzystającym z PHP. To się nie zmieni i nie ma sensu dyskutować. Przyjmuję Wasze stanowisko: nie pasuje Wam ten fakt, wolicie systemy z inną filozofią. To była jedna z rzeczy, o które pytałem i za tę odpowiedź Wam dziękuję.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 20:36