if(intval($arItem['OWNER_ID']) <= 0) {

      $id_ = intval($arItem['ID']);

      $arBlogID[$id_] = $id_;

    }

  }

  unset($rsItems, $id_, $arOrderBlog, $arGroupByBlog,

    $arNavigationBlog, $arSelectFieldsBlog);

}

Здесь все вполне прозрачно, комментарии не требуются. И наконец, выбираем записи из блогов, которые и станут основой для формирования конечного результата – «Ленты друзей» (листинг 9).

Листинг 9

if(!empty($arBlogID)) {

  $arFilter = array(

    'BLOG_ACTIVE' => 'Y',

    'BLOG_GROUP_SITE_ID' => SITE_ID,

    'PUBLISH_STATUS' => BLOG_PUBLISH_STATUS_PUBLISH,

    'BLOG_ID' => array_keys($arBlogID),

    'ACTIVE' => 'Y'

  );

  unset($arBlogID);

  if($arParams['MAX_DAYS_COUNT'] > 0) {

    // задан промежуток времени для выборки сообщений 86400 —

    // кэшируем на сутки

    $from = intval(time() – $arParams['MAX_DAYS_COUNT']*86400);

    $arFilter['>=DATE_PUBLISH'] = ConvertTimeStamp($from,

      'FULL');

  }

  $arGroupBy = false;

  $arSelectFields = array(

    'ID',

    'BLOG_ID',

    'TITLE',

    'DATE_PUBLISH',

    'AUTHOR_ID',

    'DETAIL_TEXT',

    'BLOG_ACTIVE',

    'BLOG_URL',

    'BLOG_GROUP_ID',

    'BLOG_GROUP_SITE_ID',

    'AUTHOR_LOGIN',

    'AUTHOR_NAME',

    'AUTHOR_LAST_NAME',

    'BLOG_USER_ALIAS',

    'BLOG_OWNER_ID',

    'BLOG_USER_AVATAR',

    'NUM_COMMENTS',

    'VIEWS',

    'ATTACH_IMG',

    'BLOG_SOCNET_GROUP_ID'

  );

  $rsItems = CBlogPost::GetList($arOrder, $arFilter,

    $arGroupBy, $arNavParams, $arSelectFields);

  $rsItems->bShowAll = $arParams['PAGER_SHOW_ALL'];

  //создаем объект парсера сообщений блогов

  $obParser = new blogTextParser(false,

    $arParams['PATH_TO_SMILE']);

  while($arItem = $rsItems->GetNext()) {

    // здесь код разбора записи блога – ссылки, аватары,

    // картинки, выполняем парсинг текста сообщения и т. д.

  }

  unset($obParser, $arOrder, $arGroupBy, $arSelectFields);

  unset($arEntityGroupsID);

}

На этом содержательная часть работы заканчивается. Далее подключаем шаблон для оформления полученных данных HTML-кодом, и лента сообщений «как в ЖЖ» готова.

Архитектура «Ленты друзей»: проблемы и решения

Легко заметить, что данный компонент не столь совершенен, каким мог бы быть. Скажем, напрашивается вопрос: а нельзя ли в «Ленте друзей» учитывать структуру связей пользователя с группами и другими пользователями социальной сети? Теоретически можно, на практике нагрузка на сервер возрастет в разы (если не на порядки), причем кэшировать что-либо будет невозможно. Причина – необходимость учитывать огромное количество комбинаций настроек, слишком много факторов будут определять итоговый результат.

Посмотрим, как будет влиять на содержимое «Ленты друзей» сложная конфигурация прав доступа. Предположим, что в профиле пользователя имеются настройки:

• «просматривать список друзей могут только друзья» – это означает, что прежде чем включать записи, опубликованные друзьями владельца ленты в блогах социальной сети, нужно выяснить, не является ли «текущий пользователь» («текущий пользователь» – пользователь, который в данный момент смотрит ленту) другом владельца ленты;

• «просматривать список друзей могут только друзья и друзья друзей» – прежде чем включать записи, опубликованные друзьями владельца ленты, нам нужно выяснить, не является ли текущий пользователь другом или другом друга владельца ленты;

• «просматривать список друзей могут все пользователи» – включаем записи, опубликованные друзьями владельца ленты в блогах социальной сети;

• «полный запрет на просмотр друзей» – не включаем записи, опубликованные друзьями владельца ленты в блогах социальной сети.

Настройки доступа к блогам пользователя:

• «просматривать сообщения могут все пользователи» – включаем записи блога в какую-либо ленту;

• «просматривать сообщения могут только друзья пользователя» – прежде чем включить записи блога в какую-либо ленту, необходимо проверить, не является ли текущий пользователь другом владельца блога;

• «просматривать сообщения могут только друзья и друзья друзей пользователя» – прежде чем включить записи блога в какую-либо ленту, необходимо проверить, не является ли текущий пользователь другом или другом друга владельца блога;

• «просматривать сообщения может только владелец блога» – прежде чем включить записи блога в какую-либо ленту, необходимо проверить, не является ли текущий пользователь владельцем этого блога.

Настройки приватности группы:

• «группа видима всем посетителям» – включаем записи, опубликованные в блоге группы без проверки членства текущего пользователя в данной группе;

• «группа не видима всем посетителям» – прежде чем включить записи, опубликованные в блоге группы,

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату