PDA

Zobacz pełną wersję : Prostota patTemplate



zwiastun
24-12-2005, 23:56
Jeśli kiedykolwiek tworzyłeś duży serwis oparty na PHP, zapewne przekonałeś się, jak niewygodne jest łączenie w skryptach kodu PHP i HTML. Sytuacja komplikuje się, gdy musisz zmodyfikować serwis. Bardzo trudno jest wprowadzać zmiany zarówno w kodzie, jak i układzie graficznym. Zapoznaj się z tłumaczeniem artykułu Havarda Lindseta: Simple PHP Templates With PatTemplate objasniającego w klarowny sposób korzystanie z patTemplate. Artykuł znajdziesz w naszym serwisie:

Prostota szablonu opartego na PatTemplate (http://www.pomoc.joomla.pl/pomoc/index.php/content/view/380/46/)

Tu możesz umieścić swoje opinie, sugestie, rady, propozycje rozwiązań

kuba
19-05-2006, 02:11
Cóż pobierzenie przeczytałem i szablon jak szablon, ale albo nie doczytałem albo brakuje mi smarty'owskiego odpalenia kodu php w szablonie

{php} ... {/php} ... a to może być dużym ograniczeniem, co prawda obsługa pętli czy waunków istnieje, ale nie zawsze się nimi da sterować tak jak by się chciało ;-)

Jedno zasadnicze pytanie dlaczego patTemplate, a nie smarty, który ma o wile większe możliwości, istnieje do niego o wiele więcej dokumentacji noi, o ile się nie mylę, jest rozwijany przez programistów php???

nexus246
19-05-2006, 12:15
Moim skromnym zdaniem znaczniki {php} w Smarty to pomyłka, stosując je podważa się idee wykorzystywania szablonów. Wszystkie zmienne powinno się przygotowywać przed parsowaniem szablonu.

A dlaczego akurat ten system... w necie jest sporo dyskusji (a jakie emocje im towarzyszą ;)) na ten temat i pewnie jest jakiś powód dla ktorego programiści joomlowi wybrali ten system.

kuba
30-05-2007, 09:24
Moim skromnym zdaniem znaczniki {php} w Smarty to pomyłka, stosując je podważa się idee wykorzystywania szablonów. Wszystkie zmienne powinno się przygotowywać przed parsowaniem szablonu.


Odpowiedz mi zatem na pytanie :

Zalozenie :
Masz tablke 4 - kolumny , 4 wiersze - w kazdej komorce jest wyswietlany ten sam element np produkt, odwiedzajacy ma mozliwosc zmiany ilosci wyswietlanych produktow na wiersz + dodatkowo mozliwosc usniecia zdjecia produktu.

Pytanie :
Gdzie lepiej generowac ta tabelke w php i wyswietlic ja poprzez zmienna np {$PRODUCTS_TABLE} czy w szablonie poprzez petle smarty z uzyciem php do zmiany ilosci wierszy , ewentualnie jak ktos chce miec porzadek i usunieciem obrazka rowniez z poziomu smarty poprzez php ?


Szablony zostaly stworzone tylko poto zeby nad kodem mogl pracowac programista a nad samym szablonem powiedzmy designer, nie da sie uniknac przenikania php z html w 100% (inaczej takie rozwiazanie bedzie sztywne i niewygodne), ale jezeli juz ktos kto nie zna sie na php, ma cos zmieniac, to wole zeby skopal petle php w smarty (choc o ile jest to osoba powiedzmy sprytna ale bez znajomosci php - to po kilku malych experymentach domysli sie jak sie steruje petla i co moze z nia zrobic) niz np jakis modul/funkcje - i o to chodzi w szablonach - o prostote modyfikacji dowolnego elementu szablonu, bez grzebania sie w php przez osobe ktora nie ma o nim bladego pojecia.


Zwroc uwage na ide MVC (zakladajac ze Widok to jakis prymitywny szablon) - tutaj rozgraniczenie mialo na celu cos podobnego (przynajmniej jezeli chodzi o relacje V - C ), ale nie wyobrazam sobie generowanie html w Kontrolerze, tylko po to zeby go ladnie wyswietlic w jednej linicje w Widoku.

nexus246
30-05-2007, 11:35
Gdzie lepiej generowac ta tabelke w php i wyswietlic ja poprzez zmienna np {$PRODUCTS_TABLE} czy w szablonie poprzez petle smarty z uzyciem php do zmiany ilosci wierszy , ewentualnie jak ktos chce miec porzadek i usunieciem obrazka rowniez z poziomu smarty poprzez php ?


Odpowiedź:
Z technologii mamy jeszcze javascript (+ajax), usuwanie, dodawanie kolumn można robić po stronie klienta (trudno jest mi sobie wyobrazić opisaną przez Ciebie funkcjonalność ale wydaję mi się że to może być dobre rozwiązanie).



Szablony zostaly stworzone tylko poto zeby nad kodem mogl pracowac programista a nad samym szablonem powiedzmy designer, nie da sie uniknac przenikania php z html w 100% (inaczej takie rozwiazanie bedzie sztywne i niewygodne), ale jezeli juz ktos kto nie zna sie na php, ma cos zmieniac, to wole zeby skopal petle php w smarty (choc o ile jest to osoba powiedzmy sprytna ale bez znajomosci php - to po kilku malych experymentach domysli sie jak sie steruje petla i co moze z nia zrobic) niz np jakis modul/funkcje - i o to chodzi w szablonach - o prostote modyfikacji dowolnego elementu szablonu, bez grzebania sie w php przez osobe ktora nie ma o nim bladego pojecia.


