jqGridPHP - таблицы на ajax без головной боли

Rrryyy

Новичок
Доброго времени суток!

Помогите решить следующую проблему:
прикрутил к одному столбцу DateRangePicker, при нажатии на поиск, "календарики" выходят, но при нажатии в консоли браузера выдается такая ошибка: Uncaught TypeError: Cannot read property 'formatDate' of undefined в файле daterangepicker.jQuery.compressed.js:1 Никак решить не могу.
Сам столбец:
'date' => array('label' => 'Дата',
'width' => 10,
'db' => 'a.start_on',
'searchoptions' => array('dataInit' => $this->initDateRangePicker(array(
'earliestDate' => '2011-01-01',
'latestDate' => '2011-06-10',
'dateFormat' => 'yy-mm-dd',
'onChange' => new jqGrid_Data_Raw(''dateRangePicker_onChange'),
'datepickerOptions' => array(
'changeMonth' => true,
'dateFormat' => 'yy-mm-dd',
'minDate' => '2014-01-01',
'maxDate' => '2017-01-01',
),
))),
'search_op' => 'date',


Ну и скрипт
function dateRangePicker_onChange() {
var $input = $('#gs_date_register');
var old_val = $input.val();

setTimeout(function () {
if ($input.val() == old_val) {
$grid[0].triggerToolbar();
}
}, 50);
};
 

peon

Lok'tar ogar
cтарая версия jquery ui может быть или несколько разных версий jquery подключенно к странице
 

pavoleg

Новичок
Добрый вечер!
Не могу разобраться, есть таблицы, упрощенно

area (районы) поля Id, title
streets (улицы) поля Id, areaid, title
address (адрес) id, streetid, title

как сделать чтобы в окне редактирования таблицы address, при выборе района, в поле улиц отображались только улицы выбранного района ?
Я так понимаю для этого используется DataEvents? Реализовано это в серверной части?
 

anion

Новичок
День добрый всем.
я только начал разбираться, подскажите пожалуйста, а то что-то я туплю, к базе подключается, таблицу рисует, но не заполняет

index.php
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>Test Grid</title>
<link rel="stylesheet" type="text/css" media="screen" href="css/jquery-ui.min.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="css/jqgrid-ext.css" />

<style>
html, body {
    margin: 0;
    padding: 0;
    font-size: 75%;
}
</style>
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jqgrid-ext.js" type="text/javascript"></script>
<script src="js/i18n/grid.locale-ru.js" type="text/javascript"></script>
<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
</head>
<body>
<?php
require_once 'php/jqGridLoader.php';
$loader = new jqGridLoader;
$loader->set("grid_path", 'grids/');
$loader->set('encoding', 'utf-8');
$loader->set('db_driver', 'Pdo');
$loader->set("pdo_dsn"  , "mysql:dbname=jqgrid_test;host=127.0.0.1");
$loader->set("pdo_user" , "root");
$loader->set("pdo_pass" , "pass");
$loader->set('debug_output', true);
$loader->autorun();
$rendered_grid = $loader->render('test');

?>

<script>
    <?= $rendered_grid ?>
</script>
</body>
</html>
test.php
PHP:
<?php

class test extends jqGrid
{
    protected function init()
    {
        #Set database table
        $this->table = 'tbl_customer';

        #Make all columns editable by default
        $this->cols_default = array('editable' => true);
        $this->primary_key = 'id';

        #Set columns
        $this->cols = array(

            'id' => array('label' => 'ID',
                'width' => 10,
                'align' => 'center',
                'editable' => false, //id is non-editable
            ),

            'first_name' => array('label' => 'First name',
                'width' => 35,
                'editrules' => array('required' => true),
            ),

            'last_name' => array('label' => 'Last name',
                'width' => 35,
                'editrules' => array('required' => true),
            ),

            'email' => array('label' => 'Email',
                'width' => 30,
                'editrules' => array('email' => true),
            ),

            'phone' => array('label' => 'Phone',
                'width' => 25,
                'align' => 'center',
            ),

            'discount' => array('label' => 'Discount',
                'width' => 15,
                'formatter' => 'numeric',
                'align' => 'center',
                'editable' => false,
            ),
        );

        #Set nav
        $this->nav = array('add' => true, 'edit' => true, 'del' => true);

        #Add filter toolbar
        $this->render_filter_toolbar = true;
    }
}
вижу что в запросе возвращается:
{ "page": "1", "total": "150", "records": "3000", "rows": [ { "id": "1", "cell": [ "1", "Bobby", "Roger", "[email protected]", ... и т.д. (ну по идее всё что должно быть)

куда копать не знаю, подскажите пожалуйста.
 

ezhikov

Новичок
Полностью с Вами согласен, но эта обертка не работает из за того что в перечень полей не попадает...
Приветствую, уважаемые.

Не нашёл продолжения темы про работу с Oracle. У меня похожая проблема:
<b>Fatal error</b>: Wrong parameters for Exception([string $exception [, long $code [, Exception $previous = NULL]]]) in <b>C:\Inetpub\wwwroot\js\jqGridPHP_RU\php\Exception\Exception.php</b> on line <b>13</b><br />
string(116) "SQLSTATE[HY000]: General error: 936 OCIStmtExecute: ORA-00936: missing expression
(ext\pdo_oci\oci_statement.c:148)"
Есть ли какие рекомендации (PHP Version 5.3.18)?
 

ezhikov

Новичок
День добрый всем.

вижу что в запросе возвращается:
{ "page": "1", "total": "150", "records": "3000", "rows": [ { "id": "1", "cell": [ "1", "Bobby", "Roger", "[email protected]", ... и т.д. (ну по идее всё что должно быть)

куда копать не знаю, подскажите пожалуйста.
В ответе у вас только JSON массив с данными таблицы или что-то ещё? Могу предположить, что загрузчик стоит разместить в начало файла.
 

anion

Новичок
В ответе у вас только JSON массив с данными таблицы или что-то ещё? Могу предположить, что загрузчик стоит разместить в начало файла.
в ответ на http://localhost/index.php?jqgrid=test приходит ответ:
HTML:
<!DOCTYPE html>
<html>
    <head>
        <title>My First Grid</title>
         

        <!--jQuery -->
        <script src="js/jquery/jquery.min.js" type="text/javascript"></script>

        <!--jQuery UI-->
        <!-- <link href="http://yandex.st/jquery-ui/1.8.11/themes/redmond/jquery.ui.all.min.css" rel="stylesheet" type="text/css"/> -->
        <script src="js/jquery.ui/jquery-ui.min.js" type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" media="screen" href="js/jquery.ui/jquery-ui.min.css" />

        <!--jqGrid-->
        <script src="js/jqgrid/js/i18n/grid.locale-ru.js" type="text/javascript"></script>
        <script src="js/jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" media="screen" href="js/jqgrid/css/ui.jqgrid.css" />

        <!--jqGrid Extension-->
        <script src="js/client/jqgrid-ext.js" type="text/javascript"></script>
        <link rel="stylesheet" type="text/css" media="screen" href="js/client/jqgrid-ext.css" />

        <style>
        html, body {
           margin: 0;
           padding: 0;
           font-size: 75%;
        }
        </style>
    </head>
    <body>
        <script type="text/javascript">
               $.extend($.jgrid.defaults,
               {
                   hidegrid:false,
                   hoverrows:false,

                   viewrecords:true,
                   scrollOffset:21,

                   width:800,
                   height:290
               });

               $.jgrid.defaults.height = '400px';
               $.jgrid.nav.refreshtext = 'Refresh';
               $.jgrid.formatter.date.newformat = 'ISO8601Short';

               $.jgrid.edit.closeAfterEdit = true;
               $.jgrid.edit.closeAfterAdd = true;
        </script>
        { "page": "1", "total": "150", "records": "3000", "rows": [ { "id": "1", "cell": [ "1", "Bobby", "Roger", "[email protected]", "49028477281", "0.10" ] }, { "id": "2", "cell": [ "2", "Steve", "Casey", "[email protected]", "79107589477", "0.12" ] }, { "id": "3", "cell": [ "3", "Michael", "Herman", "[email protected]", "49005366259", "0.00" ] }, { "id": "4", "cell": [ "4", "Derrick", "Juan", "[email protected]", "79235968284", "0.14" ] }, { "id": "5", "cell": [ "5", "Terrance", "Charlie", "[email protected]", "29154777083", "0.08" ] }, { "id": "6", "cell": [ "6", "Travis", "Alvin", "[email protected]", "29055425875", "0.08" ] }, { "id": "7", "cell": [ "7", "Christopher", "Norman", "[email protected]", "49128823476", "0.05" ] }, { "id": "8", "cell": [ "8", "Jason", "Wade", "[email protected]", "19258190086", "0.26" ] }, { "id": "9", "cell": [ "9", "Andy", "Brent", "[email protected]", "79111798193", "0.20" ] }, { "id": "10", "cell": [ "10", "Lewis", "Ramon", "[email protected]", "29133636374", "0.20" ] }, { "id": "11", "cell": [ "11", "Dustin", "Kent", "[email protected]", "39217639054", "0.29" ] }, { "id": "12", "cell": [ "12", "Sergio", "Bradley", "[email protected]", "79012511927", "0.27" ] }, { "id": "13", "cell": [ "13", "Don", "Louis", "[email protected]", "49181113615", "0.06" ] }, { "id": "14", "cell": [ "14", "George", "Clarence", "[email protected]", "49256221272", "0.06" ] }, { "id": "15", "cell": [ "15", "Ron", "Tracy", "[email protected]", "29072627785", "0.29" ] }, { "id": "16", "cell": [ "16", "Jessie", "Bernard", "[email protected]", "19084786715", "0.25" ] }, { "id": "17", "cell": [ "17", "Jerry", "Gerald", "[email protected]", "79197969453", "0.20" ] }, { "id": "18", "cell": [ "18", "Frank", "Arnold", "[email protected]", "79161929753", "0.27" ] }, { "id": "19", "cell": [ "19", "Leslie", "Shane", "[email protected]", "29021065017", "0.14" ] }, { "id": "20", "cell": [ "20", "Anthony", "Scott", "[email protected]", "79135379751", "0.25" ] } ], "userdata": { "agg": { "_count": "3000" } }, "debug": { "query_agg": "\r\n\t\t\tSELECT count(*) AS _count\r\n\t\t\tFROM tbl_customer\r\n\t\t\tWHERE true\r\n\t\t", "query_rows": "\r\n\t\t\tSELECT id, first_name, last_name, email, phone, discount\r\n\t\t\tFROM tbl_customer\r\n\t\t\tWHERE true\r\n\t\tORDER BY id asc\nLIMIT 20 OFFSET 0\n" } }
подозреваю что в ответе должен быть только JSON массив, а приходит HTML+JSON
 

anion

Новичок
В ответе у вас только JSON массив с данными таблицы или что-то ещё? Могу предположить, что загрузчик стоит разместить в начало файла.
подозреваю что в ответе должен быть только JSON массив, а приходит HTML+JSON
и правда, разместил загрузчик в начало файла и всё стало работать, только кодировка(надпись "Стр" "Просмотр" и "из" в неверной кодировке), но это уже мелочь

UPD файл grid.locale-ru.js вроде бы в utf-8 но jqgrid кракозябрами, вылечил перекодированием файла перевода в UTF-8 с BOM
 
Последнее редактирование:

anion

Новичок
пытаюсь сгруппировать пару столбцов из php
PHP:
$this->extGroupHeader = array(
        'user' => array(2 => 'пользователь'),
        'data' => array(2 => 'данные),
    );
таким методом нельзя, значит остаётся только java
HTML:
$grid.jqGrid('extGroupHeader',

{
    'user':[2, 'пользователь'],
    'data':[2, 'данные']
});
как ещё можно заюзать php
 

ezhikov

Новичок
Товарищи, поделитесь, пожалуйста, настройками jqGridPHP для работы с Oracle.
На текущий момент с минимальными настройками получаю:
<b>Fatal error</b>: Wrong parameters for Exception([string $exception [, long $code [, Exception $previous = NULL]]]) in <b>C:\Inetpub\wwwroot\js\jqGridPHP_RU\php\Exception\Exception.php</b> on line <b>12</b><br />
var_dump($message):
SQLSTATE[HY000]: General error: 911 OCIStmtExecute: ORA-00911: invalid character
 

Jnas

Новичок
Добрый день, ~WR~
Вы не забросили свой проект? просто иногда на Вашем сайте примеры jqGridPHP не грузятся.
 

gorec2005

Новичок
Привет!
Подскажите пожалуйста - при отображении с сайта - все ок - при ошибке появляется модальное окно, а у меня локально (полная копия с сайта), правда через https не работает (таблица есть, данные есть, но если специально делаешь ошибку - модального окна нет) т.е. мне надо, чтобы после заполнения в окне редактирования, или добавления и валидации этих данных на стороне сервера сервер мог вернуть сообщение - в прримерах это работает, у меня никак не получается - подскажите как это отладить - если отсылка к firebug-u то пожалуйста поконкретней - новичек я :-( далеко не все еще понимаю...
PS вот содержимое POST из firebug
Код:
{ "error": "1", "error_msg": "Exception", "error_code": "0", "error_data": null, "error_type": "common"
, "error_string": "exception 'jqGrid_Exception' with message 'Exception' in \/usr\/local\/www\/grids\/jqbind.php:56\nStack trace:\n#0 \/usr\/local\/www\/php\/jqGrid
.php(267): jqbind->opAdd(Array)\n#1 [internal function]: jqGrid->oper('add')\n#2 \/usr\/local\/www\/php\/jqGridLoader.php(58): call_user_func_array(Array, Array)\n#3 \/usr\/local\/www\/php\/jqGridLoader.php(169): jqGridLoader->__call('oper', Array)\n#4 \/usr\/local\/www\/php\/jqGridLoader.php(169): jqGridLoader->oper('jqbind', 'add')\n#5 \/usr\/local\/www\/index.php(14): jqGridLoader->autorun()\n#6 {main}" }
т.е. от сервера все отправляется...
p.s. кажется трабла исходит отсюда т.е.
Код:
\/usr\/local\/www\/index.php(14): jqGridLoader->autorun()\n#6
выполняется и перерисовывает все заново - вот теперь вопрос - как поискать где оно вызывается?
 
Последнее редактирование:

DimensionSlider

Новичок
Интересно, а как-то можно задать программно значения фильтров в колонках таблицы при открытии страницы?
 

anion

Новичок
У меня есть графа с датой
в функции init прописал
Код:
        $this->query = "
            SELECT *
            FROM tbl_Table
            WHERE {where}
        ";
и указал параметры выборки
$this->where[] = "date = '" . date("Y-m-d")."'";
теперь при первом открытии таблицы или её обновлении открываются только данные за сегодняшнюю дату, а чтобы эта выборка в дальнейшем не мешала я её отключил:
Код:
    protected function buildWhere($where, $glue, $type)
    {

        if (count($where) > 1) {
            if ($where['0'] == "date = '" . date("Y-m-d")."'") {
                unset($where['0']);
            }
        }
        return $where ? implode($glue, $where) : $this->where_empty;
    }
 

DimensionSlider

Новичок
Я правда хотел задать визуально эти отборы, чтобы их было видно в колонках таблицы (в заголовках)

Но как вариант, спасибо.
 

anion

Новичок
так я и визуально указал тоже.
после
<?= $rendered_grid ?>
написал
$("#gs_date").val($.datepicker.formatDate('dd.mm.yy', new Date()));
и теперь дата вставляется, и визуально видно что выборка по сегодняшниму числу
 

casper041290

Новичок
Добрый день, у меня съехала пагинация влево, не подскажите в чем может быть проблема?

Код:
$("#users").jqGrid({
    url: "/admin/******",
    datatype: "json",
    colNames: ['ID', 'Логин', 'Имя'
    ],
    colModel: [
        {name: 'id', index: 'id', title: false, width: 40},
        {name: 'login', index: 'login', title: false},
        {name: 'name', index: 'name', title: false},
    ],
    loadonce:true, // загрузка только один раз, 1 из 2 ( дает отображение)
    pager: '#users', // пагинация
    search:true,
    multiselect: true,
    autowidth: true,
    sortname: 'id',
    sortorder: "desc",
    height: '100%',
    gridview: true,
    viewrecords: true,
    rowNum: 100,        // число отображаемых строк
    rowList: [100, 500, 1000],
    autoencode: true,
    subGrid: true,
 

BaluSer

Новичок
Доброго всем времени суток.

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

<script type="text/javascript">
jQuery(document).ready(function () {
jQuery('#Boxes').jqGrid({
autowidth:true,
caption:'Мои коробки',
datatype:'json',
height:'100%',
hidegrid:false,
multiselect:true,
pager:'#pager',
rowList:[10,15,20,50,2500],
rowNum:15,
viewsortcols:[false,'vertical',true],
url:'/Data/Boxes',
viewrecords:true,
colModel: [
{...
Установлено свойство multiselect в true. Соответственно появляются checkbox для выбора нескольких позиций одновременно, (в базе данных такого поля нет) но если я перехожу на новую страницу или изменяю количество строк, выводимое на экране, то
все checkbox сбрасываются.
Подскажите, что мне нужно сделать для решения этой проблемы?
 
Сверху