Cytat
Tak na marginesie, a czy nie jest przypadkiem tak, że jeśli system generuje kod zgodny ze standardami ( xhtml ) to grafik tylko CSSem się martwi ?
Trafiłeś w sedno. xHTML ma właśnie taki cel - by oddzielić w całości treść od prezentacji (coraz bardziej zbliżyć się do XML'a). Prezentacja powinna być w całości określona przez style. Zobaczcie na
CssZenGarden - każdy layout na tej stronie korzysta z jednego dokumentu HTML. Ja byłem pod wrażeniem

Czyli możemy stwierdzić, że kod html może być wygenerowany programowo (np.: przez DOM - tak jak XML), a grafik zajmuje się tylko CSS,
--
Wracając do dyskusji nad poszczególnymi systemami szablonów: jak sądzicie, co jest nie tak z szablonami w stylu
phpLib/phpBB2? Dlaczego nie używalibyście czegoś takiego:
<!-- BEGIN newslist -->
<!-- END newslist -->
Dość długo korzystałem z podobnego rozwiązania i w zasadzie nie wiem, dlaczego z niego zrezygnowałem. Bardzo minimalistyczne i proste dla designerów.
Ogólnie jestem zdania, że szablony nie powinny zawierać elementów charakterystycznych dla imperatywnego stylu programowania (np. if, foreach, while), ale w tym wypadku, dla czytelności, byłbym skłonny dodać instrukcje IF, ELSE - w końcu XSLT też ma if i foreach

. Różnica ze Smartym polegałaby na tym, że nie stosowalibyśmy żadnych obliczeń typu <!--IF $zmienna eq 10 --> itp. Po prostu mamy <!-- IF show_login_box -->.
Rozwiązanie mało innowacyjne, stare jak świat. Na pewno wielu z Was zaczynało właśnie od podobnych rozwiązań. Back to the primitive

Druga sprawa:
Rozwiązanie z DOM omawiane wcześniej jest po prostu idealne dla ludzi od htmla. Pomimo zalet tego rozwiązania nadal nie jestem przekonany do jego użycia. Pierwsze problemy zaczynają się z pętlami. Powiedzmy, że mamy:
Trzeba byłoby pobrać wszystkie 'dzieci' tagu 'userlist', powielać je w pętli a następnie zastąpić oryginalną zawartość wygenerowaną listą. Mało efektywne.
Dziwiło mnie dlaczego obiektów z rozszerzenia DOM nie można serializować. Zgłosiłem to jako błąd. Dwóch developerów z php teamu uświadomiło mi, że taka funkcja jest niepotrzebna, bo libxml2 jest tak szybkie, że nawet zserializowany obiekt DomDocument nie będzie się wczytywał szybciej od uruchamiania DomDocument::loadHtml()/loadXML.
libxml jest szybki, ale nie wystarczająco szybki. Dla warunków php takie drzewo jest zbyt duże. Zresztą i tak nie będziemy potrzebowali manipulować wszystkimi tagami HTMLa, lecz tylko niewielką ich częścią. Sposobem mogłoby być dodanie do interesujących nas tagów specjalnego atrybutu (np. <div id="userlist" runat="server">). Wtedy tylko z tych elementów generowalibyśmy drzewo.
Do tego trzeba byłoby parsować dokument 'ręcznie', za pomocą parsera SAX z php (bądź XML_HTMLSax z PEAR) i generować kod tworzący drzewo w czasie wykonywania szablonu (WACT tak działa - tyle, że tu nie mamy żadnych dpdatkowych tagów i komponentów - po prostu czysty HTML). Niestety wymaga to złożonej 'kompilacji' do kodu php. Na koniec można zostać z kolejną kobyłą do szablonów. Ale może warto bliżej się tym zająć?