Функционал социальной сети
Всем привет. Помниться в году этак 2013 Николай Ланец интегрировал движок LiveStreet в MODX, тогда еще были потуги внедрить в MODX шаблонизатор Smarty и вроде даже успешно. Мне всегда хотелось для MODX что-то родное в плане социального функционала. А чем MODX хуже WordPress, DLE или Joomla (про фреймворки я молчу, там можно творить что угодно)?!
Недавно встала задача на одном сайте сделать функционал добавления в друзья, списки друзей, подписчики.
Так вот, ближе к сути. Я планирую использовать несколько готовых решений, а это:
pdoTools (pdoUsers) — вывод списков пользователей
VirtualPage — страницы пользователей
AjaxForm — для отправки форм с сайта
FormIt — отсылка писем о добавлении в друзья
Сама база будет выглядеть примерно так:
id — идентификатор записи
cuser — текущий пользователь
auser — добавленый пользователь
friend — маркер подтверждения да/нет
follower — маркер отправки заявки в подписки да/нет
ignore — отказ от заявки да/нет
createdon — дата добавления
editedon — дата изменения
По самому функционалу, я планирую сделать кнопку добавления в друзья, у которой будет 3 режима, а работать она будет на примере кнопки в vk.com через select.
Буду сразу делать на modExtra.
Теперь вопрос. Может кто-нибудь подсказать как лучше всего таблицу спроектировать? Не будет ли эта структура не удобной?
Недавно встала задача на одном сайте сделать функционал добавления в друзья, списки друзей, подписчики.
Так вот, ближе к сути. Я планирую использовать несколько готовых решений, а это:
pdoTools (pdoUsers) — вывод списков пользователей
VirtualPage — страницы пользователей
AjaxForm — для отправки форм с сайта
FormIt — отсылка писем о добавлении в друзья
Сама база будет выглядеть примерно так:
id — идентификатор записи
cuser — текущий пользователь
auser — добавленый пользователь
friend — маркер подтверждения да/нет
follower — маркер отправки заявки в подписки да/нет
ignore — отказ от заявки да/нет
createdon — дата добавления
editedon — дата изменения
По самому функционалу, я планирую сделать кнопку добавления в друзья, у которой будет 3 режима, а работать она будет на примере кнопки в vk.com через select.
Буду сразу делать на modExtra.
Теперь вопрос. Может кто-нибудь подсказать как лучше всего таблицу спроектировать? Не будет ли эта структура не удобной?
Комментарии: 4
Мне кажется, часть полей не нужна. Возмём, например, такую структуру:
Если я (id = 7) добавляю в друзья Андрея (id = 33), то в базе создаётся запись
Когда Андрей увидит заявку и нажмёт «Отказать», в базе отмечаем hidden = 1 и больше Андрею эту заявку не показываем.
Если Андрей принимает заявку или после отказа нажмёт «Добавить в друзья», создаём запись
При такой схеме легко джойнами прицепить эти записи и определить — если есть запись, где я в поле cuser, но нет записи, где я в поле auser, значит, я просто подписчик. Если вторая запись есть, значит мы друзья.
Когда Андрей удалит меня из друзей, его запись удаляется и я становлюсь подписчиком.
id
cuser
auser
hidden
createdon
editedon
Если я (id = 7) добавляю в друзья Андрея (id = 33), то в базе создаётся запись
cuser = 7
auser = 33
hidden = 0
Когда Андрей увидит заявку и нажмёт «Отказать», в базе отмечаем hidden = 1 и больше Андрею эту заявку не показываем.
Если Андрей принимает заявку или после отказа нажмёт «Добавить в друзья», создаём запись
cuser = 33
auser = 7
hidden = 1 (так как Илья уже добавил Андрея)
При такой схеме легко джойнами прицепить эти записи и определить — если есть запись, где я в поле cuser, но нет записи, где я в поле auser, значит, я просто подписчик. Если вторая запись есть, значит мы друзья.
Когда Андрей удалит меня из друзей, его запись удаляется и я становлюсь подписчиком.
Илья, а не подскажешь как лучше всего сделать уведомления в реальном времени?
Зависит от возможностей сервера. Если есть возможность, лучше использовать сокеты. А если нет — можно просто на JS раз в секунду посылать AJAX-запрос и проверять, есть ли новые уведомления.
Я в Laravel вот этот сервис подрубал pusher.com/ для сообщений оставляемых в реальном времени. Попробую его. У них вроде есть какие-то наработки, которые можно через composer загрузить.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.