Сохранить фильтр поиска Jqgrid с помощью пользовательской кнопки в диалоговом окне поиска

Я добавил кнопку в диалоговом окне поиска jqgrid для сохранения критериев поиска в базе данных и использования ее позже. При нажатии этой кнопки мне нужно свойство фильтров jqgrid критериев поиска.

http://i.stack.imgur.com/31J5x.png [Моментальный снимок] когда пользователь нажимает кнопку «Сохранить» (пользовательская кнопка, добавленная мной в диалоговом окне поиска), я запрашивал имя фильтра в диалоговом окне, а затем сохранял его с помощью фильтра.

когда кнопка поиска нажата, я не хочу перезагружать базу сетки по критериям поиска.

но я не могу получить свойство фильтра для хранения в базе данных.

я использовал событие afterRedraw, но это не последний фильтр, который я добавил.

поэтому, пожалуйста, ответьте мне в ближайшее время.

Заранее спасибо.

var grid = jQuery("#list_records").jqGrid({
        url: "getGridData.php?" + window.location.search.substring(1),
        searchurl: "getGridData.php?" + window.location.search.substring(1),
        datatype: 'json',
        mtype: "GET",
        colNames: ["Task Id", "Title", "Priority", "tags", "Created Date", "Last Update Date", "Complete Date"],
        colModel: [
                    { name: 'Task_ID', index: 'Task_ID', width: 200},
                    { name: 'Title', index: 'Title', width: 200 },
                    { name: 'Priority', index: 'Priority', width: 200},
                    { name : 'tags', index : 'tags', width : 200},
                    { name : 'Created_Date', index : 'Created_Date', width : 200},
                    { name : 'Last_Updated', index : 'Last_Updated', width : 200},
                    { name : 'Completed_date', index : 'Completed_date', width : 200}
                ],
        sortname: 'Task_ID',
        viewrecords: true,
        rownumbers: true,
        sortorder: "desc",
        ignoreCase: true,
        pager: '#perpage',
        caption: "Task Results",
        rowNum: 30,
        ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
        });

grid.jqGrid('navGrid','#perpage', {add:false,edit:false,del:false,search:false,refresh:false}).jqGrid('navButtonAdd','#perpage',{
               caption: "",
               title : "Search",
               id : "filterManipulation",
               buttonicon:"ui-icon-search", 
               onClickButton: function (){
                    //console.log(JSON.stringify(filterForSearch));
                    $("#list_records").setGridParam({
                         postData: { filters: JSON.stringify(filterForSearch)}
                    });

                    $("#list_records").jqGrid('searchGrid', 
                        {multipleSearch:true, overlay:false, searchOnEnter:true, multipleGroup:true, closeOnEscape:true, showQuery:true,recreateFilter: true,
                        afterShowSearch : function(){
                            var element = document.getElementById("fbox_list_records_2").getElementsByTagName("tr")[1].getElementsByTagName("td")[1];
                            var saveAnchor = document.createElement('a');
                            saveAnchor.setAttribute('id', 'fbox_list_save_query');
                            saveAnchor.setAttribute('class', 'fm-button ui-state-default ui-corner-all fm-button-icon-left');
                            saveAnchor.setAttribute('onclick','saveSearch()');
                            saveAnchor.innerHTML = buttonName;
                            var newAnchor = document.createElement('a');
                            newAnchor.setAttribute('id', 'fbox_list_new_filter');
                            newAnchor.setAttribute('class', 'fm-button ui-state-default ui-corner-all fm-button-icon-left');
                            newAnchor.setAttribute('onclick','newFilter()');
                            newAnchor.innerHTML = 'New';
                            element.appendChild(newAnchor);
                            element.appendChild(saveAnchor);                    

                            var tableDataTag = document.createElement("td");
                            tableDataTag.setAttribute('id','tdForFilterNameList');
                            var filterNameList = document.createElement("select");
                            filterNameList.setAttribute('id','filterNameList');
                            filterNameList.setAttribute('onChange','loadFilterAttribute()');
                            var option = new Option("--Select--", "0");
                            filterNameList.appendChild(option);
                            <?php
                                $userId = 0;
                                $conn = new mysqli("localhost", "root", "$$$$", "$$$");
                                if (mysqli_connect_errno()){
                                    echo "Failed to connect to MySQL: " . mysqli_connect_error();
                                }
                                $sql = "select filter_id,filter_name from filters where userID = $userId ";
                                //print $sql;
                                $result = $conn->query($sql);
                                if($result)
                                {
                                    while ($row = $result->fetch_assoc()) {
                            ?>
                                        var optionTag = document.createElement("option");
                                        optionTag.setAttribute("value", "<?php echo $row['filter_id']?>");
                                        var text = document.createTextNode("<?php echo $row['filter_name']?>");
                                        optionTag.appendChild(text);
                                        if(selectedValue == "<?php echo $row['filter_id']?>"){
                                            optionTag.setAttribute("Selected", "true");
                                        }
                                        //option = new Option('<?php echo $row['filter_name']?>', '<?php echo $row['filter_id']?>');
                                        filterNameList.appendChild(optionTag);
                            <?php 
                                    }
                                }
                            ?>
                            tableDataTag.appendChild(filterNameList);
                            var elementForDropDown = document.getElementById("fbox_list_records").getElementsByTagName("table")[0].getElementsByTagName("tr")[0];
                            elementForDropDown.appendChild(tableDataTag);
                        },
                        onSearch: function() {
                            var postData = grid.jqGrid('getGridParam','postData');
                            var $filter = $("#" + $.jgrid.jqID("fbox_" + this.id)),
                            sql = $filter.jqFilter('toSQLString');
                            $("#list_records").setGridParam({url: "getGridData.php?" + window.location.search.substring(1) + "&sqlQuery=" + escape(sql)});
                            $("#list_records").trigger("reloadGrid");
                            loadgridData(postData, sql);    
                            fusionChart(postData, sql); 
                            return false;
                        }, 
                        onReset : function() {
                            var postData = grid.jqGrid('getGridParam','postData');
                            $("#list_records").setGridParam({url: "getGridData.php?" + window.location.search.substring(1)});
                            $("#list_records").trigger("reloadGrid");
                            loadgridData(postData, ''); 
                            fusionChart(postData, '');  
                            return false;
                        },
                        onClose: function(){
                            filterForSearch = "";
                            buttonName = "Save";
                            selectedValue = "";
                        },
                        afterRedraw: function (p) {
                            console.log(p.filter);
                        }
                    });
                }, 
               position:"last"
        });

