Перейти к публикации
View in the app

A better way to browse. Learn more.

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

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Выборка категории в фильтр

Опубликовано:

Здравствуйте. Я уже копал эту функцию, ничего не получилось, помогите плиз.

 

Имеем категории, пока просто текстом:

 

$areas = array('Maps\Download\HELLHALT v5.0.26.w3x', 'maps\download\DotA Allstars 6.88w3.w3x');

 

html:

 

                    {{foreach $areas as $key => $data}}
                   <li class="ipsMenu_item {{if isset( \IPS\Request::i()->in ) and \IPS\Request::i()->in == $key}}ipsMenu_itemChecked{{endif}}"><a href="{$thisUrl->setQueryString( array( 'in' => $key ) )}">{$data[1]}</a></li>
                   {{endforeach}}

 

результат: http://prntscr.com/ldh6bd

 

Я так понимаю, значения нужно преобразовать во что-то? Скажите плиз как :)

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

Опубликовано:
  • Автор

		/* Получение результатов для конкретной карты */
	if ( isset( \IPS\Request::i()->in ) and isset( $areas[ \IPS\Request::i()->in ] ) )
	{
		$appWhere = " AND map='" . \IPS\Db::i()->escape_string( $areas[\IPS\Request::i()->in][ 0 ] ) . "'";
	}

 

Так, запрос работает, осталось разобраться с этим массивом и можно редактировать под запрос в БД. Только мне вот еще не понятно, если я тут указываю [ 0 ] конкретно 0, соответственно выберется нулевое значение, даже если в фильтре будет 1 или 2, правильно же?

 

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

 

Потом еще бы массовый SELECT с сохранением в куках )))

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Так оно работает уже, только есть баг со значением 1.

 

$areas = array('Maps\Download\HELLHALT v5.0.26.w3x', 'Maps\Download\HELLHALT v5.0.27.w3x');

 

Все результаты без фильтрации: http://prntscr.com/ldhq6i

Фильтрация с 0 порядковым номером (первое значение, так как у в коде порядковый номер с 0): http://prntscr.com/ldhqtm (Работает, выбрались результаты правильно).

Фильтрация с 1 порядковым номером (второее значение, так как у в коде порядковый номер с 0): http://prntscr.com/ldhrnq (Работает, выбрались результаты правильно).

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

В HTML изменил (название пункта):

 

                    {{foreach $areas as $key => $data}}
                   <li class="ipsMenu_item {{if isset( \IPS\Request::i()->in ) and \IPS\Request::i()->in == $key}}ipsMenu_itemChecked{{endif}}"><a href="{$thisUrl->setQueryString( array( 'in' => $key ) )}">{$data[1]}</a></li>
                   {{endforeach}}

 

на

 

                    {{foreach $areas as $key => $data}}
                   <li class="ipsMenu_item {{if isset( \IPS\Request::i()->in ) and \IPS\Request::i()->in == $key}}ipsMenu_itemChecked{{endif}}"><a href="{$thisUrl->setQueryString( array( 'in' => $key ) )}">{$areas[$key]}</a></li>
                   {{endforeach}}

 

Вроде работает, всё правильно? Можно в базу теперь лезть?

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

В итоге, получилось так:

 

            <li>
               <a href='#elLeaderboard_app_menu' id="elLeaderboard_app" data-ipsMenu>{{if isset( \IPS\Request::i()->in ) and isset( $areas[ \IPS\Request::i()->in ] )}}{lang="sharedstats_games_filter_category" sprintf="$areas[ \IPS\Request::i()->in ]"}{{else}}{lang="sharedstats_games_filter_category_all"}{{endif}} <i class="fa fa-caret-down"></i></a>
               <ul id="elLeaderboard_app_menu" class="ipsMenu ipsMenu_selectable ipsMenu_normal ipsHide">
                   <li class="ipsMenu_item {{if ! isset( \IPS\Request::i()->in )}}ipsMenu_itemChecked{{endif}}"><a href="{$thisUrl->stripQueryString( 'in' )}">{lang="leaderboard_all_apps"}</a></li>
                   {{foreach $areas as $key => $data}}
                   <li class="ipsMenu_item {{if isset( \IPS\Request::i()->in ) and \IPS\Request::i()->in == $key}}ipsMenu_itemChecked{{endif}}"><a href="{$thisUrl->setQueryString( array( 'in' => $key ) )}">{$areas[$key]}</a></li>
                   {{endforeach}}
               </ul>
           </li>

 

Как тут выбрать ключ?

sprintf="$areas[ \IPS\Request::i()->in ][КЛЮЧ 0,1,2,3,etc]"

Опубликовано:

Как тут выбрать ключ?

 

$areas[ \IPS\Request::i()->in ]

Опубликовано:
  • Автор
Illegal string offset 'Maps\Download\HELLHALT v5.0.26.w3x'
Опубликовано:

Illegal string offset 'Maps\Download\HELLHALT v5.0.26.w3x'

 

Где?

Наверное, должны быть указаны файл/строка/ и т.д.

Опубликовано:
  • Автор

Спасибо, всё в порядке, в lng файле не указал %s.

Опубликовано:
  • Автор

Похоже зацикливается выборка, браузер глючит и долго страницу грузит. в чем ошибка?

 

		$selectMap = \IPS\Db::i('stats')->select( 'map', 'stats_games', NULL, 'botid ASC', array(), NULL, NULL, 10 );

	$areas = array();

	foreach( $selectMap as $map )
	{
		$areas[] = $map;
	}

Опубликовано:
$selectMap = \IPS\Db::i('stats')->select( 'map', 'stats_games', NULL, 'botid ASC', array(), NULL, NULL, 1 );

Опубликовано:
  • Автор

Нет, неправильное условие я составил.

 

У меня в базе данных порядка 2000 категорий, они вписаны к каждой игре. Первым шагом нужно выбрать их уникальными.

 

		$selectMaps = array();
       $selectMaps = \IPS\Db::i('stats')->select( 'DISTINCT map', 'stats_games' )->first();

 

Правильно же я думаю?

 

Затем нужно вывести полученные данные в шаблон, при этом, массив разбирается уже в шаблоне.

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

        try {
       	$selectMaps = array();
       	$selectMaps = \IPS\Db::i('stats')->select( 'DISTINCT map', 'stats_games' )->first();
       	$areas = array();
       	$areas[] = $selectMaps;
       } catch( \Exception $ex ) { $areas = NULL; }

 

Сейчас такой код, выводит одну карту, первую. из-за ->first() ?

Опубликовано:

Я же дал код, где используется DISTINCT

Опубликовано:
  • Автор

Спасибо, всё работает: http://prntscr.com/ldjmqz

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Я сразу тут спрошу, хочу в админке, в настройках выгрузить результаты так же, и по ним уже делать различные настройки. Там можно это использовать в settings.json ?

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

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.