@samaelka

[JsGrid] Автозаполнения фильтра «select»?

Имеется таблицы JsGrid, заполняется данными из Json:

618a243467d20044340201.png

var types_ev_js = [
        { Name: " ", Id: 0 },
        { Name: "Инкассация", Id: 1 },
        { Name: "Приз", Id: 2 },
        { Name: "Игра", Id: 3 },
        { Name: "Ключ(каретка)", Id: 4 },
        { Name: "Состояние питания", Id: 5 },
        { Name: "Ошибка купюрника", Id: 6 },
        { Name: "Ошибка диспенсера", Id: 7 },
        { Name: " RES ", Id: 8 },
        { Name: "Выдача карточки", Id: 9 },
        { Name: "Монетник", Id: 10 },
        { Name: "Купюрник", Id: 11 },
        { Name: "Безнал", Id: 12 },
        { Name: "Счётчик купюрника", Id: 40 },
        { Name: "Счётчик игр", Id: 41 },
        { Name: "Счётчик призов", Id: 42 },
        { Name: "Пропущенные события", Id: 43 },
        { Name: "Ошибка диспенсера", Id: 8 },
        { Name: "Ошибка соединения", Id: 209 },
        { Name: "Датчик открытия двери", Id: 210 },
        { Name: "Счётчик монет", Id: 44 },
        { Name: "Счётчик безнал", Id: 45 },
        { Name: "Выдача чека", Id: 500 },
        { Name: "Перезапуск устройства", Id: 50 }

    ];
    var types_ev_machine = <?=json_encode($events->GetArrayTypes());?>;
    var types_ev_city = <?=json_encode($events->GetArrayCity());?>;
    var types_ev_place = <?=json_encode($events->GetArrayPlace());?>;
    
    $("#jsGrid4").jsGrid({
        height: "auto",
        width: "100%",

        filtering: true,
        sorting: true,
        paging: true,
        autoload: true,
        loadIndication: true,
        loadIndicationDelay: 100,
        loadMessage: "Получение данных с сервера...",
        loadShading: true,
        editing: false,
        inserting: false,
        deleting: false,
        
        controller: {
            loadData: function(filter) {
                console.log(filter);
                return $.ajax({
                    url: "./parcer.php?get=events",
                    data: filter,
                    dataType: "json"
                });
            }
        },

        fields: [
            { name: "TimeS", type: "text", title: "Время сервера",  width: 25 },
            { name: "CityID", type: "select", title: "Город", items: types_ev_city, valueField: "CityID", textField: "Describe", width: 20 },
            { name: "PlaceID", type: "select", title: "Расположение", items: types_ev_place, valueField: "PlaceID", textField: "Describe", width: 20 },
            { name: "TypeID", type: "select", title: "Тип устройства", items: types_ev_machine, valueField: "TypesID", textField: "Describe",  width: 15 },
            { name: "MachineID", type: "text", title: "Аппарат",  width: 10 },
            { name: "Code", type: "select", title: "Событие", items: types_ev_js, valueField: "Id", textField: "Name",  width: 25 },
            { name: "Value", type: "text", title: "Значение",  width: 10 },
            { type: "control",  width: 10 }
        ]
    });


При выборе фильтра передается GET запрос в php файл

618a256791ac0970691604.png

парсер GET запросов фильтра:
if ($_GET["get"] == 'events') {
        if(($_GET["TimeS"] != null) or ($_GET["MachineID"] != null) or ($_GET["TypeID"] != null) or ($_GET["PlaceID"] != null) or ($_GET["CityID"] != null) or ($_GET["Code"] != 0) or ($_GET["Value"] != null)){
            echo $events->getAllEvents($_GET["TimeS"], $_GET["MachineID"], $_GET["TypeID"], $_GET["PlaceID"], $_GET["CityID"], $_GET["Code"], $_GET["Value"], 1000);
        }else{
            echo $events->getAllEvents(0,0,0,0,0,0,0,1000);
        }
    }


