![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Stworzyłem dzisiaj swój wymarzony silnik drzewek. Taki system można podzielić na dwie oddzielne cześci: - system drzewek czyli jakby foldery (są trzymane w bazie danych) - obiekty docelowe, czyli jakby pliki. Silnik drzewek chcę wykozystać na razie do trzech podsystemów: - katalog artykułów - katalog produktów (dla sklepów internetowych) - download Mógłbym do każdego z tych trzech podystemów zrobić oddzielną tabelę ze swoimi własnymi drzewkami i zrobić z tego oddzielne moduły, ale nie chcę tego, ponieważ to ma być system elastyczny, jak najbardziej przypominający CMSa, a nie system portalowy, gdzie każdy moduł jest zupełnie odosobniony od reszty systemu. Wykożystując jeden silnik drzewek natrafiam na problem, że występują tu różne obiekty. Artykuły są przechowywane w XMLu i są obrabiane przez jakiś element systemu, a z kolei produkty mają tabele w DB obrabiane przez zupełnie inny element systemu. Aby to bardziej zobrazować (sam widzę, że to troche zagmatwane) podam przykład: http://www.php.pl/index.php/phppl/artykuly...ch_programistow Widać, że aby przechować taki element wystarczą w bazie dwa pola: tytuł i treść http://www.php.pl/index.php/phppl/skrypty/cms/ez_publish Tutaj z kolei widać, że potrzeba więcej pól: nazwa, wersja, strona www, recenzja, link itd... Obiekty są różne a mimo to CMS to rozpoznaje i uruchamia odpowiednią akcję. I tu pojawia się moje pytanie: jak to zrobić w jakiś elegancki CMSowy ( (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ) sposób (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Trzymać wszystko w XMLu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Czyli masz np. artykuł w takiej postaci
I potem przetwarzasz to za pomocą XSLTa, w rezultacie otrzymasz wynik w takiej formie jaka Ci się zażyczy ( z małym udziałem CSSa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
hmm nie za bardzo mi to pasuje, dlatego, że narzuca to sposób przechowywania danych.
Ja chcę np mieć katalog cześci komputerowych, które mają być w bazie danych, w których będą kolumny: Kod id, nazwa, typ, opis, cena itd Z kolei np artykuły chcę przechowywać, tak jak napisaleś wyżej. Wracamy do punktu wejścia. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Dane(w masz obiekcie pole data) jakiegokolwiek obiektu zapisujesz w bazie w postaci plików XML - różnych plików odpowiednich dla danego obiektu - właśnie pracuje na czymś takim w domku (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) - sporo roboty: szablony, kontrola wersji i wogóle...
|
|
|
![]()
Post
#5
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Cytat - system drzewek czyli jakby foldery (są trzymane w bazie danych) - obiekty docelowe, czyli jakby pliki. W swoim systemie postanowilem to w pewien sposób połączyć. To znaczy mam drzewo, ktorze przechowuje nie tylko informacje o folderach, ale również o wszystkich elementach w nich się znajdujących. Dla drzewa nie ma więc znaczenia, czy w jakimś miejscu pojawi się artykul, news, czy też folder. Otrzywiście przechowuje jednak taką informację, więc gdy już przyjdzie czas na wyświetlenie konkretnego elementu, to nie ma problemu z rozpoznaniem jego typu, i wyświetleniem odpowiedniej zawartości z odpowiedniego źródła. W ten sam sposób przygotowuje różne wersje językowe. To znaczy w drzewku jest jeden wpis, ale do niego odwołują się 4 różne zawartości, pobierane w zależności od potrzeb. Pozwala to również na znacznie uproszczone linkowanie. Zawsze bowiem wystaczy podać tylko id liścia w drzewie, a system już sam rozpozna, czym jest podany element. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
A co sądzicie o pomyśle drzewek do obługi systemu zarządzania użytkownikami - rozmyslam nad czymś takim ostatnio
|
|
|
![]()
Post
#7
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
Cytat(DeyV @ 2005-02-10 09:24:14) W swoim systemie postanowilem to w pewien sposób połączyć. To znaczy mam drzewo, ktorze przechowuje nie tylko informacje o folderach, ale również o wszystkich elementach w nich się znajdujących. Dla drzewa nie ma więc znaczenia, czy w jakimś miejscu pojawi się artykul, news, czy też folder. Otrzywiście przechowuje jednak taką informację, więc gdy już przyjdzie czas na wyświetlenie konkretnego elementu, to nie ma problemu z rozpoznaniem jego typu, i wyświetleniem odpowiedniej zawartości z odpowiedniego źródła. W ten sam sposób przygotowuje różne wersje językowe. To znaczy w drzewku jest jeden wpis, ale do niego odwołują się 4 różne zawartości, pobierane w zależności od potrzeb. Pozwala to również na znacznie uproszczone linkowanie. Zawsze bowiem wystaczy podać tylko id liścia w drzewie, a system już sam rozpozna, czym jest podany element. Ok więc wydumałem coś takiego: - pierwsza tabela przechowywuje całe drzewo gałęzi (gdzie każda gałąź ma swoje ID) - druga tabela przechowywuje powiązania pomiędzy gałęziami i liściami, tzn który liść jest w jakiej gałęzi. jej struktura jest następująca: Kod ID - unikalny identyfikator Cechą tego rozwiązania jest to, że nie wystarczy stworzyć nowy liść. Należy go także umieścić w odpowiedniej (dla nas) gałęzi.TREEID - klucz obcy tabeli z gałęziami - pokazuje w którym miejscu jest liść ACTION - która akcja ma obsłużyć żądanie PARAMS - parametry dla akcji (potrzebne po to, bo np. akcja artykuły musi rozpoznać, który artykuł wyświetlić Trochę kulawe jeszcze to rozwiazanie (szczególnie z tą kolumną PARAMS), więc czekam na sugestie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . |
|
|
![]()
Post
#8
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
alek, można by do tego dorzucic i18n (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
ke? a po co?
|
|
|
![]()
Post
#10
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hmm, załóżmy, że nagle zajdzie potrzeba przetłumaczenia artykułu na inne języki. Klikasz sobie w interfejsie administracyjnym utwórz tłumaczenie i po kłopocie. A jak dasz na chama wszystko w jednym langu, to co? To tak samo jak z fabrykami (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 742 Pomógł: 0 Dołączył: 14.12.2003 Skąd: Gdańsk, Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
chyba to będzie bardziej pasowało waszym wymaganiom:
Cytat(struktura tabel) tabela 1 - drzewo folderow API dla wszystkich akcji zarejestrowanych w systemie ( w tabeli 3 ).-id -code -title tabela2 - obiekty -id -code (klucz obcy) -objecttype (klucz obcy) tabela 3 - definicje rodzajów obiektów -id (objecttype) -name -action - akcja, która ma zająć się przetwarzaniem obiektu tabela 4 - dostępne języki -langid -title - en-EN, pl-PL itd itp tabela 5 - wersje językowe -id obiektu -langid Każdy typ obiektu musi mieć swoją klasę. Klasa musi mieć następujące metody: Przykładowe wywołanie jakiegoś obiektu: Jeżeli chcemy dodać powiedzmy artykuł, musimy najpierw stworzyć nowy obiekt artykułu, a następnie dodać do niego treść w jakimś języku. Hmm mam nadzieję, że wyjaśniłem dostatecznie prosto... pozdrawiam |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
A macie jakiś pomysl jak takie wredoctwo przeszukiwać ?
Bo LIKe to ja sobie potrafie wepchnąć do wszukiwarki - ale macie może np. jakiś pomysl ja np. przeszukiwać okreslone pola w documencie ? Ja wpadłem na głupi pomysl(wiem, że jest głupi bo powolny:(). Można podczas przeszukiwania drzewka pobierasz szablon danej klasy treściowej i robić to co trzeba, ale co robić mając w bazie np. 40 szablonow oraz 1000 podstron (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Zabić bazę ? |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 150 Pomógł: 1 Dołączył: 23.01.2004 Ostrzeżenie: (0%) ![]() ![]() |
Załóżmy że już uporaliśmy się z ww. problemem tj. organizacją kontentu w drzewo. Jak rozwiązać rozwijania drzewa przy użyciu np. Smarty bądź dowolnego innego systemu szablonów tak aby nie implementować logiki w szablon oraz bez wykorzystania JS. Także nie chcemy generować html w logice biznesowej. Załóżmy że chcemy uzyskac coś takiego na stronie po wejściu w automatyczne (oczywiście wpierw klikając artykułu, pralki i automatyczne)
Kod Artykuły
Pralki Automatyczne Model 1 Model 2 Model 3 Model 4 Pół automatyczne Lodówki Zmywarki Ten post edytował ebe 25.03.2005, 18:56:31 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 14:44 |