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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Если ты пишешь для себя лично, а остальные нужны для лайков - то просто пиши как хочешь. Я так свое пишу.
Если нужна аудитория - пиши что нужно другим :)
 

mictor1973

Новичок
Вопрос к знатокам:
как обработать событие "onClose" модального окна редактирования/добавления ?

кнопку "SUBMIT" я обрабатываю так:
$grid.bind('jqGridAddEditClickSubmit', function() {
alert("Нажали кнопку submit");
});

А как обработать закрытие окна редактирования/добавления ума не приложу.

Этот код не пашет:
$grid.bind('onClose', function() {
alert("Выход без сохранения");
});
 

~WR~

Новичок
Бегло посмотрел исходники jqGrid. Не вижу отдельного bind() у них на этот случай.
Вот так сработает, но на все гриды на странице:
Код:
$.jgrid.edit.onClose = function() {
    return true;
}
В теории, это можно в аргументы navGrid передать, но не очень удобно. Как минимум, нужно дважды повторять на создание и редактирование.
 

mictor1973

Новичок
$.jgrid.edit.onClose = function() { return true; }
Спасибо. Так не работает. Может я его не в то место ставлял....

Сделал так:
$this->nav['prmEdit']['onClose'] = new jqGrid_Data_Raw('my_func_onClose');

<script>
.....
function my_func_onClose(data) {
alert('Закрываем окно редактирования!!');
return data;
}

</script>

 

mictor1973

Новичок
Вопрос к гуру:
Как сделать все строки одинаковой высоты?
В таблице есть поле с с типом 'textarea' . И если в нём забит многострочный текст, то в таблице эта строка делается ооочень высокой.
нашёл в инете :

.ui-jqgrid .ui-jqgrid-htable th {
height:2em!important;
}
.ui-jqgrid tr.jqgrow td{
height:1em!important;
}


Но как это присобачить в PHP ума нехватет.
 

AnrDaemon

Продвинутый новичок
Какое отношение CSS имеет к PHP?
И потом, !important нужен только в очень, ОЧЕНЬ, ОЧЕНЬ редких случаях, когда надо пристрелить весь каскад наследования.
 

DimensionSlider

Новичок
Подскажите пожалуйста, как отладить вот такую ситуацию

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

GIF скринкаст
http://recordit.co/tE8sPNzsGL

Все, разобрался. У меня вызывалась функция на JS, которая устанавливала некорректный фильтер.
 
Последнее редактирование:

d1mas

Новичок
Здравствуйте, уважаемые форумчане.
Благодарю автора и всех участников за потраченное время и усилия по развитию продукта.
Грид запустил, простые таблицы выводить научился, даже в коде немного разобрался.
Прошу консультации вот по какому вопросу:
Пытаюсь реализовать что-то типа календаря, а именно график работы сотрудников на неделю.
Т.е. по оси Х нужно построить недельный календарь - Пн, Вт, Ср и т.д.
По оси Y перечислены сотрудники. На пересечении Сотрудник -> день недели ставим галочку, если он работает.
Естественно дни недели привязываются к датам.
Вычислить соответствие дат дням недели - не проблема.
Даже грид на одну неделю я "родил":
Код:
SELECT UserId AS id, UserFirstName AS Master, RoleId AS UserRole,
SUM(IF(ScheduleDate = '".$date_mon."',rec_schedule.ScheduleId,0)) as date_mon,
SUM(IF(ScheduleDate = '".$date_tue."',rec_schedule.ScheduleId,0)) as date_tue,
SUM(IF(ScheduleDate = '".$date_wed."',rec_schedule.ScheduleId,0)) as date_wed,
SUM(IF(ScheduleDate = '".$date_thu."',rec_schedule.ScheduleId,0)) as date_thu,
SUM(IF(ScheduleDate = '".$date_fri."',rec_schedule.ScheduleId,0)) as date_fri,
SUM(IF(ScheduleDate = '".$date_sat."',rec_schedule.ScheduleId,0)) as date_sat,
SUM(IF(ScheduleDate = '".$date_sun."',rec_schedule.ScheduleId,0)) as date_sun
from rec_schedule right outer join rec_users on ScheduleMaster = UserId
where rec_users.RoleId < 10
group by UserId
, где переменные $date_xxx - даты конкретной недели.
Данный запрос строит нужную мне таблицу, но как потом перемещаться по календарю вперед и назад - тайна, покрытая мраком.
Научился передавать параметры через userData и postdata, но поймать точку, где существует переменная, переданная через postdata и query для БД одновременно - не получается.
Данные в БД хранятся просто. ScheduleId, UserId, ScheduleDate. Т.е. на конкретную дату может работать несколько человек. А в какой-то день никого. Но выводить нужно полную неделю.
Вижу два варианта:
1. Делать простой запрос типа select {fields} from {$this->table} where ScheduleDate between 'дата начала недели' AND 'дата конца недели'. Тут с селектом просто, но нужно переписывать построение таблицы. Жесть.
2. Оставлять запрос таким, какой есть, но реализовать перемещение по неделям вперед-назад. Тут ступор. Научился менять таким образом "where", но как добраться до query не представляю.
Прошу совета, куда правильней копать. Заранее благодарю.

UPD.
Выкрутился переписав функцию buildQueryRows.
 
Последнее редактирование:

wfire

