Zacznijmy od tego, że niedługo chyba za świętą uznam chwilę, gdy posłuchałem Waszej rady ad. komponentów i napisałem nowy kompilator, wzorowany na XML'owym :). Pomogła ona przy komponentach, pozwalając narodzić się Open Power Forms, teraz pomoże przy drzewach. Nie obejdzie się bowiem prawdopodobnie bez instrukcji złożonej, gdzie trzeba będzie zdefiniować wygląd np. liścia, węzła z podelementami, zakończenia danego poziomu itd. Mogłoby to wyglądać w ten sposób:
<ul> <opt:tree name="stromcek"> <opt:openingNode> <li>{$stromcek.tytul} <ul> </opt:openingNode> <opt:leaf> <li>{$stromcek.tytul}</li> </opt:leaf> <opt:closingNode> </ul> </opt:closingNode> </opt:tree> </ul>
Ujawnia się tu kolejne błogosławieństwo kompilatora: OPT traktuje cały kod HTML jak zwykły tekst, w związku z czym zupełnie nie przeszkadza mu taka konstrukcja:
<opt:closingNode> </ul> </opt:closingNode>
Uczciwie należy dodać, że stawiany mi onegdaj za wzór WACT także takie coś by zaakceptował, co grzebie ideę "XML albo śmierć" używaną wtedy jako główny argument przeciwko OPT. Oto przykład z dokumentacji tego projektu:
<list:list id="mylist"> <list:item> <core:default for="ListRowOdd"><font color="red"></core:default> <core:optional for="ListRowOdd"><font color="blue"></core:optional> </font> <list:item> </list:list>
Wróćmy jednak do tematu... trzeba się teraz zastanowić, jakich danych OPT potrzebuje, aby wykorzystać hipotetyczną instrukcję tree. Pierwsza na myśl nasuwa się wielowymiarowa tablica, lecz jej generowanie od strony programistycznej wymaga różnych zabiegów i podejrzewam, że nikomu nie będzie się chciało bawić ze stosami oraz innym śmieciem. Przecież drzewo można wygenerować z zupełnie płaskiej listy, w której rekordy zaopatrzone są w blok depth, notabene dodawany i liczony automatycznie, jeśli rendering odbywa się metodą opisaną w artykule "Drzewka w PHP i MySQL" dostępnym na Zyxist.com. Oprócz tego przydałoby się wbudować w OPT jakąś funkcję będącą odpowiednikiem str_repeat() w PHP, aby drzewka mogły być też generowane w trybie tekstowym.
Powyższe ustalenia na pewno nie pojawią się w OPT 1.0.0, gdyż naprawdę już czas, aby ta wersja final wreszcie się ukazała. Nic jednak nie stoi na przeszkodzie, aby instrukcja tree znalazła się w wersji 1.1.0.














