Перейти к содержимому
Открыть в приложении

Удобный способ просмотра. Узнать больше.

Дизайн и модификация Invision Community

Полноэкранное приложение на главном экране с push-уведомлениями, медалями и многим другим.

Чтобы установить это приложение на iOS и iPadOS
  1. Нажмите иконку «Поделиться» в Safari
  2. Прокрутите меню и нажмите На экран «Домой».
  3. Нажмите Добавить в правом верхнем углу.
Чтобы установить это приложение на Android
  1. Нажмите меню из трёх точек (⋮) в правом верхнем углу браузера.
  2. Нажмите Добавить на главный экран или Установить приложение.
  3. Подтвердите, нажав Установить.
Русский язык для Invision Community 5

Ошибка в настройках IP.Content

Здравствуйте!

 

Война с IP.Content 4 продолжается. Мне нужно было настраивать права доступа для каждой записи (статьи) в отдельности, но так как подобного функционала нет пришлось выдумать свое решение. Решил что буду в шаблоне использовать конструкцию для показа контента для конкретной группы юзеров + вставка своего поля. Получилось вот что:

 

<!--Настройка прав доступа к контенту-->
{{if \IPS\Member::loggedIn()->inGroup(array($record->customFieldDisplayByKey('filed_group_access')))}}
   <div>Контент</div>
{{endif}}

 

Проблема в том, что эта конструкция срабатывает по не известному мне набору случайностей. Значение в filed_group_access такое что контент должен показываться даже гостям, но этого не происходит. Соответственно, если просто вставить номера групп, то такая конструкция работает отлично:

 

<!--Настройка прав доступа к контенту-->
{{if \IPS\Member::loggedIn()->inGroup(array(2,3,4,5))}}
   <div>Контент</div>
{{endif}}

 

Но в и первый вариант работает, просто не могу понять почему через раз. Кеш чищу, смотрю под анонимным браузером.

 

Помогите, пожалуйста, разобраться.

Рекомендованные сообщения

Проблема в том, что эта конструкция срабатывает по не известному мне набору случайностей.

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

 

\IPS\Member::loggedIn()->inGroup(explode(',', $record->customFieldDisplayByKey('filed_group_access')))

что эта конструкция срабатывает по не известному мне набору случайностей
что естественно не будет работает,

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

 

"2,3,4,5" = 2

"3,4,5,2" = 3

"4,5,2,3" = 4

и т.д.

  • Автор

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

 

\IPS\Member::loggedIn()->inGroup(explode(',', $record->customFieldDisplayByKey('filed_group_access')))

 

Это тоже к сожалению не сработало. Но большое спасибо за помощь.

Это тоже к сожалению не сработало.

Это аналогично конструкции во втором варианте. Числа должны быть перечислены без пробелов.

Это тоже к сожалению не сработало. Но большое спасибо за помощь.

А покажите, что выводит

{$record->customFieldDisplayByKey('filed_group_access')}

  • Автор

А покажите, что выводит

{$record->customFieldDisplayByKey('filed_group_access')}

 

Специально вывел этот параметр в шаблон, чтобы посмотреть выдачу. Вот что выводит - 2,3,4,6,13,22,23

  • Автор

Это аналогично конструкции во втором варианте. Числа должны быть перечислены без пробелов.

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

Это тот случай когда нужно еще раз внимательно проверить. Вы случайно с формой записи не ошиблись? С группой пользователя?

  • Автор

Это тот случай когда нужно еще раз внимательно проверить. Вы случайно с формой записи не ошиблись? С группой пользователя?

Вот как все работает. У меня создано поле типа Radio с ключом webinars_group_access. Для этого поля я включил Show in display template (то есть показ на странице записи). Шаблон показа вот такой - {$value|raw}. Вот настройки самого поля:

 

post-55941-0-53273900-1445936659_thumb.png

 

Конструкция в шаблоне Record:

{{if \IPS\Member::loggedIn()->inGroup(explode(',', $record->customFieldDisplayByKey('webinars_group_access')))}}
<div>Контент</div>
{{endif}}

Чтобы исключить все, но я перепроверил ID групп. Был залогинен и разлогинен. Сейчас настойки такие чтобы контент показывался вообще для всех (то есть даже не авторизованным). Я отлично понимаю что если не работает, то это ошибка в моих действиях.

Не вижу ничего, чтобы мешало корректной работе.

 

Вы забыли указать права доступа данного поля.Хотя я вижу у Вас на форуме "2,3,4,6,13,22,23", значит могу видеть поле как гость.

  • Автор

Права доступа проверил. Просмотр значения поля доступен для всех.

Покажите больше кода.

 

Я вижу

<div id="webinar_video">
         <!--Видят студенты и администратор-->

          2,3,4,6,13,22,23
         <!--Заглушка для гостей-->


       </div>

 

Что я должен видеть, как гость?

  • Автор

Вот весь контейнер.

 

<div id="webinar_video">
         <!--Видят студенты и администратор-->
         {{if \IPS\Member::loggedIn()->inGroup(explode(',', $record->customFieldDisplayByKey('webinars_group_access')))}}
           <iframe src="https://login.webinar.fm/ru/login/digitalmakers/light" width="100%" height="433" frameborder="no" allowtransparency></iframe>
           <div style="position:absolute;top: 20px;right: 56px;">
             <div id="fullscreen_button"><i class="fa fa-arrows-alt"></i></div>
           </div>
         {{endif}}
          {$record->customFieldDisplayByKey('webinars_group_access', 'listing')|raw}
         <!--Заглушка для гостей-->
         {{if \IPS\Member::loggedIn()->inGroup(array($record->customFieldDisplayByKey('webinars_group_access')))}}
         <div>
           <div class="no_login_video">
             <div style="display:inline-block;vertical-align:middle;"><i class="fa fa-ban"></i>  <a target="_blank" href="/login/">Войдите на сайт</a> для просмотра этого вебинара.</div>
             <div style="display:inline-block;vertical-align:middle;height:100%;width:0px;"></div>
           </div>
         </div>
         {{endif}}

       </div>

          <!--Заглушка для гостей-->
         {{if \IPS\Member::loggedIn()->inGroup(array($record->customFieldDisplayByKey('webinars_group_access')))}}

Опять некорректный код используете. Вам же во 2-ом посте написали, как надо.

 

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

 

Для гостей можете писать так

{{if !\IPS\Member::loggedIn()->member_id}}

 

Хотя, судя по данным, лучше использовать if/else

  • Автор

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

<div id="webinar_video">
         <!--Видят студенты и администратор-->
         {{if \IPS\Member::loggedIn()->inGroup(explode(',', $record->customFieldDisplayByKey('webinars_group_access')))}}
           <iframe src="https://login.webinar.fm/ru/login/digitalmakers/light" width="100%" height="433" frameborder="no" allowtransparency></iframe>
           <div style="position:absolute;top: 20px;right: 56px;">
             <div id="fullscreen_button"><i class="fa fa-arrows-alt"></i></div>
           </div>
         {{endif}}
          {$record->customFieldDisplayByKey('webinars_group_access', 'listing')|raw}
       </div>

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.