Новичок
Здравствуйте!
Прошу прощения за вопрос, который уже поднимался в теме, но предложенные решения не принесли результата.
Суть в том, что отображается пустой грид, без данных.
Файл index.php:
Код:
<?php
    require 'config.php';
         require_once($_CONFIG['root_path'] . 'jqGridLoader.php');
    $jq_loader = new jqGridLoader();
    $jq_loader->set('grid_path', 'grids' . DIRECTORY_SEPARATOR);

    $jq_loader->set("db_driver", "PDO");
    $jq_loader->set('pdo_dsn', $_CONFIG['pdo_dsn']);
    $jq_loader->set('pdo_user', $_CONFIG['pdo_user']);
    $jq_loader->set('pdo_pass', $_CONFIG['pdo_pass']);
    $jq_loader->addInitQuery('SET NAMES utf8');

$jq_loader->set('debug_output', true);

$jq_loader->autorun();

$grid = 'jqSimple';
$grid = preg_replace('#[^a-zA-Z0-9_-]#', '', $grid); //safe

$rendered_grid = $jq_loader->render($grid);

?>

<!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>My First Grid</title>

<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui.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-1.11.0.min.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>
<script src="js/jqgrid-ext.js" type="text/javascript"></script>

</head>
<body>

<script>
       <?= $rendered_grid ?>
    </script>
</body>
</html>

Файл jqSimple.php:
Код:
<?php

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

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

        #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;
    }
}

А вот это показывает Firebug на закладке Response:
Код:
<!--error--><br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at X:\home\griddy\www\mygrid\index.php:1) in <b>X:\home\griddy\www\mygrid\php\jqGrid.php</b> on line <b>1744</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>{ "page": "1", "total": "75", "records": "1500", "rows": [ { "id": "1", "cell": [ "1", "Manuel", "Herman", "[email protected]", "19157417180", "0.09" ] }, { "id": "2", "cell": [ "2", "Douglas", "Adam", "[email protected]", "79089569929", "0.23" ] }, { "id": "3", "cell": [ "3", "Lewis", "Todd", "[email protected]", "29134870786", "0.08" ] }, { "id": "4", "cell": [ "4", "Philip", "Dennis", "[email protected]", "19185015269", "0.09" ] }, { "id": "5", "cell": [ "5", "Raul", "Jim", "[email protected]", "49123748996", "0.10" ] }, { "id": "6", "cell": [ "6", "Dwight", "Ryan", "[email protected]", "39101220016", "0.00" ] }, { "id": "7", "cell": [ "7", "Neil", "Steven", "[email protected]", "39042299077", "0.10" ] }, { "id": "8", "cell": [ "8", "Virgil", "Leonard", "[email protected]", "49105020501", "0.21" ] }, { "id": "9", "cell": [ "9", "Jordan", "Carl", "[email protected]", "59063929145", "0.15" ] }, { "id": "10", "cell": [ "10", "Lloyd", "Gene", "[email protected]", "59009365541", "0.24" ] }, { "id": "11", "cell": [ "11", "Phillip", "Chester", "[email protected]", "79034830496", "0.01" ] }, { "id": "12", "cell": [ "12", "Martin", "Harold", "[email protected]", "19072058754", "0.15" ] }, { "id": "13", "cell": [ "13", "Raymond", "Tracy", "[email protected]", "69025468981", "0.26" ] }, { "id": "14", "cell": [ "14", "Joe", "Stephen", "[email protected]", "69011015214", "0.13" ] }, { "id": "15", "cell": [ "15", "Frank", "Jay", "[email protected]", "29181554877", "0.05" ] }, { "id": "16", "cell": [ "16", "Roberto", "Clifford", "[email protected]", "59185086501", "0.21" ] }, { "id": "17", "cell": [ "17", "Salvador", "Dale", "[email protected]", "49196294325", "0.12" ] }, { "id": "18", "cell": [ "18", "Mathew", "Andy", "[email protected]", "79232409494", "0.28" ] }, { "id": "19", "cell": [ "19", "Gene", "Leslie", "[email protected]", "39153484595", "0.07" ] }, { "id": "20", "cell": [ "20", "Angel", "Max", "[email protected]", "49094374898", "0.27" ] } ], "userdata": { "agg": { "_count": "1500" } }, "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" } }

То-есть данные из базы берутся, но причиной ошибки является сообщение о том, что заголовок уже был отправлен и т.д...
Проблема в том, что не могу найти, что у меня в коде неверно....
 
Последнее редактирование:

anion

Новичок
Здравствуйте!
Прошу прощения за вопрос, который уже поднимался в теме, но предложенные решения не принесли результата.
Суть в том, что отображается пустой грид, без данных
...
Попробуйте ради интереса в файле index.php php код перенести в низ, т.е. чтобы он срабатывал после генерации странички. по моему у меня чтото похожее было.
 

anion

Новичок
попробуй закоментируй строку с grid.locale-ru.js
заметил что у тебя есть jquery-ui.css, но нет jquery-ui.min.js
пересохраните все файлы в utf-8 без BOM, я с grid.locale-ru.js так попадал

я меня использовались эти версии
 

Вложения

  • 335,1 KB Просмотры: 9
Последнее редактирование:

ezhikov

Новичок
Приветствую, товарищи.

Есть ли у кого адаптер для MS Access, поделитесь, пожалуйста? Что-то не получается самому настроить, штатный поиск не работает (по всем полям, участвующим в поиске, получаю ... LIKE '%%', хотя в POSTe уходят все значения условий ) :)
 
Последнее редактирование:

~WR~

Новичок
А мне кажется, уже в комплекте должно быть.
Коннектимся через PDO, и наследуемся от адаптера jqGrid_Adapter_Mssql.

Там самое главное, что он делает - это LIMIT \ OFFSET через ROW_NUMBER().
Не самый быстрый вариант, но для старых версий выбора особо не было.

Для новой версии, видимо, нужно только LIMIT заменить на TOP X в начале выражения.
Можно прицепить прямо к функции, которая генерирует колонки.
 
Сверху