ďťż

[PHP]{MySQL]Edycja art-ów przez użytkowników Coś na kształt Wiki

       

Podstrony


telcocafe

Witam!
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?

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.