Создание единой системы модерации, удобства для модераторов и пользователей, черновики
А может при включении версионности в типе контента делать вторую таблицу, типа cms_con_articles_versions с неуникальными id?
Понятно, но всё же я оставлю здесь свои мысли, так сказать на будущее))на данный момент я не рассматриваю вообще реализацию подобного функционала.
В той же, ниже всё объясню.копию сделать не сложно, только где ее хранить? В той же таблице? В новой?
Представляю, максимум в два раза, и то только при самых не благоприятных обстоятельствах, когда каждый матереиал, окажется на редактировании, что на практике я думаю, ни когда не будет.Представляете как разрастется база при росте версий?
Для этого нужно ввести в типы контента, два служебных поля: поле — "ID редактируемой записи" и поле типа флаг — "Копия".
Объясню на примере свою мысль: допустим тип контента статьи, в нём есть всего две записи с ID-1 и ID-2, прошедшие модерацию, давно проиндексированные поисковиками и т.д. и т.п., пользователь решил отредактировать запись с ID-1, внёс изменения, и нажал на кнопку "Сохранить", сейчас происходит что? Происходит запись изменённых данных, в ту же запись, а нужно, чтоб записывалось в пустую строку, или в новую строку таблицы. Что такое пустая строка, я объясню ниже. Если нет пустых строк, как в нашем случае, то создаём новую запись с ID-3, в которую по мимо всех полей, записываем в новые служебные поля, ID редактируемой записи и ставим "true" в поле "Копия". Эта новая запись и уходит на модерацию. Модератор проверил и даёт добро на публикацию, т.е. нажимает кнопку "Опубликовать", после чего значения всех полей в записи с ID-2, перезаписываем данными из записи с ID-3, и одновременно, очищаем все поля в записи в ID-3, кроме поля "ID" и поля "Копия".
Далее создаём ещё одну новую запись, у неё будет ID-4, модерируем и публикуем. Теперь представим, что пользователь решил изменить запись с ID-2, редактирует и нажимает на кнопку "Сохранить", мы ищем пустую запись, в котором поле "Копия" = "true" и поле "ID редактируемой записи" = "пусто", записываем туда данные полей и отредактированной записи с ID-2 и отправляем эту запись на модерацию, после одобрения модератором, происходит то же, что и с редактируемой записью с ID-1.
Да, строк в таблице станет больше, но те строки, в которых поле "Копия" = "true", так сказать многоразовые, и будут постоянно в работе, т.е. размер базы, расти не будет, вернее будет, но не в два раза, ибо представить ситуацию, когда все записи одновременно уйдут на модерацию, для меня сложно.
Повторюсь — готов еще финансово подсобить ради такого дела
При изменении уже опубликованного материала, если пользователь вносит изменения, материал продолжает публиковаться, а на модерацию уходит измененный вариант. Если изменения не приняты, материал продолжает публиковаться без изменений, а если приняты — в новой редакции.
Обычно, если материал чем-то не подходит, то его в этой версии лучше снять с публикации до момента, пока всё будет переделано правильно. Если оставить публикацию, то автор может просто не захотеть вносить правки. И поисковики успеют проиндексировать не лучший вариант страницы — это плохо.При изменении уже опубликованного материала, если пользователь вносит изменения, материал продолжает публиковаться, а на модерацию уходит измененный вариант.
Версионность может быть полезна для другого. Например, для наглядного показа модератору сделанных изменений. Или как возможность отката к первоначальной версии в случае ошибок при редактировании публикации пользователем. В-принципе, это полезный функционал. Но сделать его — очень трудоёмко. И БД увеличится очень сильно даже при хранении всего двух версий каждой публикации.
Речь идет несколько об иной ситуации, когда пользователь сам решил что то отредактировать! В этом случае публикация должна сама сниматься с опубликованных и ждать решения модератора, если он подтверждает изменения тогда публикуется отредактированная статья, а если нет, тогда старый вариант! Если автор не согласен, тогда статья снимается с сайта полностью.Обычно, если материал чем-то не подходит, то его в этой версии лучше снять с публикации до момента
Это само собой, иначе откуда будет известно, что было до редактирования.для наглядного показа модератору сделанных изменений. Или как возможность отката к первоначальной версии в случае ошибок при редактировании публикации пользователем.
Обычно, если материал чем-то не подходит, то его в этой версии лучше снять с публикации до момента, пока всё будет переделано правильно.
Все подходит. Просто некоторый контент необходимо регулярно обновлять.
И БД увеличится очень сильно даже при хранении всего двух версий каждой публикации.
Очень сильно? При хранении всего двух версий каждой публикации БД должна увеличиться максимум в 2 раза. И что их этого? Пусть будет настройка, сколько ревизий необходимо хранить. Можно хранить только одну ревизию и тогда размер БД увеличится на сущие копейки (вряд ли все записи разом будут редактироваться). А после одобрения перезаписывать начальную запись.
Вот реально, только в Drupal есть адекватно работающий механизм ревизий и модерации, но к сожалению он мне не подходит по другой причине.
В Instant же (социально-коллективной CMS) максимально приблизились к идеальной реализации, но почему-то решили не добавлять версионность (пусть отключаемую, если она кому-то не нужна).
Думаю, что не "решили", а просто не в приоритете выделять много времени на такой сложный функционал, есть и более востребованные функции. Посмотрим, сколько наберётся желающих иметь версионность, и подождём ответа Fuze.почему-то решили не добавлять версионность