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