Функционал социальной сети

Всем привет. Помниться в году этак 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.

Теперь вопрос. Может кто-нибудь подсказать как лучше всего таблицу спроектировать? Не будет ли эта структура не удобной?
SEQUEL.ONE
12 апреля 2019, 00:07
modx.pro
718
0

Комментарии: 4

Илья Уткин
12 апреля 2019, 07:33
+2
Мне кажется, часть полей не нужна. Возмём, например, такую структуру:
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, значит, я просто подписчик. Если вторая запись есть, значит мы друзья.

Когда Андрей удалит меня из друзей, его запись удаляется и я становлюсь подписчиком.
    SEQUEL.ONE
    12 апреля 2019, 13:43
    0
    Илья, а не подскажешь как лучше всего сделать уведомления в реальном времени?
      Илья Уткин
      12 апреля 2019, 13:46
      0
      Зависит от возможностей сервера. Если есть возможность, лучше использовать сокеты. А если нет — можно просто на JS раз в секунду посылать AJAX-запрос и проверять, есть ли новые уведомления.
        SEQUEL.ONE
        12 апреля 2019, 23:57
        0
        Я в Laravel вот этот сервис подрубал pusher.com/ для сообщений оставляемых в реальном времени. Попробую его. У них вроде есть какие-то наработки, которые можно через composer загрузить.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4