Wysłany: 07.01.2007 16:09 xt (xhtml templates) - system szablonów by neo
Witam!
Chciałem obwieścić, że projekt umarł śmiercią naturalną.
Chciałem wszystkich Was zaprosić do udziału w projekcie xt, czyli xhtml templates.
Jest to system szablonów, który nie wymaga nauki żadnego szablonowego pseudo-języka - dodawanie poszczególnych wartości opiera się na id i klasach. Inną zaletą jest pełne wsparcie dla xhtml, wysyłanego przeglądarkom, które go rozumieją jako application/xhtml+xml. System szablonów promuje całkowitą wolność od brudzenia htmlowych szablonów pseudo-językiem oraz pełną poprawność xml.
Pomysł skryptu oczywiście narodził się na naszym forum
Na razie dokumentacja jest dość uboga, lecz mam nadzieję, że umożliwi podstawową funkcjonalność. (zamknięto ze względu na wandalizm)
Skrypt jest w początkowej fazie rozwoju, zatem zapraszam wszystkich programistów php do jego testowania, zgłaszania błędów, poprawek i usprawnień.
Nie ukrywam, że bardzo liczę na wsparcie ze strony forum przy rozwoju systemu xt. Liczę tutaj również na administrację i grono moderatorów.
Bardzo chętnie przyjmę wszelką pomoc, szczególnie jeśli chodzi o optymalizację kodu. Byłbym niezmiernie szczęśliwy, gdyby ktoś wykonał szablon dla systemu, jakieś rozpoznawalne logo.
Znane problemy:
kodowanie znaków - konieczność korzystania z utf-8
A mógłbyś trochę szerzej wytłumaczyć na czym to polega? Kiedy pierwszy raz zobaczyłem ten system szablonów to naprawdę zupełnie nie wiedziałem co to ma być.
Czy to ma być alternatywa dla Smarty itp.?
Tak, można to uznawać za alternatywę Smarty. Działa bardzo podobnie, jednak sam system wstawiania jest zupełnie inny, np. mając taki szablon, zapisany jako szablon.html
Wigrom, wezmę to pod uwagę tworząc dokumentację - nie wszyscy muszą znać programowanie obiektowe, racja. Ale jest to niezmiernie proste:
Na początku tworzysz obiekt:
Pomysł, muszę przyznać, ciekawy. Pierwsze uwagi zrobione na szybko:
Czy system umożliwia wykonanie zagnieżdżonych pętli?
Podczas wykonywania pętli, identyfikatory ID elementów XHTML są powielane, co w wyniku generuje błędny kod.
Czy istnieje możliwość usunięcia z szablonu wybranego bloku kodu, ale tak, aby w ogóle nie wystąpił na ekranie, tzn. aby usunięte zostały również elementy obejmujące taki blok? Np. po <div id="wytnij">...</div> nie powinno zostać nic na ekranie.
Przy rozległych szablonach może powstać problem zapełnienie przestrzeni nazw. Chodzi o to, że każdy element, do którego się odwołujemy, musi mieć przypisaną klasę lub identyfikator. Obszerne szablony mogą być przeładowane identyfikatorami i klasami, a przez to, mogą się one niezamierzenie powtarzać w różnych częściach szablonu. Powstanie mały chaos przy późniejszym stylizowaniu i nadmiarowy kod.
Jeżeli chodzi o ostatni punkt, to może zastanowisz się, nad wprowadzeniem specjalnego atrybutu, np.
Nie no, chodziło o to, że nie pomogę przy testach, bo się nie znam
A używanie rzeczywiście jest bardzo proste, nikt nie powinien mieć problemów, jeśli tylko to prosto i konkretnie omówisz.
tak, umożliwia. Pętlę znajdziesz w przykładach, zagnieżdżenie może wykombinujesz, bo jeszcze nie zdążyłem w dokumentacji tego zrobić. Patrz pomocnicza metoda r(), może wymyślisz
nie, nie są powielane. Są usuwane. I tu główna różnica czy w pętli korzystamy z id czy class
o tym też myślałem, być może wprowadzę coś w stylu pobierania n-tego elementu wg nazwy tagu, inne pomysły również wskazane. Myślę, że wszystko wyjdzie przy testach przeprowadzonych wspólnie przez forumowiczów. Może dodatkowy atrybut to dobry pomysł, ale na razie bym się powstrzymał z jego wprowadzeniem. Może znajdzie się inny, dobry pomysł
Aby ukazać prawdziwe działanie szablonów najlepiej musiałbym udostępnić kod źródłowy samej strony. Postaram się o to jutro.
Co do loga - może jakiś konkurs Bardzo podobał mi się konkurs na logo svg. Ale na razie trzeba pracować nad jego technicznymi aspektami, grafika przyjdzie później.
Odwoływanie się do elementów po numerze wystąpienia w kodzie źródłowym, to wg mnie zły pomysł. Jeżeli ktoś zmieni szablon, układając klasy w inny sposób, cały kod PHP przestanie działać poprawnie.
Nazwę specjalnego atrybutu data można by zmienić na #text, co by było zgodne ze specyfikacją DOM, a więc bardziej intuicyjne. Choć to tylko sprawy estetyczne.
_________________
Ostatnio zmieniony przez kurshtml dnia 07.01.2007 17:06, w całości zmieniany 2 razy
Nasunęła mi się jeszcze jedna myśl. Przez to, że można się odwoływać tylko do elementów XHTML, nie będzie można np. powielić zwykłego tekstu. Rozwiązaniem mogłoby być wprowadzanie poza atrybutem xt:id dodatkowy element, np.
kurshtml, system opiera się na dom, dlatego można to zrobić korzystając z funkcji domowych. Jeśli podasz konkretny przykład spróbujemy się razem zastanowić w jaki sposób mogłoby to funkcjonować.
W tym sęk, że DOM nie pozwala dotrzeć do każdego fragmentu kodu, a jedynie do elementów i atrybutów oraz wartości. Nie można dotrzeć do fragmentu tekstu, który nie jest oznaczony żadnymi znacznikami.
Załóżmy, że cały szablon w uproszczeniu wygląda tak:
Co by oznaczało, że znacznikowi, który posiada daną klasę zostanie usunięty kolejno: id, rodzic lub klasa. To załatwiałoby wiele problemów.
Ps. Gdzie podziało się liczne grono specjalistów tego forum? Czyż naprawdę skrypt wzbudza tak nikłe zainteresowanie? Byłbym zatem wdzięczny za wszelką formę reklamy systemu
pierwsze co mi się nasuwa na myśl, to to, jak np. dodać coś do meta? w meta chyba nie mogę dać id lub class, tym bardziej, że potem one pozostaną w kodzie wynikowym. Może warto byłoby aby metoda add pozwalała modyfikować dowolny znacznik o dowolnym atrybucie, który posiada dowolną wartość?
coś w stylu:
add( $wartosc, // standordowo id lub class, gdy inny $atrybut to wartość atrybutu $text, // wiadomo $atrybut=id/class, // czyli niestandardowy atrybut $tag='*' // bedzie można np. odwoływać się do tagu meta, który ma http-equiv="coś tam" ($atrybut=$wartosc) );
mam nadzieję, że zrozumiale napisałem.
neo007, czy istnieje możliwość abym w niedalekiej przyszłości wykorzystał xt w projekcie komercyjnym?
Bo mój mini-cms teraz raczej nie korzysta z żadnych szablonów (nie było takiej potrzeby), ale tak mały i szybki system może zastąpić aktualne:
--DOPISANE--
można do metody add dodać jeszcze jedną zmienną (jak to się w OOP nazywa?), a mianowicie $gdzie, która standardowo przyjmowała by wartość in lub before i after, dzięki czemu nie będzie trzeba tworzyć dodatkowych metod w stylu add_before.
PS trzymam kciuki za projekt :]
Ostatnio zmieniony przez minchal dnia 08.01.2007 17:29, w całości zmieniany 1 raz
Zobacz następny temat Zobacz poprzedni temat Możesz pisać nowe tematy Możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach