Red
Что гуглить
Maxim
Red
Окей Гугл блокировка) а он должен понять что я от него хочу)
Red
Evgeniy
кто то сейчас гит переизобретет в бд
Evgeniy
для работы редакторов
SarcasmIO
Evgeniy
Evgeniy
Evgeniy
когда открываешь материал получаешь эту колонку, как кто то меняет материал, проверяешь чтобы даты последнего редактирования совпадали
Maxim
В джумле у статей такое, постоянно кто то подвисает и статья закрыта
Evgeniy
если совпадают редактируешь и МЕНЯЕШЬ дату
Evgeniy
или ревизивию
SarcasmIO
неплохой выход
Evgeniy
если ревизии(даты последнего реадктирования) документов не совпадают
Evgeniy
до отображаешь diff между тем что хотят сохранить и тем что в бд
SarcasmIO
😉
Evgeniy
пусть резолвит конфликт в ручном режиме
Evgeniy
это самый простой и надежный способ
Maxim
Какие?
http://forum.codenet.ru/q42691/
Evgeniy
Evgeniy
человек открыл статью и вырубил комп по питанию
Evgeniy
вот тебе и dead lock
Evgeniy
который никто не разблокирует
Maxim
Там каменты
Maxim
Крон, время, разблокировка
Evgeniy
вообщем то я написал, как делают нормальные люди
Evgeniy
Evgeniy
я выше написал вполне норм вариант без костылей
Maxim
В редакторе дергать что то, чтобы продлить время
Evgeniy
Anonymous
RewriteRule ^index/$ index.php [QSA,L] правильно записано?
Maxim
Но если каждый раз время считать и решать давать доступ или нет, хорошо когда статей не много, а если Очень много, тут проще поле и на сервере разблокировать
Evgeniy
стандартный сбой по питанию и вот статья со статусом редактируется и надо костылять крон и тд
Evgeniy
(;¬_¬)
неплохой выход
отличный выход,но требует некоторой ловкости рук
Evgeniy
у статьи добавляешь колонку int revision
Evgeniy
когда человек получает статью он получает эту колонку revision
SarcasmIO
(;¬_¬)
ну либо ты учишься, раз влез в такую непростую херню, либо страдаешь
Evgeniy
каждый раз как сохраняешь статью revision++
Evgeniy
если revision в бд не совпадает с revision что прислал клиент значит кто то обновил
(;¬_¬)
и что? ты так это говоришь словно тут каждый второй сидит и слюни на клавиатуру пускает
Evgeniy
и надо показывать diff обычный
Evgeniy
и человек резволит конфликт
Evgeniy
как от резолвит он уже уже шлет на сохранению ту ревизию по которой делал diff
Evgeniy
если они опять не совпадают значит кто то еще обновил и надо снова дифф делать
Maxim
Ревизии и разруливать редакторами, это когда люди адекватные, а тут их много и это стадо, а стадо не читает, а давит кнопки
Evgeniy
и так пока ревизии не совпадут
Evgeniy
Evgeniy
потому что кто то ушел пить чай с открытой вкладкой
Evgeniy
или крики по офису всем выйти из редактирования главный редактор делает правки
Evgeniy
к сожалению ваши юз кейсы с реальностью не очень стыкуются
Anonymous
в mod_rewrite кто то шарит?
Anonymous
Подкиньте реальные примеры, где можно юзать трейты и интерфейсы
Evgeniy
трейты в тех местах где большинство юзает наследование
Evgeniy
интерфейсы ну например есть штука которая сохраняет текст и сохранять она может в фаил или разные бд
Evgeniy
соответственно для сохранения делаешь
` interface Driver {
public function save(string $content);
}
class FIle implements Driver {
public function __construct(string $fileName) {}
public function save(string $content) {
file_put_contents($this->fileName, $content);
}
}
Class Mysql implements Driver (
public function __construct(PDO $fileName) {}
public function save($content) {
$this->pdo // сохраняем в бд
}
}
Evgeniy
ну и юзать это в другом классе
Evgeniy
class Document {
public function__construct (Driver $driver){}
public function save(string $content){
$this->driver->save($content);
}
$document = new Document (new File('test')) ;// при желание можно передавать инстанс любого объекта что реализует Driver
$document->save('hello world'); // мы здесь не знаем куда сохраняем это документ да и нам пофиг что в бд (mysql, pgsql, mssql) что в mongo, redis, и тд что в файлики
Evgeniy
чтобы подключить новое хранилище, надо лишь реализовать интерфейс Driver и передавать его в те объекты где надо сохранять в него
Evgeniy
пример использования интерфейса
Dmitriy
Evgeniy
я нормальный пример привел с ревизиями, оно чуть поизящнее и по проще гита
Evgeniy
за счет централизации, которой нету в git
Maxim
Ревизии есть в ONLYOFFICE, но там есть два режима блокировка и совместное редактирование)
Maxim
А ревизии используются потом для дифов по версии документов, что и когдатдобавляли
Anonymous
Спасибо
Evgeniy
Evgeniy
вот например есть документ 1
Evgeniy
и есть 2 пользователя ты и я
Anonymous
А в гугол как реализованно?
Там же вроде есть совместное редактирование
Anonymous
Dmitriy
Evgeniy
Dmitriy
SCDs
Dmitriy
Slowly changing dimension
Anonymous
Почему просто не лочить ресурс, а потом убивать сессию, если чувак не редачил что-то более эн минут
Evgeniy
а тут речь о тексте