DEV: Некоторые работы на сайте (страницы)
Напишу, что делаю, т.к. это связано с изменениями на сайте и возможно некоторыми простоями в работе. Понятно, что сперва это будет опробовано локально, но всё равно. Случиться может всякое :)
Смысл заключается в том, чтобы добавить страницы в функционал сайта. Страницы, которые мы можем использовать далее, глобально, по всему сайту. Страницы, которые смогут добавлять и участники.
Пример: сейчас на сайте есть раздел info и он выполнен жестко, с файлами Markdown. Есть контроллер InfoController
, где собственно всё и происходит.
Это необходимо заменить на страницы.
Ещё у нас есть Блоги, и хотелось бы сделать, чтобы и владельцы блогов могли добавлять страницы к своим блогам.
Ещё у нас есть темы…
Обычно, такой функционал реализуют добавляя таблицу page
, таблицу связи с тегами и т.д. Однако, есть более гибкое решение. По разному оно работает, на разных сайтах. Давайте посмотрим, например, форум Discourse и посмотрим, что там можно сделать с постами (это часть возможностей).
Вот какая высокая картинка получилась, но это ещё не всё возможности, что можно сделать с постами. Но нас интересует пункт: Превратить в личное сообщение
Т.е. любой пост мы можем сделать личным сообщением, а раз личные сообщения частные, это частное пространство, то мы можем пригласить туда людей.
Пример. Я переведу этот пост в личные сообщения. Он пропадет с ленты (будет как черновик), но в отличие от черновика, с которым я могу работать один, в личных сообщениях я могу позвать еще кого-то, присоединить к беседе. Кто присоединится, открою доступ на редактирование поста.
Вместе поработаем над постом, обсудим его, подправим, и когда пост будет готов, верну его назад, в посты в ленту, в темы, куда угодно. И пост появится ленте.
Суть в том, что у нас есть посты и мы можем перемещать эти посты куда угодно. Мы можем создавать сразу посты, а сможем создавать и страниц при условии, что пользователь создал блог.
Страницы всегда к чем-то привязаны, они не болтаются в воздухе.
Теперь про фасеты. Есть Темы и Блоги. Это 2 ветки дерева. Создаем 3 ветку — Разделы. И некоторые страницы будем привязывать к разделу. Так мы заменим раздел info.
Мы не добавим 2 таблицы, мы будем использовать то, что есть. Добавим еще одно поле в базу данных, в саму таблицу постов.
Фасеты, грани, занимаются созданием пространств (разделы, темы, блоги…), где что-то находится. Темы, Блоги, категории в каталоге сайтов и программ, разделы (например один будет содержать статьи: помощь, о нас и т.д.).
Плюс к этому посты могут быть ещё и страницами. Страницы будут выглядеть совсем по другому.
Понятно, что раз мы ничего не меняем особо, то у страниц есть всё, что есть и у постов, например: голосование, подписка, комментарии, фото… и т.д. Это временно для страниц пока уберу.
Мы добавим всего одно поле, однако это действие потянет за собой огромные изменения.
Вот, что тут будет происходить в ближайшее время, мы будем добавлять страницы.
P.S. Кстати, вчера в течение дня сделал классический вариант (с добавлением таблиц page, связь…). Посмотрел. Это не то. Мы имеем очень гибкую систему из фасетов и можем их отлично использовать.
Просто пока есть небольшие сложности в мышлении. Перестать думать про предметы, как они отдельные части (таблица post и таблица page, категории, темы, разделы), а рассматривать всё с позиции деревьев, веток, с разными свойствами.
Вот картинка:
ист. Tesseract, Википедия
Тут есть то, что можно использовать.
Грани появляются, исчезают, приобретают разные свойства в зависимости от условий и наших нужд.
Одновременно, раз работа будет проделана по добавлению страниц к блогам (собственно теперь страницы могут быть добавлены к любой грани), есть возможность и слегка затронуть Блоги. Сейчас они в общем дизайне. Можно сделать их независимыми и самодостаточными, вплоть, на поддомене со своим дизайном и т.д. И первый шаг к этому, уйти от жестких шаблонов, шапки, например, которая идет через все страницы. Сделать, шапку от условий…
Так мы сможем формировать шапку сайта в каждом Блоге индивидуально (да везде и не только шапку)…
Тогда и название post всего в системы необходимо будет менять, раз post становятся чем-то большим чем просто посты? Название таблиц, полей, контроллеры и модели. Правильно?
Да, но это позже. У нас будет всего несколько вещей, если смотреть по основным таблицам: Участники, Фасеты (темы, разделы, группы…), Предметы (программы, сайты…), Контент (посты, страницы…), Комментарии. Всё достаточно просто будет, но очень гибко. Я бы конечно сейчас уже сделал и это чуток по другому, пока приемлемо. Будет миграция, можно будет изменить некоторые вещи.