Правильно в том то и суть, если есть 2 модуля с одинаковым типом топика но разной логикой работы(начиная от разного форматирования елементов, заканчивая ентерпритацией служебных тэгов и т.д) и вы сначала поставили один, наполнили его чем-то, потом удалили (не удаляя посты) и поставили другой, то при работе с теми предыдущими постами он будет работать неправильно
От этой маловероятной ситуации не спасёт отдельная таблица для типов топиков.
Неплохо было бы добавить правило относительно времени пребывания на сайте с момента регистрации, чтобы можно было вывести, к примеру, как на хабре «старожил», если пользователь столько-то лет с нами. На дром.ру — тоже медальки за время дают, 1 год — бронзовая медаль, 3 года — серебряная медаль, 5 лет — золотая медаль, 7 лет — георгиевский крест. :)
Тебе кажется, что это правильным, когда меняющйся набор загоняется в ENUM
Перечисление типов топиков не меняется в движке. Это мы, те, кому нужны новые типы топиков, его меняем. Я не вижу смысла создавать отдельную таблицу в БД для этого перечисления, ибо меняется оно в одностороннем порядке — только добавляются новые элементы. Ведь если ты создал новый тип топика, то будешь им пользоваться, а раз будешь пользоваться — всё, удалять тип нельзя. Млм, что архитектурное решение верно по части enum.
-- Добавляет новый тип топика 'photoset', этот запрос автоматически выполняется через инсталлятор при конвертации БД (для сохранения ваших кастомных типов топиков)
-- ALTER TABLE `prefix_topic` CHANGE topic_type topic_type ENUM('topic','link','question','photoset') NOT NULL DEFAULT 'topic';
--
Если оставить структуру такой как сейчас то сомневаюсь что можно будет установить эти 2 плагина одновременно
Список ENUM в MySQL может содержать максимум 65535 различных величин. Так что установятся без проблем и ещё вагон других.
а если и получиться, то удалить их мы уже не сможем, так как при удалении они будут менять это поле в стандартный вид и будут затираться изминения другого модуля.
При удалении врядли этот список меняет в исходное состояние хоть один существующий плагин, ибо незачем — ведь, если пользовались плагином, то и топики с таким типом появились. Ну а затираться само по себе ничего не будет, это же база данных, она чудес не творит.
Единственный нюанс с этим полем может возникнуть при обновлении структуры таблицы топиков, если таковая будет иметь место в будущих релизах Livestreet. Но, я думаю, ort сделает всё красиво, как всегда. Да и сами при обновлении можете код update.sql проверить.
Сделал class PluginTest_ActionTest extends ActionTopic, всё проверил — работает. Перезалил.
В общем и целом, меня лично каркас устраивает. Пошёл делать основной функционал…
Спасибо!
Ну да, можно было так class PluginTest_ActionTest extends ActionPlugin, но тогда пришлось бы ActionTopic целиком забирать в PluginTest. А зачем, к примеру, трогать EventDelete, если он одинаков для любых типов топиков. Я мог неправильно что-то сделать, научите.
От этой маловероятной ситуации не спасёт отдельная таблица для типов топиков.
Если меняем один модуль на другой, в БД ничего менять не нужно. Вы же меняете логику работы, зачем же менять «event» на «event» в базе? :)
Один пишет:
Другой:
Третий:
И никаких проблем!
Так что никаких проблем с текущим положением дел.
Список ENUM в MySQL может содержать максимум 65535 различных величин. Так что установятся без проблем и ещё вагон других.
При удалении врядли этот список меняет в исходное состояние хоть один существующий плагин, ибо незачем — ведь, если пользовались плагином, то и топики с таким типом появились. Ну а затираться само по себе ничего не будет, это же база данных, она чудес не творит.
Единственный нюанс с этим полем может возникнуть при обновлении структуры таблицы топиков, если таковая будет иметь место в будущих релизах Livestreet. Но, я думаю, ort сделает всё красиво, как всегда. Да и сами при обновлении можете код update.sql проверить.
В общем и целом, меня лично каркас устраивает. Пошёл делать основной функционал…
Спасибо!
Оно?