Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Вывод новостей

00 голосов
3
У меня есть например 3 группы новостей. (Прайс-лист, Новинки нагалога, Новости сайта).
Они все находятся как категории в одном инфоблоке Новости.
Есть 3 группы пользователей.
2. Неавторизованные
3. Дилеры
4. Партнеры
Вопрос. Можно ли нстандартными настройками компонента 2.0 "Новости" или других стандартных компонентов на страницу ввв.сайт.ру/news/ выводить в зависимости от авторизации пользователей различные категории новостей?
например Неавторизованным - только Новости сайта
а Партнерам - Новости сайта и Новинки каталога?
Если Можно стандартными средствами, то киньте пожалуйста ссылку где почитать про это, если стандартными нельзя, подскажите пожалуйста условия вывода колонок новостей (или ленты новостей) по условиям этой задачи.
Спасибо
спросил 11 Фев, 14 от Holiu (600 баллов)

3 Ответы

00 голосов
Думаю, стандартными средствами (настройками) не обойтись.
Нужно модифицировать код компоненты news.list
А именно, при формировании $arFilter определять группу пользователя и, соответственно, добавлять параметр в фильтр
$arFilter['SECTION_ID'] = 'Код секции ИБ с нужными новостями'

Уточните пожалуйста один момент:
Цитата
У меня есть например 3 группы новостей. (Прайс-лист, Новинки нагалога, Новости сайта).
Они все находятся как категории в одном инфоблоке Новости.

Если они действительно лежать в одном ИБ, то решение такое, а если у вас 3 ИБ одного типа, то можно немного проще :)
ответил 29 Июнь, 14 от Almarea (3,760 баллов)
00 голосов
Цитата
YakDm пишет:
Если они действительно лежать в одном ИБ, то решение такое, а если у вас 3 ИБ одного типа, то можно немного проще

попроще, это как, опишите плиз подребнее :D
потому что если так проще, я лучше так сделаю


и еще, если можно поподробнее про определение группы пользователя при формировании $arFilter, было бы супер если бы кусочек примера изменения news.list выложили ;)
ответил 29 Окт, 14 от Holiu (600 баллов)
00 голосов
Если делать 3 ИБ, то можно уйти от модификации кода компоненты.
Код
global $USER;
$arGroups = $USER->GetUserGroupArray();

этот код возвращает массив со списком групп, к которым принадлежит пользователь.
В моем случае я получил:
Код
Array
(
    [0] => 2 //Неавторизованные пользователи
    [1] => 1 //Администраторы (всемогущ :) )
    [2] => 9 //Сотрудники техподдержки
)

Идентификаторы групп смотрим: Рабочий стол > Настройки > Пользователи > Группы пользователей.

Ну и отсюда пляшем. Если решаем делать 3 ИБ, то тут все красиво, на странице, где хотите показывать новости вместо обычного вызова компоненты ставите необычное :D:
Код
   //   Если пользователь в группе партнеров, допустим ИД группы 12
   if (in_array(12, $arGroups)) {
      $APPLICATION->IncludeComponent(
         "bitrix:news.list",      //нужный омпонент
         '.default',          //нужный шаблон
         array(
                           //Массив нужных параметров, в этом случае
                           //здесь должен быть обязательно 
                           //"IBLOCK_ID" => ID_ИБ_с_новостями_для_партнеров
         ),
      );
   }
   //   Если пользователь в группе диллеров, допустим ИД группы 13
   elseif (in_array(13, $arGroups)) {
      //   то же самое, но с другими параметрами вызова компонента
      //"IBLOCK_ID" => ID_ИБ_с_новостями_для_диллеров
   }
   //   Для всех остальных
   else{
      //   то же самое, но с другими параметрами вызова компонента
      //"IBLOCK_ID" => ID_ИБ_с_новостями_для_юзеров
   }

Советую в этом случае на отдельной страничке настроить компоненты показа новостей для каждого случая через виз. редактор, а потом скопировать код вызова.

Если же решаем модифицировать компонент, то в коде компонента после
Код
      //WHERE
      $arFilter = array (
         "IBLOCK_ID" => $arResult["ID"],
         "IBLOCK_LID" => SITE_ID,
         "ACTIVE" => "Y",
         "ACTIVE_DATE" => "Y",
         "CHECK_PERMISSIONS" => "Y",
      );

Добавляем
Код
   //   Если пользователь в группе партнеров, допустим ИД группы 12
   if (in_array(12, $arGroups)) {
      $arFilter["SECTION_ID"] = "1";   // Секция ИБ новостей с новостями для партнеров
   }
   //   Если пользователь в группе диллеров, допустим ИД группы 13
   elseif (in_array(13, $arGroups)) {
      $arFilter["SECTION_ID"] = "2";   // Секция ИБ новостей с новостями для диллеров
   }
   //   Для всех остальных
   else{
      $arFilter["SECTION_ID"] = "3";   // Секция ИБ новостей с новостями для всех остальных
   }
ответил 26 Фев, 15 от Almarea (3,760 баллов)