ďťż
Podstrony
|
telcocafeWitam!Ostatnio zastanawiałem się nad edycją artykułów w stylu tego co jest w Wiki. /pojawia się jednak problem, gdyż, w jednym momencie do pliku może dobrać się dwóch użytkowników. Co wtedy? Zablokować temu drugiemu dostęp aż ten pierwszy skończy czy jak...? Z góry dzięki za pomoc! Jeśli robisz to na bazie danych, jak sugeruje temat, to raczej nic nie musisz blokować. Poza tym, zauważ jak to jest na wiki - jak klikniesz historię to możesz się dobrać do wszystkich kolejnych zmian. Moja rada -> tabela `teksty` - topic_id [czyli id tematu do ktorego odnosi się treść] - tresc - data [w formie timestamp] - autor tabela `tematy` - id [unikalny, często się przydaje] - tytul I przy wyświetlaniu pobierasz wszystkie dane z tabeli `teksty` ktorych topic_id odpowiada id wyświetlanego tematu. Sprawdzasz wg. daty który jest najnowszy i wrzucasz go jako normalny widok tematu Edycja - wrzucasz nowy wpis do bazy danych, z ustawionym odpowiednim topic_id. Wszystko powinno działać dobrze, a w razie czego bez problemu by można scalić dwa posty wysłane prawie jednocześnie [dodaj opcję porównywania, jak w wikipedii] A i wydaje mi się, że te teksty będą mimo wszystko moderowany, wiec mozesz dodac do pomyslu einza pole default, w ktorym mod zatwierdza jeden z tych tektow. Może warto pomyśleć o czymś w stylu diff. Najłatwiej podejrzeć, jak to robi MediaWiki - podczas wysyłania formularza edycji dołączone są dwa pola ukryte: <input type='hidden' value="20061021184928" name="wpStarttime" /> <input type='hidden' value="20061020143924" name="wpEdittime" /> wpEdittime to data ostatniego revision tzn ostatniej wersji znanej podczas rozpoczęcia edycji artykułu w formacie rrrrmmddhhmmss (czas UTC), a wpStarttime to czas rozpoczęcia edycji, tzn. kliknięcia na przycisk edytuj. Jeżeli podczas zapisywania okaże się, że data wpEdittime nie jest datą najnowszej edycji to MediaWiki informuje nas o konflikcie zmian. W MW jest jeszcze kilka pól, np. wpEdittoken, ale to nie jest potrzebne, dopóki nie piszecie wikibota :) Spróbuj coś takiego zaimplementować. Chodziło mi o coś podobnego do wiki - nad artami panują użytkownicy i jest historia itp. I teraz problem polega na tym, że np. użytkownik jeden modyfikuje linię nr 1, a w między czasie (podczas edycji przez tego pierwszego) przychodzi sobie drugi "gostek" i wywala linię 1 a jej zawartość daje do innej lini. Co wtedy? PS. Nie mam(-y) zamiaru czegoś takiego pisać. Pytam z czystej ciekawości, gdyż to nie taka prosta sprawa. @dodek: Poinformuje nas i co dalej? ;) @dodek: Poinformuje nas i co dalej? ;) Pokazuje różnice i proponuje scalenie, na przykład. "Zaproponuje", czyli ten który później zakończy edycję będzie musiał coś kliknąć? Nie jestem zbyt biegły w Wiki, a nie mam za bardzo czasu, aby przebrnąć przez ich dokumentację... W MediaWiki to wygląda dalej tak, że informuje nas o konflikcie edycji, pokazuje dwa textarea, jeden z tekstem zapisanym a drugi z tekstem wysłanym przez nas i pokazuje diffy między nimi. Możemy wtedy przekleić fragmenty z dolnego pola do pola górnego i nacisnąć zapisz. Wielkie dzięki! To chyba (a właściwie na pewno) najlepsze rozwiązanie. PS. Co do tego przeklejania to w JS-ie, czy może jako pola formularza? A może ręcznie? |
|||
Sitedesign by AltusUmbrae. |