|
|
|
| Может кто-то знает, как решить такую задачу, подскажите пожалуйста.
На сайте есть несколько админов, которые могут добавлять и редактировать статьи в базе MySQL. Редактор статей сделан очень просто: из базы вытаскиваем SELECTом в Веб-форму, там редактируем и по нажатии кнопки сохраняем обратно в базу UPDATE. Столкнулся с тем, что когда несколько человек одновременно правят одну статью и потом сохраняют ее, то в базе сохранятся только изменения последнего сохранявшего, т.к. он себе редактирует данные в браузере и даже не подозревает, что кто-то там уже параллельно редактирует и сохраняет в базу.
Я решил к статьям добавить дополнительное поле, куда писать запрет на редактирование, если статью уже кто-то начал редактировать и снимать его после завершения редактирования. Но столкнулся с еще одной проблемой. Ведь человек который начал редактировать статью может не окончив закрыть браузер и уехать в отпуск, а в таблице так останется запрет на редактирование.
Подскажите, как можно отследить редактирует ли еще человек статью, или он уже спит на клавиатуре :). Можно ли узнать к примеру, что от пользователя нет никакой реакции за последние 2 часа? | |
|
|
|
|
|
|
|
для: nas2net
(14.06.2009 в 22:21)
| | Лучше заведите поле с датой последнего изменения и передавайте его в форму, если дата из формы не совпадает с фактической датой в таблице - кто-то успел уже изменить таблицу - запрещайте вносить изменения. Такой подход часто используется в Web, где не всегда возможно применить транзакции в случае, если над текстом работает несколько человек. Например, схожий механизм используется в Википедии. В этом случае у вас редакторы будут на равных, но предпочтение будет отдаваться тому, кто раньше успел внести изменения. | |
|
|
|
|
|
|
|
для: cheops
(15.06.2009 в 02:27)
| | Идея неплохая. Скажите, а как в подобных ситуациях быть с автором, который получает сообщение, что он не может сохранить свои труды? Куда ему девать свои правки? Может сохранять копию редактируемой статьи хотя бы.
Как это реализовано в той же Википедии, если вы с ней знакомы (я не очень)? | |
|
|
|
|
|
|
|
для: nas2net
(15.06.2009 в 12:47)
| | Набранный текст выводится (он не пропадает) и редактор может его сохранить или внести правки повторно.
Обычно правки не очень большие, кроме того в Википедии и многих системах редактирования вы имеете возможность редактировать не весь текст, а лишь выбранный параграф - вероятность того, что один и тот же параграф редактируют несколько человек, меньше, чем вероятность того, что редактируется вся статья. В любом случае человек предупрежден, что его изменения не внесены и ему предоставляется решение, как тут лучше поступить (человек в любом случае примет более правильное решение, чем машина). | |
|
|
|
|
|
|
|
для: nas2net
(14.06.2009 в 22:21)
| | >Можно ли узнать к примеру, что от пользователя нет никакой реакции за последние 2 часа?
Если Вы фиксируете время последнего проявления пользователя на сервере, то как бы сказать, непонятно в чем сложность.
Если не фиксируете тогда, конечно, нельзя. Но, как бы сказать, что мешает-то?
ему даже штраф можно выставить за документ вовремя не возвращенный в базу. | |
|
|
|
|
|
|
|
для: Trianon
(15.06.2009 в 10:22)
| | Ну сложность для меня как раз в том, что во время редактирования автор не обращается к серверу (вроде бы), а ковыряется уже у себя в редакторе (FCK-editor), пока не закончит редактировать (или не закончит никогда). | |
|
|
|
|
|
|
|
для: nas2net
(15.06.2009 в 12:53)
| | Тогда это вопрос для соседнего раздела - - HTML-JS-CSS
Сам FCKeditor никаких изменений в БД не вносит. | |
|
|
|
|
|
|
|
для: nas2net
(15.06.2009 в 12:53)
| | Можно AJAX дергать сервер и проверять нет ли изменений - если изменения поступили, выводить в окно браузера: Дорогой товарищ, слишком долго копаетесь, кто-то уже изменил статью, вы конечно и дальше можете работать над этим вариантом, но пока вы не загрузите новые данные - от вас правок приниматься не будет. | |
|
|
|
|
|
|
|
для: cheops
(15.06.2009 в 14:42)
| | cheops, спасибо за разъяснения и чувство юмора! Думаю в моем случае подойдет комбинированный вариант: при выдаче статьи на редактирование ставить на нее флаг "занято" где-то на час, а если автор за час не догадался ни разу сохранить, тогда флаг меняем на "доступно для редактирования" и пусть "принимает правильное решение", если кто-то успеет поредактировать и сохраниться раньше него. Ну и конечно повесить большими красными буквами предупреждение при выдаче на редактирование, что мол у вас есть 1 час, чтобы хотя бы раз сохраниться.
Для меня такой вариант по силам, с Ajax буду еще долго разбираться. | |
|
|
|