Da się uniknąć, zresztą taki jest cel. Model MVC ma pewne założenia i jeśli od nich odchodzisz to już nie jest MVC. Nie mam na myśli sytuacji gdy ktoś kto się nie zna coś sobie testuje i a nuż się uda. Myślę o projektach przy których pracują ludzie, którzy się znają na swojej robocie. Koder HTML/szablonów nie będzie się bawił z tabelką przez wrzucanie jej do w pętle php. Koder PHP nie będzie generował htmla tylko zaserwuje content w zmiennych. Jest to czasami trudne i może się wydawać że niepotrzebne lae ma też szereg zalet. M.in. można w łatwy sposób zmieniać widoki uniezależniając się od kontrolera (np. do XML), do innego szalonu etc.



Zwroc uwage na ide MVC (zakladajac ze Widok to jakis prymitywny szablon) - tutaj rozgraniczenie mialo na celu cos podobnego (przynajmniej jezeli chodzi o relacje V - C ), ale nie wyobrazam sobie generowanie html w Kontrolerze, tylko po to zeby go ladnie wyswietlic w jednej linicje w Widoku.

No właśnie, nie wiem czy dobrze Cię zrozumiałem ale ja też sobie nie wyobrażam :)

kuba
30-05-2007, 14:07
duzo tekstu ;-)


Czasami nie mozesz uzyc ajaxu ze wzgledu na zalozenia projektu, manipilowanie w drzewie DOM ma jedynie sens w przypadku tak malej tabeli ( inaczej sie zaczyna wlec , a dwa to samo co w zwiazku z ajaxem )


Nie unikniesz wymieszania php z html. Jezeli twierdzisz dalej ze unikniesz pokaz mi jeden przyklad np framework / system szablonow ktory wg Ciebie to potrafi zachowujac "pelna" funcjonalnosc i elastycznosc , i zaraz Ci pokaze ze jednak nie potrafi ;)


Widoki mozesz zmieniac w dolnym czasie i dowolny sposb w wiekszosci implementacji MVC (o ile nie we wszytskich, przynajmniej stosowanych na szeroka skale)


Co do ostatniego chodzilo mi o to ze nie unikniesz w widoku PHP, htmla sie da stosujac jakis system szablonow ... ale tam znow w pewnych przypadkach pojawi sie PHP

nexus246
30-05-2007, 14:31
Od jakiegoś pół roku pracuję/pracowałem nad projektem w .NET Framework i tam się udawało. Wiem, że to inna technologia ale cóż, podstawy te same.

Jeśli chodzi o frameworki PHPowe to korzystałem tylko z Symfony a z szablonów to Smarty, patTemplate . Generalnie gdy pisałem to z założenia nie mieszałem kodu HTML/PHP

Na pewno da się znaleźć przykłady, w których trudno lub nawet bardzo trudno jest coś zrobić ale też nie ma sytuacji że się nie da. Jeśli się nie da to znaczy że wcześniej zostały popełnione jakieś błędy (na etapach analizy wymagań, projektowania etc.)

Myślę, że większe korzyści przynosi trzymanie się założeń, które zostały wymyślone przez mądrzejszych ode mnie. Myślę też, że w niewielkich projektach, które wdrażamy na codzień można od tego odejść ale też warto mieć świadomość co się robi i dlaczego (np. są wymagania czasowe, więc robimy żeby było szybciej).

kuba
30-05-2007, 14:43
Ten algorytm zapewne znasz, sprobuj zaimplementowac bez mieszania php/html lub asp/html (o ile nie ma w asp wbudowanych funkcji do obslugi tego typu drzew)

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Piszac proste aplikacje zawsze sie da zrobic cos tam, ale w duzych projektach jak zapewne wiesz liczy sie rowniez wydajnosc, a unikanie wymieszania php / html za wszelka cene ( zwlaszcza wydajnosci ) to raczej sztuka dla sztuki.

Ja akurat jestem zwiazany z tylko jednym projektem ( aplikacja e-learningowa ), za to duzym, poddawanym duzym obciazeniom ( transfer z serwera produkcyjnego miesiecznie potrafi siegnac 1 TB , byc moze wiecej ciezko stwierdzic - to tak zeby nakreslic moze nie wielkosc, ale obciazenie jakie jest generowane przez uzytkownikow tutaj 1kb transferu jest na wage zlota :P doslownie ;-) Wiec staram sie dbac zwlaszcza o wydajnosc i oszczednosc transferu.

nexus246
30-05-2007, 15:33
No słusznie, zawsze jest coś za coś. Btw, w necie i między innymi na php.pl jest artykuł o rekurencji w smarty.

kuba
30-05-2007, 16:11
Dalej bede upierdliwy :

Algorytm ktory podalem mozna zastsowac np do pobierania struktury menu.

Zakladajac ze menu ma byc zaprojektowane w CSS ( listy nieposortowane ) i wyswietlone w postaci 2 poziomowych zakladek ( zakladka + jej podpoziom dla lisci ) , zakladki maja byc przelanczane na aktywne dla dopowiedniego kontrolera a podelelemnty np pogrubiane dla odpowiedniego widoku , rownoczesnie po najechaniu na niekatywna zakladle, pojawi sie lista lisci , w miejsce lisci aktywnej zakladki (czyli zmiana stylu w zaleznosci od kontrolera / widoku ( akcji kontrolera ) + interakcja z uzytkownikiem ) bez wykorzystania php wewnatrz smarty bylo by ciezko, o ile w ogole mozliwosci smarty by na to pozwolily, przelanczanie zakladek zalatwi sam CSS.

Milego dnia :)

nexus246
30-05-2007, 17:15
Dzięki i wzajemnie :)