В приведенном выше коде я добавил пользовательскую кнопку навигации. этот код предназначен для загрузки поискового фильтра пользователя. способ хранения и редактирования фильтра.

Но что я должен сделать, чтобы получить фильтр, где нажмите кнопку сохранения.

http://i.stack.imgur.com/sU00x.png


person samkit shah    schedule 02.02.2015    source источник
comment
некоторый фактический код/скрипка был бы полезен.   -  person JTC    schedule 02.02.2015
comment
@JTC, это достаточное объяснение или вам нужно что-то еще?   -  person samkit shah    schedule 02.02.2015
comment
Извините, я все еще не совсем понимаю, что вам нужно. У вас есть поиск через ajax, пользователь может нажать «Сохранить», а затем вы пытаетесь получить последний ввод, который он использовал, или что? Пожалуйста, будьте более конкретными, чтобы мы могли попытаться вам помочь.   -  person JTC    schedule 02.02.2015
comment
поиск работает хорошо. см. ссылку на изображение. если пользователь добавит фильтр и напрямую нажмет кнопку «Сохранить», которую я добавил программно, тогда я хочу сохранить json-укус свойства фильтра в базе данных. пример: {groupOp:AND,rules:[{field:Priority,op:cn,data:hi},{field:Task_ID,op:cn,data:59}]} . этот тип хранения строк в базе данных для соответствующих фильтров. надеюсь на эту помощь. в противном случае дайте мне знать.   -  person samkit shah    schedule 02.02.2015
comment
поиск отличается от сохранения. При использовании правила добавления, нажав кнопку «+» или «-», а затем нажав кнопку «Сохранить», мне нужно сохранить данные фильтра формата JSON в базе данных. но свойство фильтра устанавливается только при перезагрузке сетки или нажатии кнопки поиска. что я не хочу.   -  person samkit shah    schedule 02.02.2015
comment
кому-то нужно больше объяснений, пожалуйста, спросите. я нахожусь в спешке. поэтому, пожалуйста, ответьте в ближайшее время. Спасибо   -  person samkit shah    schedule 02.02.2015


Ответы (1)


спасибо @jtc за рассмотрение моего вопроса. Ответ на мой вопрос уже есть в моем вопросе.

По сути, я реализовал функции «Сохранить», «Обновить», «Удалить» в диалоговом окне предварительного поиска.

В диалоговом окне поиска я перечислил все фильтры конкретного пользователя.

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

Поэтому позже, когда пользователь снова вошел в систему, он / она выполнил все манипуляции с фильтрами и выбрал конкретное поле из списка фильтров и соответственно выполнил поиск.

Так что, если кому-то нужен код, дайте мне знать для этой функциональности.

Спасибо

person samkit shah    schedule 06.02.2015