«Лента друзей»: разрабатываем компонент для «1С-Битрикс: Социальная сеть»

Прошло время, когда социальные сети считались бесполезной для бизнеса игрушкой. Все больше и больше компаний осознают ценность данного инструмента. Появился даже специальный термин — Enterprise 2.0, обозначающий комплекс методов и подходов, позволяющих применить технологии Web 2.0 для решения типичных корпоративных задач. Рынок Web-разработок не мог не отреагировать на такие тенденции и сегодня сложно найти систему управления сайтом (CMS), которая не предоставляла бы возможность создавать социальные сети.

Компания «1С-Битрикс» в конце 2008 г. также выпустила модуль Социальные сети для своего пакета «1С-Битрикс: Управление сайтом». Он позволяет организовывать сообщества (группы), устанавливать «дружеские отношения», вести черные списки, распределять права доступа. Пользователь или группа получают развитый набор служб: блоги, фотогалереи с массовой загрузкой фотографий, рейтингами и обсуждениями, форумы, вести онлайн-переписку и др. Это весьма мощная разработка, более подробный обзор которой можно найти в PC Magazine/RE 1/2009/ (Ознакомиться с продуктом вживую)

В этом же обзоре речь пойдет о том, чего недостает в модуле Социальная сеть — о т. н. «ленте друзей». С точки зрения архитектуры и принципов организации данных, социальный модуль БУС похож на популярную сеть FaceBook (в России более известен ее клон, «ВКонтакте»). Однако в русскоязычном сегменте Сети не меньшей популярностью пользуется служба «Живой Журнал», интерфейс которой отличается от интерфейсов FaceBook и его клонов (порой радикально). Среди прочих отличий, в «Живом Журнале» имеется модуль «Лента друзей» (чаще «френдлента», от соответствующего англицизма).

Организация материала в виде «Лента друзей» имеет ряд преимуществ. Она удобна для быстрого просмотра за чашкой утреннего кофе (или вечернего пива) новых поступлений в дружественные дневники. В БУС есть подсистема «лог обновлений», но это не совсем удачная замена. Слишком много несущественной информации, слишком много ссылок, по которым приходится лишний раз кликать. Вроде бы мелочи, но ведь именно мелочи определяют впечатления пользователя от сайта. В общем, недоработка налицо и мы постараемся ее исправить.

Итак, постановка задачи: необходим компонент, имитирующий в БУС «Ленту друзей». «Лента друзей» конкретного пользователя как минимум должна аккумулировать новые записи из блогов друзей (полностью или в виде анонсов) и блогов групп, где состоит владелец ленты. В «Ленте друзей» групп должны собираться новые записи из блогов ее участников. И кстати, следует отметить существенное отличие блогов «Битрикс» от блогов «Живого журнала» – в «Битрикс» пользователь может публиковать сообщения не только в своем блоге и блогах групп, в которых он состоит, но и в других блогах, если владелец блога разрешил это делать.

Сначала разберемся с внутренними объектами (или лучше сказать, сущностями) социальной сети «пользователь» и «группа»: какие свойства они имеют и как эти свойства будут влиять на результат. Сразу оговоримся, что в данном обзоре будут затронуты только вопросы, касающиеся функциональности «Ленты друзей» для блогов, форумы, фотогалереи и т. д. мы во внимание не принимаем (принципы останутся теми же, а объем статьи увеличится существенно). Отметим, что для материал излагается в предположении, что читатель знаком с основами разработки на PHP и с API системы «1С-Битрикс: управление сайтом».

Пользователь

Из свойств объекта пользователя нас интересуют настройки, которые можно задать на персональной странице социальной сети в формах настроек приватности и прав доступа к блогам.

Среди настроек приватности для нашей задачи важны два поля: «кто может смотреть друзей» и «кто может смотреть мои группы». Эти поля влияют на включение в ленту записей из блогов друзей и записей из блогов групп, в которых состоит владелец. Причем, записи из блогов друзей или групп должны включаться только в том случае, если право на просмотр имеют все пользователи. Иными словами, если Иван зайдет на страницу «Ленты друзей» Петра, а Петр разрешает просмотр своих групп только друзьям, то Иван не должен видеть читать записи из блогов групп Петра — даже если между ними установлены дружеские связи (в соответствующем интерфейсе модуля «Социальная сеть»).

В настройках блогов нас интересует параметр «кто может просматривать сообщения». От его значения параметра зависит, будут ли записи блога включены в ленту друзей пользователя и групп, в которых он состоит, причем они будут включаться только в том случае, если права на просмотр будут разрешены всем пользователям. Например, если Петр разрешает читать записи своего блога только друзьям и друзьям друзей, то они не попадут ни в одну из лент.

В случае, если блоги вообще отключены, следует автоматически исключить все записи, оставленные ранее в блоге пользователя из всех лент всех друзей.

Группа

Аналогично, из свойств групп нас интересуют настройки, которые будут заданы в формах редактирования группы и настроек блогов группы.

Параметр «группа видима всем посетителям» должен учитываться при включении записей блога группы в «ленты» ее участников. В настройках блогов нас интересует параметр «кто может просматривать сообщения». От его значения зависит, будут ли записи блога включены в ленты участников группы, причем они будут включаться только в том случае, если просмотр будет разрешен всем пользователям.

Итак, с сущностями и объектами разобрались, теперь идем дальше.