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

~WR~

Новичок
А еще, используя тот же PostgreSQL или MSSQL, можно сцепить воедино и rows и count запросы.
В некоторых случаях, использование window-функций дает прирост производительности.

1. Выключаем обычный count:
PHP:
$this->do_count = false;
2. Дополняем {fields} для rows запроса таким образом, чтобы в него добавлялись aggregate'ы.
PHP:
protected function buildFields($cols)
{
    $cols = parent::buildFields($cols);
    $cols .= ', count(*) OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS _count';
    
    return $cols;
}
3. Подставляем получившееся значение count'а в $this->agg:
PHP:
protected function parseRow($r)
{
    $this->agg['_count'] = $r['_count'];
    unset($r['_count']);

    return $r;
}
4. Profit! Все работает в один запрос.

Не бойтесь экспериментировать, если что-то работает не так, как хочется. Количество зависимостей в коде постарались сократить до минимума.
 

yadenis

Новичок
Здравствуйте. Насчет загрузки с помощью ajaxFormProxy. Данные добавляются и удаляются нормально, а редактирование работает только для поля с картинкой, остальные поля не сохраняют изменения. Это я что-то делаю не так или это нормальное поведение? :) Если нормальное, то можно как-то это обойти?
Спасибо.
 

~WR~

Новичок
Здесь вроде работает:
http://jqgrid-php.net/examples/?render=jqOperUpload

Можете вынести в интернет пример, в котором не работает?
Если после добавления нажать F5 и только после этого попробовать отредактировать - тоже не сработает?
 

yadenis

Новичок
Немного некорректно задал вопрос.
Если изменения внести вместе с загрузкой картинки то да, все изменяется. А если просто изменить описание (в примере это "Comment"), то изменения не сохраняются.
 

~WR~

Новичок
Понял. Ajax form не хочет отправлять форму без активных input'ов, даже если data заполнено.
Надо выбрасывать сторонние плагины и делать свою версию.

Сегодня-завтра посмотрю.
 

~WR~

Новичок
Залил обновление. Теперь iframe включается только в том случае, если есть хотя бы один файл для загрузки.
 

yadenis

Новичок
Перекачал. Но у меня всё осталось также :-(. Ну и у Вас в примере тоже.
 

yadenis

Новичок
Да действительно Ваш пример заработал, хотя вроде первым делом сбросил кеш когда проверял... У меня правда всё равно не заработало )) Буду разбираться почему. Спасибо за обновление :)
 

DimensionSlider

Новичок
Подскажите пожалуйста такой момент.
Создал две таблицы Контакт и Контактная информация, сделал их вложенными. Контактная информация вложена в Контакт.
Возможно ли заполнять в таком случае подчиненную таблицу?
Т.е. я хочу раскрыв Контакт начать добавлять во вложенную таблицу записи.

Делал как в этом примере http://jqgrid-php.net/examples/?render=jqMiscSubgrid
Данные вставляются, но не заполняется привязка по внешнему ключу и почему-то только значение одного из двух заполненных полей.
 

Вложения

Sema

Новичок
Уважаемый ~WR~, расскажите пож-та как раскрасить строки, как в вашем примере в первых постах.
 

~WR~

Новичок
Примерно так:
PHP:
protected function parseRow($r)
{
    $r['_class'] = array('col1' => 'red', 'col2' => 'green');
    return $r;
}
Вместо 'col1' и 'col2' - имена колонок, которые красить.

'red' и 'green' - имена стандартных классов с цветами. Можно свои добавить.
Посмотрите, как они в CSS прописаны, чтобы не конфликтовали с выделением строки.
 
  • Like
Реакции: jjsf

Игорь2000

Новичок
Добрый день Уважаемый WR.
Подскажите есть ли возможность в jqGrid сделать сортировку данных нескольких стобцов?
А именно - есть таблица бомбардиров (хоккей) - 4 значения (игрок, пас, гол, очки). Хочется сделать сортировку соответственно по очкам, затем при равенстве очков по голам, затем при равенстве того и другого по фамилиям.
Спасибо.
 

~WR~

Новичок
Да. Перегружаем функцию, которая отвечает за сбор кусочка запроса с ORDER BY.
PHP:
protected function buildOrderBy($sidx, $sord)
{
    return "ORDER BY score DESC, goals DESC, name ASC";
}
В аргументах $sidx и $sord - параметры сортировки, которые пришли в запросе со стороны клиента.
С той разницей, что они всегда "чистые". $sidx не нужно escape'ить, а в $sord обязательно будет либо 'asc', либо 'desc'.
Используя их, можно динамически формировать любую сортировку.

Вот еще пример:
http://jqgrid-php.net/examples/?render=jqOutSort
 

yadenis

Новичок
Подскажите пожалуйста такой момент.
Создал две таблицы Контакт и Контактная информация, сделал их вложенными. Контактная информация вложена в Контакт.
Возможно ли заполнять в таком случае подчиненную таблицу?
Т.е. я хочу раскрыв Контакт начать добавлять во вложенную таблицу записи.
вот здесь был ответ
 

yadenis

Новичок
~WR~, подскажите, пожалуйста. Имею вложенную таблицу, в которой есть поле для загрузки файла, соответственно выставляю опции
PHP:
$this->options = array(
			'editurl' => NULL,
			'dataProxy' => '$.jgrid.ext.ajaxFormProxy',
		);
При редактировании или добавлении записей во вложенную таблицу возникает ошибка "URL не установлен". Я предполагаю, что оно не понимает, что данные нужно направить через прокси, это как-то можно реализовать?
 

Sema

Новичок
Примерно так:
PHP:
protected function parseRow($r)
{
    $r['_class'] = array('col1' => 'red', 'col2' => 'green');
    return $r;
}
Вместо 'col1' и 'col2' - имена колонок, которые красить.

'red' и 'green' - имена стандартных классов с цветами. Можно свои добавить.
Посмотрите, как они в CSS прописаны, чтобы не конфликтовали с выделением строки.
Спасибо за скорый ответ.

Прописал в parseRow($r), строки не красились. Далее добавил extHighlight и возникла проблема. Грид серый, не активный, постоянно висит индикация загрузки. Стало так после того как прописал следующее
PHP:
'gridComplete' : function()
    {
        $(this).jqGrid('extHighlight');
    }
Может подскажете, в чем может быть проблема?
 

~WR~

Новичок
Должно быть:
PHP:
'dataProxy' => new jqGrid_Data_Raw('$.jgrid.ext.ajaxFormProxy'),
- если хочется указывать такие опции через php. Иначе он передает параметр как строку.

Если такое нужно очень часто, то можно объявить какую-нибудь функцию:
PHP:
protected function raw($val)
{
    return new jqGrid_Data_Raw($val);
}
PHP:
'dataProxy' => $this->raw('$.jgrid.ext.ajaxFormProxy');
Sema
Посмотрите консоль ошибок javascript. Там обязательно что-нибудь будет.
 
Сверху