Kolejna czesc specyfikacji :)
1) Linki beda mialy postac: 4programmers.net/text/Delphi/Gotowce/Jak_zamknąć_system, 4programmers.net/text/Pascal/FAQ itp... Wiaze sie to z tym, ze dzialow "Gotowce" moze byc kilka, w kategoriach "Delphi", "Pascal", itp. Taka budowa linkow (mimo ze dluga) na pewno przyczyni sie do lepszego indeksowania owych artykulow przez wyszukiwarki oraz umiejscowienia tych linkow na wyzszych pozycjach.
2) Poprawiona specyfikacja tabeli coyote_article
Do tabeli trzeba dodac pole article_namespace (przestrzen nazw). Dzieki temu bedzie mozna odroznic czy artykul to jednoczesnie nazwa kategorii czy szablon czy "wolny artykul".
3) Specyfikacja tabeli coyote_cat
Tabela ta powinna przechowywac ID kategorii oraz ID artykulow ktore do niej przynaleza.
---------------------------------------------------------
cat_id | ID kategorii
cat_article | ID artykulu ktory przynalezy do kategorii
4) Specyfikacja tabeli coyote_tree
System ma takze umozliwiac wyswietlanie drzewa kategorii w postacii hierarchicznej. W tym celu potrzebna jest tabela ktora przechowuje ID kategorii oraz ID rodzicow.
-----------------------------------------------------------
cat_id | ID kategorii
cat_parent | ID kategorii-rodzica
left_id | Pole uzywane do prezentacji danych
right_id | j/w
5) Mozliwosc tworzenia szablonow
Tak jak na wikipedii. Szablony beda mogly byc wstawiane w tekst - np.:
<template name="szablon" parametr1="wartosc parametru">
6) Specyfikacja tabeli coyote_link
----------------------------------------------------------
link_source | ID artykulu w ktorym znajduje sie link
link_dest | ID artykulu do ktorego prowadzi link
Jak wiadomo, w poszczególnych tekstach mogą znajdować się odnośniki do innych artykułów w serwisie. W tekstach, odnośniki do innych artykułów mogą być zawarte w znacznikach <url>. Wyobraźmy sobie sytuacje, w której w jednym tekście istnieje 50 odnośników do innych artykułów. Teraz, w trakcie generowania strony, należy sprawdzić, każdy z tych odnośników, czy aby na pewno artykuł o danym tytule znajduje się w bazie danych. Wymagałoby to dodatkowych zapytań do bazy danych. Dlatego lepszym rozwiązaniem będzie utworzenie tabeli coyote_link, która posiada jedynie dwa pola (link_source, link_dest). Pierwsze przechowuje ID artykułu, w którym znajduje się odnośnik, a drugie ID artykułu do którego prowadzi odnośnik.
W trakcie edycji tekstu musimy dokonać zmian, które przedstawiłem w trzech punktach poniżej:
- Podczas edycji tekstu o ID = N , przy pomocy wyrażeń regularnych, pobieramy wszystkie znaczniki <url> z tekstu.
- Z tabeli rr_link kasujemy wszystkie rekordy, w których link_source = N.
- W pętli wysyłamy zapytania sprawdzające, czy w bazie istnieje artykuł o takim tytule. Jeżeli istnieje, pobieramy jego ID, przechodzimy do punktu 4; jeżeli nie - przechodzimy do następnej iteracji pętli.
- Do tabeli coyote_link zapisujemy dane: ID artykułu edytowanego (w tym wypadku N) oraz ID artykułu który uzyskaliśmy w punkcie 2.
Podczas odczytu treści danego artykułu z bazy danych musimy wysłać do bazy zapytanie, w którym żądamy zwrócenia wszystkich rekordów, w których link_source = N. Zapytanie musi być łączone i oprócz link_dest zwracać także tytuł artykułu określonego w link_dest. Na tej podstawie, ponownie korzystając z wyrażeń regularnych pobieramy znaczniki <url> i zastępujemy je odpowiednimi odnośnikami XHTML. Jeżeli tytuł artykułu pobrany z wewnątrz znacznika <url> nie odpowiada żadnemu tytułowi pobranemu z bazy danych, to oznacza, że takiego artykułu jeszcze nie napisano.
Podczas usuwania danego tekstu (wraz z jego poprzednimi kopiami) należy wysłać zapytanie usuwające z tabeli coyote_link wszystkie wiersze w których kolumna link_source lub link_dest odpowiadają ID kasowanego artykułu.
Nalezy rozwazyc jeszcze jedna sytuacje... Mamy artykul X ktory zawiera link do nieistniejacego artykulu Y. Teraz ktos utworzy artykul Y, lecz w bazie brakuje informacji potrzebnych do tego, aby w artykule X "podswietlic" link odpowiednio, tak, aby user wiedzial ze taki artykul istnieje. Mozna rozwazyc pomysl utworzenia jeszcze jednej tabeli coyote_broken
zawierajacej informacje o nieistniejacych jeszcze, linkach.
-----------------------------------------------
link_source | ID artykulu w ktorym umiesczono nieistniejacy link
link_text | Fraza
Np.
24 | preg_match
24 | preg_replace
</url></url></url></url>