TemKa_SD Posted November 2, 2018 Share Posted November 2, 2018 Здравствуйте. Я уже копал эту функцию, ничего не получилось, помогите плиз. Имеем категории, пока просто текстом: $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 Я так понимаю, значения нужно преобразовать во что-то? Скажите плиз как :) Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 (edited) /* Получение результатов для конкретной карты */ 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 с сохранением в куках ))) Edited November 2, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 (edited) Так оно работает уже, только есть баг со значением 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 (Работает, выбрались результаты правильно). Edited November 2, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 (edited) В 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}} Вроде работает, всё правильно? Можно в базу теперь лезть? Edited November 2, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 В итоге, получилось так: <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]" Link to comment Share on other sites More sharing options...
newbie Posted November 2, 2018 Share Posted November 2, 2018 Как тут выбрать ключ? $areas[ \IPS\Request::i()->in ] Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 Illegal string offset 'Maps\Download\HELLHALT v5.0.26.w3x' Link to comment Share on other sites More sharing options...
newbie Posted November 2, 2018 Share Posted November 2, 2018 Illegal string offset 'Maps\Download\HELLHALT v5.0.26.w3x' Где?Наверное, должны быть указаны файл/строка/ и т.д. Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 Спасибо, всё в порядке, в lng файле не указал %s. Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 Похоже зацикливается выборка, браузер глючит и долго страницу грузит. в чем ошибка? $selectMap = \IPS\Db::i('stats')->select( 'map', 'stats_games', NULL, 'botid ASC', array(), NULL, NULL, 10 ); $areas = array(); foreach( $selectMap as $map ) { $areas[] = $map; } Link to comment Share on other sites More sharing options...
newbie Posted November 2, 2018 Share Posted November 2, 2018 $selectMap = \IPS\Db::i('stats')->select( 'map', 'stats_games', NULL, 'botid ASC', array(), NULL, NULL, 1 ); Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 (edited) Нет, неправильное условие я составил. У меня в базе данных порядка 2000 категорий, они вписаны к каждой игре. Первым шагом нужно выбрать их уникальными. $selectMaps = array(); $selectMaps = \IPS\Db::i('stats')->select( 'DISTINCT map', 'stats_games' )->first(); Правильно же я думаю? Затем нужно вывести полученные данные в шаблон, при этом, массив разбирается уже в шаблоне. Edited November 2, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 try { $selectMaps = array(); $selectMaps = \IPS\Db::i('stats')->select( 'DISTINCT map', 'stats_games' )->first(); $areas = array(); $areas[] = $selectMaps; } catch( \Exception $ex ) { $areas = NULL; } Сейчас такой код, выводит одну карту, первую. из-за ->first() ? Link to comment Share on other sites More sharing options...
newbie Posted November 2, 2018 Share Posted November 2, 2018 Я же дал код, где используется DISTINCT Link to comment Share on other sites More sharing options...
TemKa_SD Posted November 2, 2018 Author Share Posted November 2, 2018 (edited) Спасибо, всё работает: http://prntscr.com/ldjmqz Edited November 2, 2018 by TemKa_SD Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now