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

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

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

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

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

Как передать в таблицу значение из URL параметра?

Здравствуйте, товарищи.

 

Хочу чтобы в табличке отображались элементы, которые я передаю в GET параметре. При таком URL:

 

site.ru?ids=5642,452

 

Такой код не работает (таблица пустая, но генерируется без проблем):

 

{{$ids = \IPS\Request::i()->ids;}}
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array(array(\IPS\Db::i()->findInSet('primary_id_field', array ( $ids )))));}}

Если явно поставить значение GET параметра в код вот так:

 

{{$ids = \IPS\Request::i()->ids;}}
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records2', $record->url(), array(array(\IPS\Db::i()->findInSet('primary_id_field', array ( 5642,452 )))));}}

То все работает. Отсюда вопрос, как мне GET параметр запихнуть в табличку?

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

array ( $ids )

Вы сюда подставляете значение переменной $ids

Получается

array ( '5642,452' )

Не похоже на то, что нужно.

 

Используйте explode

  • Автор

Пробовал вот так:

 

{{$ids= explode(',', $ids);}}
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records12', $row->url(), array(array(\IPS\Db::i()->findInSet('primary_id_field', $ids ))));}}

И вот так:

 

{{$ids= explode(',', $ids);}}
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records12', $row->url(), array(array(\IPS\Db::i()->findInSet('primary_id_field', array( $ids )))));}}

Получаю всегда исключение типа OutOfRangeException. Проверял через {expression="gettype($ids)"} и уверен, что подставляется array.

{{$where = array();}}
{{if isset(\IPS\Request::i()->ids) and \IPS\Request::i()->ids}}
{{$ids = !\is_array(\IPS\Request::i()->ids) ? explode(',', \IPS\Request::i()->ids) : \IPS\Request::i()->ids;}}
{{$where[] = array(\IPS\Db::i()->findInSet('primary_id_field', array_filter($ids, 'is_numeric')));}}
{{endif}}
{{$table = new \IPS\Helpers\Table\Content('IPS\cms\Records12', $row->url(), $where);}}

Можете писать site.ru?ids=5642,452 или site.ru?ids[]=5642&ids[]=452

Если в primary_id_field содержится одно число, то вместо \IPS\Db::i()->findInSet используйте \IPS\Db::i()->in

  • Автор

Спасибо. Приведенный код полностью рабочий.

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

Аккаунт

Навигация

Поиск

Поиск

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

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