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

  • Автор темы Автор темы ~WR~
  • Дата начала Дата начала
Подскажите пожалуйста - как можно , зная id записи в гриде ,перейти на эту запись и ее выделить, то есть эта запись может быть на любой странице
 
Подскажите пожалуйста - как можно , зная id записи в гриде ,перейти на эту запись и ее выделить, то есть эта запись может быть на любой странице
Есть у меня такая функция, но она написана специально для работы только с PostgreSQL, поэтому не включена в public-версию.

Для MySQL реализация будет примерно такая.

Создаем новую custom-операцию:
http://jqgrid-php.net/doku.php?id=wiki:oper-custom

В ней ищем, в каком ряду относительно других находится строка с нашим id.
Номер ряда в MySQL получают как-то так: http://snippets.dzone.com/posts/show/6831
Вычисляем, на какой странице будет эта строка, возвращаем номер страницы клиенту.

На клиенте напрямую выставляем пришедший номер страницы: .setGridParam('page', page);
Перезагружаем грид: .trigger('reloadGrid');
После перезагрузки выделяем ряд с нужным id через .setSelection.
 
Спасибо.....Еще один вопрос - можно ли в зависимости от значения одного поля раскрасить всю строку. Заранее спасибо за ответ
 
можно ли в зависимости от значения одного поля раскрасить всю строку.
Можно, это делается в parseRow. Например
PHP:
		if($r['myfield'] == 1) {
			$r['_class'] = 'red';
		}
,
где red- это класс из jqgrid-ext.css.

Добавлю. Чтобы отработал parseRow, необходимо соблюсти одно условие. Например, ранее я писал свой вариант.
 
~WR~,
день добрый!
А у меня такой вопрос. А если мне необходимо в opEdit выполнить свой updateSQL (OraScript), для Oracle, аля:
PHP:
declare 
...
begin
...
серия DML-операций
...
end;
да ещё и параметризованный?
Нужно что-то с bind-ингом параметров. Это надо адаптер для Oracle дописать самому, да?

И, получается, по вызовам stored procedures тот же вопрос.
 
Да, совершенно правильно. Такие вещи следует дописывать самостоятельно.

Логика тут следующая. jqGridPHP не ставит перед собой цель написать идеальную обертку для работы с БД. У него другая задача.

Предполагается, что если вообще возникла необходимость сделать что-то сложное, значит у вас уже есть какие-то наработки в этом направлении. Будь то ваш любимый фреймворк, ORM, dbSimple, что угодно. И вы можете просто всё это напрямую использовать.

Через jqGridLoader можно передать ссылки на любые объекты вашего приложения.
Подключайте свой autoloader и пользуйтесь статическими методами.

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

По сути, стандартные драйверы преследуют только одну цель - реализовать простейший функционал и дать идею о том, что с ним можно сделать дальше. Если посмотреть код - каждый из них занимает по 50 строк. :)
 
Информация по раскраске рядов и ячеек:
http://jqgrid-php.net/doku.php?id=wiki:client-color

Единственное, обратите внимание на то, как прописаны классы цветов в jqgrid-ext.css
PHP:
.ui-jqgrid .red { background: #FFCCCC; }
Вот этот .ui-jqgrid в начале обязателен, иначе его "перебьет" стандартный стиль.
Firebug вам в помощь. jqGridPHP только классы добавляет, а дальше уже чистая магия css.
 
Если у меня есть грид, в поиске выпадающий селект(фильтр) например "Все, Активные,Неактивные" можно ли грузить грид с уже определенным значением - например сразу фильтр стоит "Активные" и в гриде уже отфильтрованные записи, а при смене фильтра все варианты доступны также..Спасибо
 
например сразу фильтр стоит "Активные"
Скорее всего, сработает вот это:
PHP:
'searchoptions' => array('value' => $my_values, 'defaultValue' => 1);

В defaultValue указываем ключ того значения, которое должно быть выбрано по умолчанию.

Сразу отфильтровать чуть сложнее, потому что первая загрузка у них всегда идет без поиска.
Самый простой вариант:
PHP:
public function output()
{
    if($this->input('_search') !== 'true')
    {
        $this->input['status'] = 1;
    }

    parent::output();
}
Этим мы говорим, что если запросили вывод рядов для грида, и при этом не использовался поиск, то делаем вид, что к нам якобы пришло условие status => 1. Есть еще варианты, но они чуть подлиннее.
 
  • Like
Реакции: jjsf
А я всё-таки решил вписывать условие фильтра в нужный столбец сразу после загрузки грида, а потом делать $grid[0].triggerToolbar(); По крайней мере такой подход получился более универсальным. Сделал функцию аля SetFilter, в кот. передаю к какому столбцу применить фильтр и, собственно, само условие и никаких подготовительных работ делать не надо, можно применить любой фильтр по любому столбцу(ам).
Ну, а если у столбца в toolbar-е не <input type=text>, а select, то тогда чуть по-другому, надо указать selected item, а уже затем - $grid[0].triggerToolbar();.
Если заинтересует такой подход, то опишу более детально.
 
И снова здравствуйте.... Как можно на добавленную кнопку в pagere повесить простую ссылку
PHP:
$grid.jqGrid("navButtonAdd", pager, 
{
    caption : "Добавить", 
    title   : "Добавить", 
    icon    : "ui-icon-circle-plus",    
    onClickButton: function()
    {
 ....
    }
});
 
  • Like
Реакции: jjsf
~WR~
День добрый!

Такой вопрос. А можно как-то из opEdit вернуть некий флаг успешности/неуспешности выполнения операции? Ну, т.е., последовательность действий:
1. Есть грид.
2. Нажимаем кнопку редактирования записи
3. Редактируем
4. Нажимаем "Принять"
5. Выполняется opEdit на серверной стороне
6. Возникает некая ошибка, выводится сообщение об ошибке через throw new jqGrid_Exception_DB, тут понятно
7. И тут хотелось бы не просто, чтобы выводилось сообщение об ошибке, а на клиенте выполнилось некое дополнительное действие в связи с ошибкой (например, открыть диалог редактирования записи снова и сфокусироваться на поле с ошибкой или как-то воспрепятствовать закрытию диалога или что-то в этом роде). Т.е., нужен некий возврат успешности/неуспешности от opEdit.

Стандартными средствами это можно как-то реализовать?
 
По идее, когда выбрасывается исключение - на клиент уходит полная информация о нем.
Далее в jqgrid-ext.js повешен маленький обработчик, который и отвечает за текущий вывод исключений.

Его можно заменить на свой. Просто определите свою функцию afterSubmit.

Если нужна какая-то обработка на стороне сервера, то можно перегрузить функцию catchException.
Она ловит все jqGrid_Exception'ы и отвечает за их вывод. Можно как поменять вывод на свой, так и сделать какие-то свои дополнительные действия. Например, записать что-то в лог.

Выделять конкретный exception лучше всего по его коду.
 
Просто определите свою функцию afterSubmit.
Да, я уже увидел, спасибо. Единственное, если я правильно понял, то afterSubmit отработает только при успешной операции, т.е. если Status == "success" (ну, т.е., в JSON-ответе success = 1).
Но, в принципе, подходит и такой вариант. Если операция была успешной, значит на afterSubmit можно смело делать закрытие диалога, а если неуспешной, то и закрытие, соответственно, не произойдёт. :)
 
Сверху