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

~WR~

Новичок
Аа, я вспомнил! Правил это недавно, но в реп не попало.
Там у .del отдельный набор настроек по непонятной причине.

В jqgrid-ext.js добавить в конец:
PHP:
$.extend($.jgrid.del,
{
	afterSubmit: function(data)
	{
		var json = $.jgrid.parse(data.responseText);
		var new_id = json.new_id || 0;

		if(typeof(json.error_msg) != 'undefined')
		{
			return [false, json.error_msg, new_id];
		}

		return [true, null, new_id];
	},

	recreateForm : true //recreating form removes a lot of butthurt of form editing
});
 

morozzz

Новичок
Аа, я вспомнил! Правил это недавно, но в реп не попало.
Там у .del отдельный набор настроек по непонятной причине.

В jqgrid-ext.js добавить в конец:
Добавил. По непонятной причине эффект тот же :( ошибки не показывает. Интересно ещё то, что набор настроек по 'add' тоже не добавлен в jqgrid-ext.js однако без него все работает...
Почему же del проглатывает... может у меня с настройками что не так. Кто нибудь попробуйте у себя в методе opDel в начале добавить типа этого "throw new jqGrid_Exception('Ошибка в opDel');" , что бы проверить только у меня так или у всех
 

morozzz

Новичок
Аа, я вспомнил! Правил это недавно, но в реп не попало.
Там у .del отдельный набор настроек по непонятной причине.

В jqgrid-ext.js добавить в конец:
Да, ещё заметил что такое проявляется при загрузке файлов. Ответ с ошибками с сервера не отображается.
Кстати у вас на сайте в примере с загрузкой файлов, также не выдает никаких ошибок пришедших с сервера если файл другого типа или превышен размер и т.п.
 

morozzz

Новичок
Добавил. По непонятной причине эффект тот же :( ошибки не показывает. Интересно ещё то, что набор настроек по 'add' тоже не добавлен в jqgrid-ext.js однако без него все работает...
Почему же del проглатывает... может у меня с настройками что не так. Кто нибудь попробуйте у себя в методе opDel в начале добавить типа этого "throw new jqGrid_Exception('Ошибка в opDel');" , что бы проверить только у меня так или у всех
Блин, чудеса какие то, теперь исключения в opDel отображаются, что это было не понял.. может закешировался файл jqgrid-ext.js и не обновился... но тем не менее теперь всё работает. Спасибо.
Однако по прежнему не работают вывод ошибок через загрузку файлов. Можно с этим что-то сделать?
 

morozzz

Новичок
Всем доброй ночи!
Ставлю в моделе к одной из ячейке
PHP:
'edittype' => "custom",
'editoptions' => array(
  'custom_element' => 'myelem',
  'custom_value' => 'myvalue',
),
вставляю скрипт как здесь описано http://www.trirand.com/jqgridwiki/doku.php?id=wiki:common_rules#custom
PHP:
<script>
function myelem (value, options) {
  var el = document.createElement("input");
  el.type="text";
  el.value = value;
  return el;
}

function myvalue(elem, operation, value) {
    if(operation === 'get') {
       return $(elem).find("input").val();
    } else if(operation === 'set') {
       $('input',elem).val(value);
    }
}
</script>
в браузере при редактировании всплывает окно с ошибкой "e1"
Что сие означает? Я так понял, что функцию не видит или не находит или типа того.
Вообще хочу сделать в ячейке отображение нескольких checkbox из другой зависимой таблицы, хотел вывести через свои функции, но столкнулся с этим и незнаю что делать дальше, может есть другой способ?
 

~WR~

Новичок
Действительно, большого смысла в этих custom'ах нет. Проще использовать события.
PHP:
$grid.bind('jqGridAddEditBeforeShowForm', function($form)
{
    $form.find('#field_name').val(10);
});
Событие вызывается перед показом формы пользователю, и в нем можно что угодно поменять.
 

morozzz

Новичок
PHP:
$grid.bind('jqGridAddEditBeforeShowForm', function($form)
{
    $form.find('#field_name').val(10);
});
Событие вызывается перед показом формы пользователю, и в нем можно что угодно поменять.
Если делать через 'jqGridAddEditBeforeShowForm' я так понимаю нам нужно будет дергать дополнительным запросом для получения нужных значений или создавать дополнительную колонку и через неё обрабатывать данные.
Действительно, большого смысла в этих custom'ах нет. Проще использовать события.
Т.е. такой возможности нет? почему ф-ция не вызывается? Ведь в описании jqgrid такое возможно, я думал это полностью совместимо...
Просто думал может есть уже готовое серверное решение.

Решил вопрос ещё так (через select-ы), может кому понадобится
PHP:
'edittype' => "select",
'editoptions' => array(
  'multiple' => true,
  'value' => array('a','b','c','d','e'...'z'),
),
в parseRow($r) выбираем по нужным параметрам(например по ключу $r['id']) данные для нужной нам ячейки.
указываем полученные данные в ключах через запятую.
Т.е. например $r['alfavit'] = '0,2,3', // ,будут выделены значения а, c, d т.к. счет массива от 0.
Всё хорошо, только вот хотелось бы это реализовать с помощью checkbox-ов, потому как не удобно это выглядит в селектах, при нажатии на какую нибудь строку сбрасываются все выделенные.
 

~WR~

Новичок
А, я понял, что нужно.
Чтобы custom'ы работали, следует задавать их вот так:
PHP:
'edittype' => "custom",
'editoptions' => array(
  'custom_element' => new jqGrid_Data_Raw('myelem'),
  'custom_value' => new jqGrid_Data_Raw('myvalue'),
),
В этом случае он будет считать значения функциями, а не простыми строками.
 

~WR~

Новичок
Еще у jQuery есть несколько плагинов, которые превращают добавляют галочку в select multiple.
Поищите по слову jQuery multiselect.
 

LorDEreTik

Новичок
Такой вопрос. Как мне при инлайн редактировании отослать еще несколько _POST переменных.

PHP:
			ondblClickRow: function(id) {
				if (id && id != lastSel) {
					jQuery("#list").restoreRow(lastSel);
					jQuery("#list").editRow(id, true);
					lastSel = id;
				}
			},
Что нужно изменить?
 

~WR~

Новичок
А посмотрите аргументы для editRow.
Там должна быть либо postData, либо callback на отправку данных.
 

LorDEreTik

Новичок
А посмотрите аргументы для editRow.
Там должна быть либо postData, либо callback на отправку данных.
вот какие параметры:

PHP:
editparameters = {
	"keys" : false,
	"oneditfunc" : null,
	"successfunc" : null,
	"url" : null,
        "extraparam" : {},
	"aftersavefunc" : null,
	"errorfunc": null,
	"afterrestorefunc" : null,
	"restoreAfterError" : true,
	"mtype" : "POST"
}
 
jQuery("#grid_id").jqGrid('editRow',rowid,  parameters);
И я не очень понимаю что именно мне нужно ставить, и как передать.
 

~WR~

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

Похоже, tony чуть изменил синтаксис.
Я помню только такой:
PHP:
jQuery("#grid_id").editRow(rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc);
Здесь extraparam был бы шестым аргументом.
 

LorDEreTik

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

Похоже, tony чуть изменил синтаксис.
Я помню только такой:
PHP:
jQuery("#grid_id").editRow(rowid, keys, oneditfunc, succesfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc);
Здесь extraparam был бы шестым аргументом.

Спасибо, разобрался, вот так ередал

PHP:
jQuery("#list").editRow(id, true, null, null, null,{test:1});
 

LorDEreTik

Новичок
Возможна ли навигация по jqgrid с помощью клавиатурных стрелок вниз/вверх для перемещения по столбцу в режиме инлайн редактирования?
 

SirYorik

Новичок
4aki.zp, спасибо за помощь. Суть ясна.
Извините, снова подниму тему фильтрации по условиям внешней формы.
Поскольку я в целом не вебпрограммист, то суть того как подружить внешнюю форму именно с серверной частью на jqGridPHP мне не ясна, есть ли пример реализации ?

Нужно сделать аналог вот этого примера
http://trahomoto.dlinkddns.com/works/linkexchanger/f4t149/
Но на моём уровне понимания не получается. Грид не применяет фильтр.
 

~WR~

Новичок
Самое простое:

PHP:
$grid.bind('jqGridBeforeRequest', function()
{
    var filter = {'country_id': $('#country_id').val()};

    $(this).setGridParam({'postData': filter});
    return true;
});
Вместо $('#country_id').val() подставляем любой другой код на jQuery, который получит текущее значение фильтра.
Если у вас в гриде есть колонка 'country_id', то он сразу автоматом отфильтрует результаты по ней.
 

~WR~

Новичок
Кстати, посмотрите исходный код страницы, на которую дали ссылку.
Там сделано почти то же самое. Живой пример, живее не бывает. ^^
 

SirYorik

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

Если я добавляю в init() в $this->options 'url => 'index.php', - грид загружается пустой, как будто фильтр (какой?) не вернул данных. То-же понятно, там ничего и нет про обработку фильтрации, а что и как у вас в библиотеке настроить чтобы появилось, не ясно. Сторонние примеры напрямую долго и нудно строят where, что у вас автоматизировано.

А $grid.bind(..... я извините, вообще не понимаю в какое место кода применить.

Нельзя ли в Examples добавить пример с внешней формой, хотябы с одним чекбоксом, там хоть php полный рабочий будет.

Приложение моё несложное, сделано быстро как раз благодаря вашей библиотеке, спасибо вам :). Осталась одна эта закавыка.
 

sirba

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