PHP Framework - szablony

0

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ć ;)

1

Długa droga Cię czeka, jeżeli ma być to coś warte.

Z ważnych rzeczy:

  • funkcje muszą być, a jeżeli nie muszą być to wymyśl coś fajnego na generowanie drzewka wielokrotnie zagłębionego (<ul> <li>) tak przydatnego przy tworzeniu menusów. includowanie tego samego pliku jest cholernie niewydajne
  • cachowanie. Smarty plik *.tpl odczytuje jednokrotnie, następnie kompiluje to do pliku PHP - Twoje szablony powinny potrafić to samo.

Zastanawiam się czy to dobry dział. Raczej lepszy Oceny i Recenzje (choć na razie nie ma czego oceniać). Hm.

0
  • Do generowania list są pętle. Dane powinny być przygotowane w PHP.
  • Cache'owanie to podstawa szablonów. Do tego jakiś dobry system wykrywający zmiany zamiast regeneracji okresowej, która (imho) się mija z celem.

To raczej luźna dyskusja w PHP. Najlepiej, żeby to trafiło na mikrobloga, ale komentarze niewygodnie czytać. Poza tym tutaj jest lepszy dostęp ;)

0
  • Do generowania list są pętle. Dane powinny być przygotowane w PHP.

I jak wypiszesz zmiennopoziomową listę za pomocą pętli? No chyba, że w PHP przygotujesz zmienną o wartości <ul><ul><li><ul><li>cośtam (...), bo do tego chyba ten twój statyczny system ma prowadzić.

0

Include parametryzowane w pętli. Na samej górze szablonu określam wymagania i wartości domyślne. Dzięki temu każdy plik(szablon) parsuje tylko raz. :)

<ul class="Menu">
<foreach src='Menu' name="Item">
	<include src="MenuItem" parent="Item" />
</foreach>
</ul>

1 użytkowników online, w tym zalogowanych: 0, gości: 1