Parser szablonów |
Parser szablonów |
21.12.2008, 18:19:21
Post
#1
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 5 Dołączył: 15.07.2008 Skąd: Kłodzko Ostrzeżenie: (10%) |
Napisałem coś takiego:
Szablon: Wydaje mi się że jest to nieoptymalene, i nieprofesjonalnie napisane. Proszę o jakieś sugestje. Co powinienem w tym zmienić?? -------------------- |
|
|
21.12.2008, 18:41:25
Post
#2
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) |
Napisz to w Javie to będzie bardzo profesjonalne A tak na poważnie stworzyłeś prosty kod i nie ma co tu dramatyzować z pisaniem tego "profesjonalnie" - bo "profesjonalne" rozwiązanie polegałoby na stworzeniu systemu szablonów ogólnego przeznaczenia ze znacznie większą ilością możliwości (smarty, opt i inne).
-------------------- |
|
|
21.12.2008, 18:53:39
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Istota działania jest zła. Systemy szablonów które tworzą swój nowy język (jak smarty) to przeszłość. Zrezygnuj z szablonów tego typu, a zastąp to czystym PHP, tylko odpowiednio oddzielonym:
index.php
views.php
szablony/szablon.php Jest to chyba najprostszy przykład, jak to można zrobić, aby pracowało się wygodnie Szablony można zagnieżdżać (jak jest w przykładzie - zagnieżdżone jest generowanie źródła strony z szablonu i wstawianie go w textarea). W ten sposób możesz stworzyć całe drzewko szablonów reprezentujące stronę. Pamiętaj tylko, aby w szablonie zminimalizować ilość kodu PHP i zajmować się TYLKO wyświetlaniem danych podanych przez skrypt! Ten post edytował l0ud 21.12.2008, 18:54:58 -------------------- XMPP: l0ud@chrome.pl
|
|
|
21.12.2008, 19:07:16
Post
#4
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) |
Istota działania jest zła. Systemy szablonów które tworzą swój nowy język (jak smarty) to przeszłość. To dlaczego nikt nie rezygnuje z takiej składni szablonów? IMHO obecność języka skryptowego w szablonach doprowadza do tego że nagle pojawia się w nich jakaś logika, co jest złe. Mając w pamięci "szablony" CodeIgnitera powiem że szablony z PHP to rozwiązanie dalekie od ideału (choć sprawdza się dla najprostszych skryptów). Dobry przykład to szablony Django - http://docs.djangoproject.com/en/dev/topic...opics-templates i klon dla PHP: http://www.beberlei.de/calypso/ - ogólny pomysł i większość składni jest jak najbardziej udana i warto na czymś takim się opierać. -------------------- |
|
|
21.12.2008, 19:18:13
Post
#5
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 5 Dołączył: 15.07.2008 Skąd: Kłodzko Ostrzeżenie: (10%) |
A co z optymalnością mojego skryptu??
-------------------- |
|
|
21.12.2008, 19:28:38
Post
#6
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) |
Duży ruch ci raczej nie grozi, więc i trudno mówić o wydajności danego rozwiązania. Operacje na długich łańcuchach mogą trochę zajmować, ale ogólnie większym "problemem" wydajnościowym będzie pobieranie danych - np. z bazy danych.
-------------------- |
|
|
21.12.2008, 19:33:34
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Wg mnie, o ile logika ogranicza się do wyświetlania, nie ma żadnego problemu. Zawsze można np. do klasy view dopisać metody pomocnicze, np. cycle(), co umożliwi np. takie coś: Po pobieżnej analizie przykładów z dokumentacji szablonów Django nie widzę żadnych istotnych korzyści (prócz minimalnym uproszczeniem zapisu) z dołączania dodatkowego kodu typu Calypso. Ale jak kto woli Ja tam polecam wg. mnie najprostsze rozwiązanie, czyli 'bezpośrednie' stosowanie PHP - bo przecież po to ono jest? -------------------- XMPP: l0ud@chrome.pl
|
|
|
21.12.2008, 19:44:27
Post
#8
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 5 Dołączył: 15.07.2008 Skąd: Kłodzko Ostrzeżenie: (10%) |
Jeszcze jedno:
Załużmy że w szablonie mam: Kod <html> <head> <title>Newsy</title> </head> <body> {zalogowany} <h2>Jesteś zalogowany jako: {login}!</h2> {/zalogowany} {niezalogowany} <h2>Nie jesteś zalogowany!</h2> {/niezalogowany} </body> </html> W przypadku zalogowania, w skrypcie zamieniam niezalogowany na "nic", a zalogowany na zalogowany bez {zalogowany}{/zalogowany}. Jak wywalić te tagi {zalogowany}{/niezalogowany}, tak aby to co jest po między nimi zostąło nienaruszone?? -------------------- |
|
|
21.12.2008, 20:11:46
Post
#9
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) |
Wg mnie, o ile logika ogranicza się do wyświetlania, nie ma żadnego problemu. Zawsze można np. do klasy view dopisać metody pomocnicze, np. cycle(), co umożliwi np. takie coś: Po pobieżnej analizie przykładów z dokumentacji szablonów Django nie widzę żadnych istotnych korzyści (prócz minimalnym uproszczeniem zapisu) z dołączania dodatkowego kodu typu Calypso. Ale jak kto woli Ja tam polecam wg. mnie najprostsze rozwiązanie, czyli 'bezpośrednie' stosowanie PHP - bo przecież po to ono jest? Kod <?php } ?> Ładnie to nie wygląda, front-end designer zapewne coś pokopie w tego typu znacznikach... plus jak tego trochę zagnieździsz to będzie jeszcze gorzej. Przydają się też takie funkcjonalności jak dziedziczenie szablonów, obsługa bloków itd. I nie należy zakładać że programista posłucha się ciebie żeby nie wrzucać do szablonu logiki. Jeżeli może - to to zrobi. Swego czasu używałem CI, teraz używam Django i nie mam najmniejszej ochoty ponownie stosować "szablony" zawierające w sobie język skryptowy plus z brakiem funkcjonalności typowych szablonów. W przypadku zalogowania, w skrypcie zamieniam niezalogowany na "nic", a zalogowany na zalogowany bez {zalogowany}{/zalogowany}. Jak wywalić te tagi {zalogowany}{/niezalogowany}, tak aby to co jest po między nimi zostąło nienaruszone?? Tworzenie statycznych bloków nie jest zbyt elastyczne ({zalogowany}{/zalogowany}, czy {wiadomości}{/wiadomości}), bo to trochę ogranicza elastyczność parsera. W Django wygląda to ogólnie tak: Kod {% if user %} Witaj {{ user }} {% else %} Witaj nieznajomy {% endif %} Gdzie za logikę szablonu odpowiada warunek IF wykonany na zmiennej przekazanej do szablonu z widoku. Ten post edytował Riklaunim 21.12.2008, 20:12:46 -------------------- |
|
|
21.12.2008, 20:26:17
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Też miałem pisać, żeby takiego czegoś za żadne skarby świata w szablon nie pakować I analogicznie: for(): endfor, if(): elseif():, else:, endif;, while():, endwhile(), foreach(), endforeach() @autor: Naprawdę nie ma sensu bawić się w takie "systemy szablonów". Jest to wyjątkowo niewygodne (każdy będzie się musiał uczyć nowego zestawu znaczników), w Twoim przypadku kompletnie nieelastyczne - nie ma możliwości zrobienia tak prostej rzeczy jak chociażby wyświetlenie tekstu "AbcdEFg" jako "abcdefg" (małymi literami). Cytat To dlaczego nikt nie rezygnuje z takiej składni szablonów? Jak to nikt? Pomijam tutaj fakt, że PHP sam w sobie to jeden wielki system szablonów, ale spójrz na Symfony, ZF i inne FW.Cytat IMHO obecność języka skryptowego w szablonach doprowadza do tego że nagle pojawia się w nich jakaś logika, co jest złe. Bzdura. Jak ktoś nie potrafi korzystać z szablonu (nie ma znaczenia czy to Smarty czy czysty PHP) to i tak doporawdzi do jakiegoś Spaghetti Code
|
|
|
21.12.2008, 21:25:38
Post
#11
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 5 Dołączył: 15.07.2008 Skąd: Kłodzko Ostrzeżenie: (10%) |
@Crozin: Fajne rozwiązanie, spróbuję.
Wrućmy do mojego parsera. Zrobiłem w nim dwie pętle i niemoge się już w tym kodzie połapać:)
Szablon: Kod <html> <head> <title>Newsy</title> </head> <body> {kategorie} <h2>{nazwa_kategorii}</h2> {fora} <h3><a href="forum.php?forum={identyfikator_forum}">{nazwa_forum}</a></h3> <p>{opis_forum}</p> {/fora} {/kategorie} </body> </html> Można to jakoś prościej?? -------------------- |
|
|
21.12.2008, 21:37:18
Post
#12
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 6 Dołączył: 26.03.2008 Skąd: Łódź Ostrzeżenie: (0%) |
Jeślibyś używał czystego PHP w szablonach to byłoby dużo prościej...
Pobranie danych i wyświetlenie szablonu.
Szablon. Kod <?php foreach($aData AS $Data): ?> Foo: <?php echo $Data['Bar']; ?> <?php endforeach; ?> Pisane z palca, ale dużo prościej. Nie wiem kto teraz pisze własne systemy template ze sładnią z dupy, która wygląda troche inaczej niż czyste PHP, a działa wolniej. SMARTY = crap. Pozdrawiam. -------------------- NULL;
|
|
|
21.12.2008, 22:28:43
Post
#13
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) |
Można to jakoś prościej?? Prościej to nie znaczy czytelniej i łatwiej w rozbudowie Chcesz robić forum? Użyj frameworka (Kohana, CI, inne) i oddziel zapytania od widoku i od szablonu odpowiedzialnego za wygląd - jeżeli chcesz stworzyć coś funkcjonalnego, co można pokazać Cytat Nie wiem kto teraz pisze własne systemy template ze sładnią z dupy, która wygląda troche inaczej niż czyste PHP, a działa wolniej. SMARTY = crap. to napisz serwis pokroju nasza klasa, grono, czy też fotka bez szablonów, stosując PHP, a później próbuj to rozbudowywać i poprawiać. Szablony i inne rozwiązania, wzorce projektowe nie są stosowane po to by kod był szybszy (bo będzie nieco wolniejszy niż napisany jednym ciurkiem), ale żeby ten kod dało się utrzymać, modyfikować i rozwijać. I taka mała notka - szablony smarty są kompilowane do kodu PHP (kesz) i przy kolejnych wywołaniach szablonu te gotowe postacie są stosowane niewidzialnie dla programisty/użytkownika. -------------------- |
|
|
21.12.2008, 22:38:44
Post
#14
|
|
Grupa: Zarejestrowani Postów: 84 Pomógł: 6 Dołączył: 26.03.2008 Skąd: Łódź Ostrzeżenie: (0%) |
To co wyżej napisałem to był przykład, i chyba nie uważasz, że tak pisze aplikacje?
Tak wyglądaja u mnie template'y i jakoś nie mam problemu z ich przerabianiem. Wyświetlanie i operowanie na danych to już inna bajka i ten kod wyżej to tylko poglądowy. Pozdrawiam. -------------------- NULL;
|
|
|
21.12.2008, 22:43:15
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 387 Pomógł: 273 Dołączył: 18.02.2008 Ostrzeżenie: (0%) |
Riklaunim, nikt nie miał na myśli całkowitego unikania idei szablonów, a dodatkowych parserów, które robią dodatkowy narzut i wprowadzają swoją składnię.
Podałem swój przykład, jak dość prosto zrobić to bez wyrażeń regularnych i kobył typu smarty. Uzupełniając przykład o instrukcję typu endif; zamiast } imho uzyskamy wystarczająco dobrą czytelność szablonu. Ok, piszesz że szablony są kompilowane do czystego kodu PHP. Ale dlaczego nie mogą być nim od początku? -------------------- XMPP: l0ud@chrome.pl
|
|
|
21.12.2008, 23:00:03
Post
#16
|
|
Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) |
Cytat Ok, piszesz że szablony są kompilowane do czystego kodu PHP. Ale dlaczego nie mogą być nim od początku? Bo jak np. pisałem firmowego CRMa to osoba odpowiedzialna za interfejs użytkownika nie była programistą server side, a geekiem jQuery/CSS i prace szły bardzo szybko, a CRM wyszedł kompatybilny na poziomie krystyny z gazowni. Szablony mogą być "od razu" plikami *php, tyle że niekoniecznie musi to być najlepsze rozwiązanie -------------------- |
|
|
21.12.2008, 23:03:59
Post
#17
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 5 Dołączył: 15.07.2008 Skąd: Kłodzko Ostrzeżenie: (10%) |
Zroiłem tak jak mi radziliście. Fajnie to nawet wygląda, szablon tak bardzo się nie zmienie, a zato skrypt zyskał na czytelności i wydajnmości.
Skrypt:
Szablon: Kod <html> <head> <title>Forum</title> </head> <body> <?php foreach($tablica as $rekord): ?> <h2><?php echo $rekord["tytul"]; ?></h2> <?php foreach($tablica2 as $rekord2): ?> <h3><a href="forum.php?forum=<?php echo $rekord["identyfikator"]; ?>"><?php echo $rekord2["tytul"]; ?></a></h3> <p><?php echo $rekord2["opis"]; ?></p> <?php endforeach; ?> <?php endforeach; ?> </body> </html> Mam problem, więcej w drugim zapytaniu (dziesiąta linijka skryptu). Co mam zrobić? Ten post edytował akurczyk 22.12.2008, 10:49:39 -------------------- |
|
|
21.12.2008, 23:06:11
Post
#18
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
Cytat Bo jak np. pisałem firmowego CRMa to osoba odpowiedzialna za interfejs użytkownika nie była programistą server side, a geekiem jQuery/CSS Czy jeżeli założę, ża taka osoba jest w wystarczającym stopniu inteligenta by zrozumieć, że to co jest pomiędzy <?php, a ?> to coś czego ma nie ruaszć? Zresztą wydaje mi się, że chociaż podsatawy podstaw języka PHP za już wcześniej - a jak nie to w dosłownie 5 min kolega z zespołu wytłumaczy bardzo ogólnikowo co to jest.Tylko... skoro dla frontend developera <?php ... ?> to coś z czym nie wie co robić to czemu inaczej by miało być z { ... }? Jeszcze w dodatku będzie musiał uważać przy pisaniu jakiegoś CSS, JS wewnątrz dok. HTML. |
|
|
21.12.2008, 23:18:29
Post
#19
|
|
Grupa: Zarejestrowani Postów: 201 Pomógł: 5 Dołączył: 15.07.2008 Skąd: Kłodzko Ostrzeżenie: (10%) |
POMOCY!!
-------------------- |
|
|
21.12.2008, 23:31:25
Post
#20
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów |
Cytat Mam problem, więcej w drugim zapytaniu (dziesiąta linijka skryptu). Co mam zrobić? A może byłbyś łaskaw podać treść błędu, a nie się drzeć? -------------------- ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 14:44 |