![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam się, jak rozwiązać w CMSie zarządzenie treścią. Na chwilę obecną mam mniej więcej coś takiego.
Tabela Content, zawierająca pola id [ int(11) ] xml [ text ] Oprócz tego jest kilka dodatkowych pól umożliwiających tworzenie drzewa itp, ale na razie jest to nie ważne. I teraz przykładowa treść xml dla folderu wygląda tak:
Dla artykułu tak:
A teraz pytania. 1. Czy to będzie wydajne? IMO średnio. Każde przeglądanie wymaga parsowania pliku XML, nie mówiąc już o wyświetleniu drzewa z tytułami (potrzeba pobrać wszystkie dzieci, wszystkim przeparsować XML i wyświetlić). Z wyszukiwaniem też będzie problem. Tak samo jak z wyświetlaniem np. wszystkich artykułów z danego folderu. Dobrym rozwiązaniem wydaje się dopisanie do tego dobrego systemu cache i jakiejś wyszukiwarki z crowlerem zapisującym słowa kluczowe. Jeśli ktoś ma jakiś pomysł na dobre wyszukiwanie i cache to proszę się podzielić ![]() 2. Jak rozwiązać wyświatlanie. Na chwilę obecną jest to obsługiwane przez zwykły parser XML, który zamienia mi ten dokument na tablicę, która najstępnie jest przekazywana do renderera (np. Smarty, itp.) Zastanawiałem się także nad XSLT, ale nie bardzo wiem jak w PHP4 się do tego zabrać. Teraz jest jeszcze kolejny problem, czyli templaty lokalne. Co jeśli chcę wyświetlać w jednym folderze artykuły w inny sposób niż w drugim? Obecnie rozwiązuje to za pomocą sekcji. Tworzę sobie powiedzmy sekcję na folderze głównym, skrypt przy wyświetlaniu elementu sprawdza najbadziej szczegółową (czyli jak mam Root->News->News_1 to najpierw sprawdza News, potem Root) w poszukiwaniu odpowiedniego szablonu. Wydaje się to dość dobrym rozwiązaniem, co o tym sądzicie? Z góry dzięki za pomoc. Ten post edytował matid 22.04.2005, 18:54:00 |
|
|
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
IMO XML jest dobry do przenoszenia danych, przesyłania miedzy aplikacjami i tego typu rzeczy. Natomiast trzymanie w nim danych jak w bazie to zupełna pomyłka.
Na Twoim miejscu trzymałbym treści w bazie lub same adresy o plików, w których są treścia dodatkowo w bazie reszte informacji. IMO XML do tego co robisz kompletnie sie nie nadaje. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(mike_mech @ 2005-04-22 22:36:42) IMO XML jest dobry do przenoszenia danych, przesyłania miedzy aplikacjami i tego typu rzeczy. Natomiast trzymanie w nim danych jak w bazie to zupełna pomyłka. Na Twoim miejscu trzymałbym treści w bazie lub same adresy o plików, w których są treścia dodatkowo w bazie reszte informacji. IMO XML do tego co robisz kompletnie sie nie nadaje. Moim zdaniem jest to dobre wyjście chociażby z tego względu, że przy wprowadzaniu danych nie jesteśmy ograniczeni strukturą bazy danych. AFAIK w wielu systemach jest to implementowane w ten sposób. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
moim zdaniem także nie takie jest przeznaczenie XMLu. np. spróbuj mi teraz wyszukac wszystkei artykulu danej osoby, albo zrobic jakakolwiek wyszukiwarke. bedziesz przeszukiwal wszystkei pliki xml? optymalizacyjna klapa.
-------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
XML do konfiguracji systemu, owszem.
Ale do trzymania treści, ble. Zgadzam się z poprzednikiem, a co z wyszukiwaniem, i pożądkowaniem danych. Ich układem i przejrzystością. A jeżeli mówisz że ogranicza cie struktura tabeli to robisz dwie: treści i arty. A nie wszystko w jednym pliku. No i już nie wspomną o tym że takie pliki będe parsowane za każdym odświerzeniem strony, a to zajmuje duuuuużo czasu. Powtażam pomysł chybiony. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(sopel @ 2005-04-22 23:59:01) moim zdaniem także nie takie jest przeznaczenie XMLu. np. spróbuj mi teraz wyszukac wszystkei artykulu danej osoby, albo zrobic jakakolwiek wyszukiwarke. bedziesz przeszukiwal wszystkei pliki xml? optymalizacyjna klapa.
A w ten sposób? Dalej podtrzymuje, że moim zdaniem jest to dobre rozwiązanie. W tym temacie też polecają trzymanie danych w XMLu. Ten post edytował matid 23.04.2005, 08:14:52 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat(matid @ 2005-04-23 08:13:03)
A w ten sposób? Dalej podtrzymuje, że moim zdaniem jest to dobre rozwiązanie. trudno nazwać to wydajnym rozwiązaniem, zwłaszcza gdy przyjdzie ci wyciągać dane wg. bardziej złożonych kryteriów (co sam zresztą zauważyłeś w swoim poście). tak czy owak nikt tu raczej na siłę nie będzie Cię przekonywał. chciałeś opini i my tu swoją wyraziliśmy. dla mnie to się mija z celem. -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(sopel @ 2005-04-23 09:30:01) Cytat(matid @ 2005-04-23 08:13:03)
A w ten sposób? Dalej podtrzymuje, że moim zdaniem jest to dobre rozwiązanie. trudno nazwać to wydajnym rozwiązaniem, zwłaszcza gdy przyjdzie ci wyciągać dane wg. bardziej złożonych kryteriów (co sam zresztą zauważyłeś w swoim poście). tak czy owak nikt tu raczej na siłę nie będzie Cię przekonywał. chciałeś opini i my tu swoją wyraziliśmy. dla mnie to się mija z celem. No to jakie inne rozwiązanie proponujesz? Nie chcę być ograniczony strukturą bazy danych, bo jak ktoś będzie chciał dodać sobie jakieś dodatkowe pole np. do artykułu to nie powinien mieć z tym żadnych problemów. Oprócz tego najlepiej, jakby wszystko mogło leżeć w jednej tabeli. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Odróżnij treść artykułu od atrybutów artykułu. Autor to nie jest treść, tylko atrybut. Trzymanie atrybutów w XML tylko utrudnia wyszukiwanie. Trzymanie treści w bazie danych zapycha bazę.
|
|
|
![]()
Post
#10
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2005-04-23 09:32:45) Odróżnij treść artykułu od atrybutów artykułu. Autor to nie jest treść, tylko atrybut. Trzymanie atrybutów w XML tylko utrudnia wyszukiwanie. Trzymanie treści w bazie danych zapycha bazę. Wniosek ( IMO ): - atrybuty w bazie: łatwośc wyszukiwania, "lekka" baza; - treści w plikach ( adresy do nich w bazie ). A i jeszcze powiedz dlaczego chcesz wszystko trzymać w jednej tabeli? Ja wtedyodróżnisz np. news'a od artykułu? Dodatkowy atrybut. No i czas dostępu do danych jest bardzo ważny. A parsując pliki XML czasu tego nie znajdziesz. To by było na tyle w tym temacie z mojej strony. |
|
|
![]()
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%) ![]() ![]() |
mike_mech - CMS nie rozróżnia artykułu od newsa. Dla niego wszystko jest treścią, tylko mogą być różne sposoby jej prezentacji (np rózne szablony smarty czy xslt).
W porządnych CMSach masz też system keszowania więc czas uzyskiwania dostępu do danych się zmniejsza :] |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2005-04-23 10:32:45) Odróżnij treść artykułu od atrybutów artykułu. Autor to nie jest treść, tylko atrybut. Trzymanie atrybutów w XML tylko utrudnia wyszukiwanie. Trzymanie treści w bazie danych zapycha bazę. Teraz planuję zrobić coś takiego. Mam dokument XML (oczywiście z deklaracją DTD zgodną z moim systemem i jego DTD będzie w mojej bazie danych). Importuję go do systemu. Parser zbiera sobie informacje o pliku, czyli rodzaj dokumentu (DTD), autora(-ów), datę utworzenia, modyfikacji, itp. Zapisuje to w bazie danych w odpowiedniej tabeli wraz z informacją na temat położenia pliku XML. Użytkownik, jeśli będzie chciał wyświetlić powiedzmy wszystkie pliki danego autora, szuka to w bazie. Baza zwraca nazwy plików XML. Jeśli istnieje cache w postaci XHTML to jest ładowany, jeśli nie to za pomocą XSLT plik XML jest transformowany do XHTMLa i cachowany. Użytkownik ma ładne wyświetlanie, ja mam dane w postaci XML, szukanie jest szybkie. Cache optymalny. Co myślicie o takim rozwiązaniu? I teraz tylko rodzi się pytanie - jak rozwiązać przeszukiwanie treści artykułów... |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
A skąd parser weźmie autora itd? Z sufitu?
|
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2005-05-05 20:44:26) A skąd parser weźmie autora itd? Z sufitu? Nie z sufitu, tylko dokument XML będzie miał np. taką postać:
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
A jeżeli autor artykułu nie chce pisać wg tego DTD? To nie jest z niczym zgodne. Żaden edytor tego nie wspiera. Nikt tego nie zna. Język jest potwornie ubogi. Nie ma sposobu na wyróżnienie tekstu. Nie ma listingów. Wypunktowania. Tabelek. Obrazków. Odnośników. Niczego nie ma. Możesz albo zostawić taki format, pozbawiając się większości funkcjonalności, albo rozszerzyć go, pakując się w straszne bagno.
Tworzenie własnego formatu artykułów jest gigantyczną pracą, więc nie warto opierać na tym systemu. Jeżeli już, wyciągaj te informacje z DocBooka. A jeżeli już mówimy o CMS, to co będzie, jak ktoś będzie chciał umieścić coś innego niż taki artykuł? |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli dokument będzie przekształcany za pomocą XSLT, to warto poszukać edytora WYSIWYG, który polega na tym, że dokument jest transformowany w czasie pisania. Wystarczy wtedy stworzyć szablon XSLT i mamy obsługę dowolnego formatu w edytorze. Nie wiem, czy dobrze pamiętam, ale zdaje mi się, że TUTAJ powinien być taki edytor.
|
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2005-05-08 09:17:10) A jeżeli autor artykułu nie chce pisać wg tego DTD? To nie jest z niczym zgodne. Żaden edytor tego nie wspiera. Nikt tego nie zna. Język jest potwornie ubogi. Nie ma sposobu na wyróżnienie tekstu. Nie ma listingów. Wypunktowania. Tabelek. Obrazków. Odnośników. Niczego nie ma. Możesz albo zostawić taki format, pozbawiając się większości funkcjonalności, albo rozszerzyć go, pakując się w straszne bagno. Tworzenie własnego formatu artykułów jest gigantyczną pracą, więc nie warto opierać na tym systemu. Jeżeli już, wyciągaj te informacje z DocBooka. A jeżeli już mówimy o CMS, to co będzie, jak ktoś będzie chciał umieścić coś innego niż taki artykuł? Planowałem rozszerzyć ten DTD o różne inne możliwości w stylu obrazków, podkreśleń, itd. BTW - chciałem też dać możliwość uploadowania własnego DTD i XSLT. A co do DocBook to muszę się zastanowić. Aha, tak pozatym to nie jest tak, że system będzie przyjmował tylko i wyłącznie pliki XML. Na chwilę obecną mam w planach napisanie edytora, kŧóry na podstawie DTD będzie edytował formularz. Czyli ktoś wybiera, że chce stworzyć artykuł, to na podstawie DTD artykułu dostanie do tego ładny formularz. Ten post edytował matid 8.05.2005, 09:48:11 |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli użytkownik może uploadować swoje własne DTD, to ja chcę zrobić takie, w którym autor artykułu przechowywany jest w tagu <czas>, a data utworzenia w tagu <autor>. Moje DTD, wolno mi. Zrób mi do tego parser.
A jeżeli na podstawie DTD będziesz robił formularz, to musisz napisać paser DTD. Co też nie jest proste. I co niby ten parser zrobi z DTD? Jak mu zapodam DTD do HTMLa, to ciekawe, co on mi wyprodukuje... |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
@matid -> moim skromnym zdaniem zwyczajnie utrudniasz sobie robote. Na temat sensu uzywania xml w php wypowiedzialem sie juz w temacie [porada]tpl Vs. php. Sam tez juz odwiedzales ten temat ale moze nie jestes na biezaco ;-)
Jesli juz koniecznie zalezy Ci na zastosowaniu technologi xslt to zapoznaj sie z ponizszym przykladem:
Jeszcze jedna uwaga. Zamiast DTD uzyj xsd - jest precyzyjniejszy. Ten post edytował bigZbig 10.05.2005, 08:09:31 -------------------- bigZbig (Zbigniew Heintze) | blog.heintze.pl
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 362 Pomógł: 0 Dołączył: 18.02.2004 Skąd: Knurów Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za rady. Zastanowię się jeszcze czy użyć XMLa w moich projektach. Zresztą spróbuję napisać coś więcej i sprawdzić wydajność.
A co do kodu - przecież tutaj mam własny kod dobrze działąjący i nie widzę większej różnicy co do twojej wersji. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 14:12 |