Høy!
Ostatnio pomyślałem - przydałoby się zacząć jakiś side-project. Wybór padł na framework w PHP. Rozumiem wszystkie komentarze, że pewnie będzie miał pełno luk etc. Niech sobie ma - znajdę to poprawię. To w końcu side-project. ;) Całe 'okablowanie' będzie schowane i nie będzie widać efektów dopóki czegoś nie 'zacznę kończyć', więc nudne rzeczy zostawiłem na koniec. Postanowiłem, że zacznę od systemu szablonów (jak ja lubię te 'ochy' i 'achy' ;) ).
Dlaczego w ogóle chcę robić system szablonów? Przecież czyste PHP będzie na pewno szybsze! Nie da się zrobić w PHP czegoś szybszego niż PHP!
Ahh... Szkoda, że nie ma możliwości tworzenia 'prekompilowanych'(do postaci binarnej) skryptów(klas) używając samego(!) PHP (chyba, że o czymś nie wiem). W każdym razie... Czy uważam, że uda mi się stworzyć lepszy system szablonów niż obecnie istniejące?(nom) Czy uważam, że skończę projekt?(no jak nie jak tak?!) Czy w moim mniemaniu będzie on działał szybciej od szablonów w PHP(så!). No dobrze, ale do rzeczy.
Szablon w php. Jak by to miało wyglądać. Wywołuje sobie jakieś eval, czy coś? Nie no bez żartów. To mój plik będzie parsowany ze 3 razy. Tworząc dobry parser mogę wszystko załatwić przelatując cały plik tylko raz (binarnie). Po pierwsze. Muszę zrezygnować z operacji na zmiennych. No błagam... System szablonów jest od tego, żeby oddzielić warstwę aplikacji od prezentacji. Umożliwić obliczenia w szablonach to tak jak powiedzieć: 'Nie powinniście tu wykonywać obliczeń.( ;) ) No wiem, że się da, ale bardzo was proszę - nie róbcie tego. Dobrze dzieci?'. Co nie znaczy, że nie można wyświetlić wyniku danego działania. Funkcje? A na co mi to badziewie. Jak coś wyświetlam to chcę, widzieć na bieżąco co to jest zamiast latać po plikach i szukać funkcji. A jak chcę wyświetlić szablon wtyczki w szablonie głównym?! Załatwimy to inaczej! W funkcji możesz robić Bóg wie co i PHP nie koniecznie może to kontrolować, a ten framework bardzo chce wiedzieć co się dzieje w szablonach. Także funkcje do lamusa! Cała chyba zostaje, ale jeśli coś będzie rzucać mroczny cień na hasło: 'Oddziel aplikację od prezentacji' to dostanie kosmiczny wpier...(ort) w pierdnięciu wytworzony podmuch, który skutecznie usunie to z projektu ;)
Składnia. Pomysłem jest, aby rozszerzała HTML. Ale... Jak to głupio będzie wyglądać połowa parsowana po strone serwera, połowa w przeglądarce. Nie pozostaje mi nic innego jak otworzyć Notepad++ Syntax Editor i dodać bardzo fajne kolorki dla części parsowanych po stronie serwera. W inny sposób nie chce ich wyróżniać. I tak na przykład pętla for:
<for start=1 end=10 step=1>
<!-- KOD HTML -->
</for>
if i for:
<for start=1 end=10 step=1 var='i'>
<if cond='$Zmienna[$i - 1] === false '> <!-- tudzież is even -->
<!-- KOD HTML -->
</if>
</for>
Do tego takie zabawki jak foreach, switch. Elemif (wstawia element jeśli spełniony jest warunek), attribif( ustawia atrybut na następnym elemencie jeśli spełniony jest warunek - jednoelementowy jak img), elemswitch etc.
Ciekaw jestem co o tym myślicie. Czy pomysł się podoba. Chcę też poczytać wasze krytyczne komentarze mówiące, że szablon nie może być szybszy niż PHP (jak skończę to przetestuję ;) ). Najwięcej wątpliwości wiążę ze składnią. Jest co prawda innowacyjna (przynajmniej ja nie widziałem podobnej), ale nie koniecznie intuicyjna. Może i w tym aspekcie mi coś poradzicie. Co jeszcze według was podobny system powinien zawierać. Parsowanie przewiduję liniowe - bez powrotów stąd attribif wpływa na kolejny element, ale może lepiej będzie jeśli będzie wpływał na poprzedni. W końcu:
<div>
<attribif />
<!-- KOD HTML -->
</div>
może się niektórym wydawać bardziej intuicyjne niż:
<attribif />
<div>
<!-- KOD HTML -->
</div>
Czy może całkiem inaczej:
<attribif>
<div>
<!-- KOD HTML -->
</div>
</attribif>
(osobiście wolę to pierwsze). Czekam na wasze opinie i komentarze. Zobaczymy co uda się stworzyć ;)