TemKa_SD 9 11/02/18 09:52 Здравствуйте. Я уже копал эту функцию, ничего не получилось, помогите плиз. Имеем категории, пока просто текстом: $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 Я так понимаю, значения нужно преобразовать во что-то? Скажите плиз как :) Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 10:28 (изменено) /* Получение результатов для конкретной карты */ 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 с сохранением в куках ))) Изменено 2 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 10:37 (изменено) Так оно работает уже, только есть баг со значением 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 (Работает, выбрались результаты правильно). Изменено 2 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 10:43 (изменено) В 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}} Вроде работает, всё правильно? Можно в базу теперь лезть? Изменено 2 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 10:52 В итоге, получилось так: <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]" Поделиться сообщением Ссылка на сообщение
newbie 1723 11/02/18 11:06 Как тут выбрать ключ? $areas[ \IPS\Request::i()->in ] Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 11:22 Illegal string offset 'Maps\Download\HELLHALT v5.0.26.w3x' Поделиться сообщением Ссылка на сообщение
newbie 1723 11/02/18 11:36 Illegal string offset 'Maps\Download\HELLHALT v5.0.26.w3x' Где?Наверное, должны быть указаны файл/строка/ и т.д. Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 11:47 Спасибо, всё в порядке, в lng файле не указал %s. Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 12:00 Похоже зацикливается выборка, браузер глючит и долго страницу грузит. в чем ошибка? $selectMap = \IPS\Db::i('stats')->select( 'map', 'stats_games', NULL, 'botid ASC', array(), NULL, NULL, 10 ); $areas = array(); foreach( $selectMap as $map ) { $areas[] = $map; } Поделиться сообщением Ссылка на сообщение
newbie 1723 11/02/18 12:21 $selectMap = \IPS\Db::i('stats')->select( 'map', 'stats_games', NULL, 'botid ASC', array(), NULL, NULL, 1 ); Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 12:28 (изменено) Нет, неправильное условие я составил. У меня в базе данных порядка 2000 категорий, они вписаны к каждой игре. Первым шагом нужно выбрать их уникальными. $selectMaps = array(); $selectMaps = \IPS\Db::i('stats')->select( 'DISTINCT map', 'stats_games' )->first(); Правильно же я думаю? Затем нужно вывести полученные данные в шаблон, при этом, массив разбирается уже в шаблоне. Изменено 2 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 12:43 try { $selectMaps = array(); $selectMaps = \IPS\Db::i('stats')->select( 'DISTINCT map', 'stats_games' )->first(); $areas = array(); $areas[] = $selectMaps; } catch( \Exception $ex ) { $areas = NULL; } Сейчас такой код, выводит одну карту, первую. из-за ->first() ? Поделиться сообщением Ссылка на сообщение
newbie 1723 11/02/18 12:47 Я же дал код, где используется DISTINCT Поделиться сообщением Ссылка на сообщение
TemKa_SD 9 11/02/18 12:52 (изменено) Спасибо, всё работает: http://prntscr.com/ldjmqz Изменено 2 ноября 2018 пользователем TemKa_SD Поделиться сообщением Ссылка на сообщение