class Events
Вывод данных:
function getAllEvents($f_TimeS, $f_MachineID, $f_TypeID, $f_PlaceID, $f_CityID, $f_Code, $f_Value, $count) {
        /*
         * Функция выводит последние N событий
         * TODO по фильтру
         */
        $str_query = null;
	    if($f_TimeS==0 and $f_MachineID==0 and $f_TypeID==0 and $f_CityID==0 and $f_PlaceID==0 and $f_Code==0 and $f_Value==0)
	    {
            $result = $this->_db_test->query("SELECT * FROM Events ORDER BY `TimeS` DESC LIMIT {$count};");
            while ($row = $result->fetch()) {
                if(isset($row['TimeD'])){
                    $row['TimeS'] = $this->GetTimeView($row['TimeS']);
                    $row['TimeD'] = $this->GetTimeView($row['TimeD']);
                    if($row['MachineID']!=null) {
                        $NameMachine =  $this->GetNameMachine($row['MachineID']);
                        $row['MachineID'] = "
<form name='form1' enctype='multipart/form-data' action='machines.php' method='post'>
<input type='submit' value='{$NameMachine}'>
<input type='hidden' name='machine' value='{$row['MachineID']}'>
<input type='hidden' name='fromlink' value='1'>
</form>" ;
                    }
                }
                $data[] = $row;
            }
        }else{

	        if($f_Value!=0){
	            $str_query.= " and `Value`={$f_Value}";
            }
            if($f_Code!=0){
                $str_query.= " and `Code`={$f_Code}";
            }
            if($f_TypeID!=0){
                $str_query.= " and `TypeID`={$f_TypeID}";
            }
            if($f_CityID!=0){
                $str_query.= " and `CityID`={$f_CityID}";
            }
            if($f_PlaceID!=0){
                $str_query.= " and `PlaceID`={$f_PlaceID}";
            }
            $result = $this->_db_test->query("SELECT * FROM Events WHERE `TimeS`!=0  {$str_query} ORDER BY `TimeS` DESC LIMIT {$count};");
            while ($row = $result->fetch()) {
                if(isset($row['TimeD'])){
                    $row['TimeS'] = $this->GetTimeView($row['TimeS']);
                    $row['TimeD'] = $this->GetTimeView($row['TimeD']);
                    if($row['MachineID']!=null) {
                        $NameMachine =  $this->GetNameMachine($row['MachineID']);
                        $row['MachineID'] = "
<form name='form1' enctype='multipart/form-data' action='machines.php' method='post'>
<input type='submit' value='{$NameMachine}'>
<input type='hidden' name='machine' value='{$row['MachineID']}'>
<input type='hidden' name='fromlink' value='1'>
</form>" ;
                    }
                }
                $data[] = $row;
            }

        }
        echo json_encode(array_values($data));
        }

Получение данных о местоположениях:
public function GetArrayPlace() {
        //Функция возвращает
        $data[] = array("PlaceID"=>0, "Describe" => '');
        $result = $this->_db_test->query("SELECT * FROM places");
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $data[] = array("PlaceID"=>$row['PlaceID'], "Describe" => $row['Describe']);;
        }
        return $data;
    }

Получения списка городов:
public function GetArrayCity() {
        //Функция возвращает
        $data[] = array("CityID"=>0, "Describe" => '');
        $result = $this->_db_test->query("SELECT * FROM cities;");
        while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
            $data[] = array("CityID"=>$row['CityID'], "Describe" => $row['Describe']);;
        }
        return $data;
    }


618a278aa121e391615971.png

На текущий момент фильтр местоположения заполняется всеми местами из городов. У каждого города есть свои местоположения. Как сделать так чтоб после выбора города фильтр местоположения заполнялся только теми местами которые привязаны к городу...
  • Вопрос задан
  • 97 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект