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

~WR~

Новичок
Там простой <div> с несколькими <a> внутри.

У контейнера напрямую прописаны классы типа ui-widget-header.
К ссылкам применен виджет jQuery UI Button: http://jqueryui.com/demos/button/

Как вы ручками шаблоны с логикой делаете - то же самое.
На базе классов от jQuery UI легко можно создавать любые интерфейсы, не ограничиваясь стандартными виджетами.
 
  • Like
Реакции: Jnas

Jnas

Новичок
Спасибо !

Также возник еще второй вопрос, у меня есть запрос на подобие
PHP:
  SELECT {fields}  FROM Igra LEFT JOIN decoding ON (Igra .Customer = decoding.Cust) WHERE {where}
но при создании таблицы соответственное не могу редактировать значения, хочу внести изменения в таблицу "Igra", выводит ошибку
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET Status='Доставка', PUR='5', Ping='2.500', Sta' at line 1
как можно решить данную проблему ?
 

~WR~

Новичок
PHP:
$this->table = 'Igra';
- это прописано?

Еще не знаю, как MySQL работает с большими буквами в именах колонок и таблиц. PostgreSQL, например, хочет, чтобы такие имена были в двойных кавычках. Возможно, в этом дело. Лучше всего убрать из имен большие буквы.
 
  • Like
Реакции: Jnas

fandm

Новичок
как сделать как в рисунке , выбор таблиц "Закупка","Закупка2" и т.д.
Об этом речь что ли?

Еще не знаю, как MySQL работает с большими буквами в именах колонок и таблиц.
Подтверждаю. А в Oracle, например, названия всех объектов, а также полей таблиц, без исключения, идут заглавными буквами.
 

Jnas

Новичок
Спасибо, забыл прописать
PHP:
$this->table = 'Igra';
, прописал и на всякий сделал все буквы маленькими, теперь работает нормально !
jQuery UI Button - взял на заметку)

P.S. без лукавства, нравиться мне jqGridPHP))) даже очень!


Возникли еще вопросы :
1) Не нашел как изменить окошко редактирование на другой размер , таблицу как сделать размерами побольше нашел, а окошко редактирование нет(
1.JPG
2) Не могу понять почему так, имеется одна из ячеек следующая
PHP:
 'status'=>array('label' => 'Статус',
								'width' => 10,
								'align' => 'center',
								'editable' => true, 
								'edittype'  => 'select',
								'editoptions' =>  array('value'=> array("Принят" ,"Доставил","Перенос на ожидания поль.ля","Не принят","Под вопросом","Готовность",)) 

								),
в Mysql столбец "status" имеет аналогичные же значение и тип данного столбца "enum"

Так вот редактирования значения , допустим выбираю "Доставил" нажимаю "ok" смотрю на таблицу и там выставлен "Принят", то есть выбирает на один адрес(значения) меньше, будто не с нуля считает, а с единицы.
 

~WR~

Новичок
1) Не нашел как изменить окошко редактирование на другой размер , таблицу как сделать размерами побольше нашел, а окошко редактирование нет(
Ширина задается в свойствах формы. Например, вот так (добавить в конец init).
PHP:
$this->nav['prmEdit']['width'] = '800';
$this->nav['prmAdd']['width'] = '800';
2) Не могу понять почему так, имеется одна из ячеек следующая
На сервер передаются ключи массива из value. В данном случае ключи будут 0,1,2,3...

Напишите вот так:
PHP:
array(1 => 'Принят', 2 => 'Доставил'..
Еще есть такая проблемка, что в Хроме объекты не сохраняют порядок. Поэтому value для select'ов лучше дополнительно оборачивать в объект.
PHP:
'editoptions' =>  array('value'=> new jqGrid_Data_Value(array(1 => "Принят" , 2 => "Доставил"))),
Тогда не будет проблем с порядком option'ов.
 
  • Like
Реакции: Jnas

Jnas

Новичок
Спасибо за ответ.
Ширина задается в свойствах формы.
C этим разобрался, с Вашей же помощью конечно.
А если требуется задать ширину поля редактирование (внесение записи) (в firebug определяется под классом DataTD)
Пробовал искать в инете, также пробовал разные вариация, я конечно подозреваю , что с помощью "editGridRow", но что то туго...
типо того у "Name" одна ширина, у "Date" другая
 

fandm

Новичок
Вот тут поищите абзац
In editoptions we can set all the possible attributes for this field. For example,
Это настройка colModel.

Я также использую и прямое указание style, например:
PHP:
		$this->cols = array(
			
						'myfield'  => array(
								...
								'editoptions' => array(
									'style'    => 'width: 100px;'
								),
								...
						),
						...
		);
 
  • Like
Реакции: Jnas

fandm

Новичок
На то ж он и jqGridPHP, чтобы бОльшую часть кода по настройке jqGrid перенести на серверную сторону. ;-) Хоть это и не рекомендуется, но я даже делаю так:
PHP:
		$this->options = array(
						...
							'gridComplete'=> new jqGrid_Data_Raw('function(){$(this).jqGrid(\'extHighlight\');}'), //Чтобы отработала функция parseRow (ниже)
						...
						);
, чтобы не писать это в HTML-шаблоне. Мне архитектурно так удобнее. :)
 
  • Like
Реакции: Jnas

sirba

Новичок
Здравствуйте. Подскажите пожалуйста почему
PHP:
var opts = {
   'onInitializeForm' : function(form_id) {
                      console.log(form_id);      
   }
};
<?=$jq_loader->render('jqSimple');?>
$grid.filterToolbar();
onInitializeForm - не срабатывает
 

fandm

Новичок
sirba, Вы не туда onInitializeForm прописываете. Это параметр метода editGridRow, например.
Вот.
 

~WR~

Новичок
Если нужна дополнительная логика на редактирование, то проще навигатор делать в JS-коде.

Отключаем его созданием на серверной части:
PHP:
$this->nav = null;
Пишем сами в шаблоне:
PHP:
<?=$jq_loader->render('jqSimple');?>
$grid.navGrid(pager, 
{
    add: true, 
    edit: true, 
    refresh: true
}, 
//edit options
{
   'onInitializeForm' : function(form_id) 
   {
        console.log(form_id);      
   }
},
//add options
{
   'onInitializeForm' : function(form_id) 
   {
        console.log(form_id);      
   }
});
Немного неудобно, но так уж разработчики jqGrid сделали.
Часто настройки для Add и Edit одинаковые, поэтому их можно где-то раньше сохранить в переменную и подставлять уже её. Будет получше выглядеть.
 

fandm

Новичок
Можно написать и:
PHP:
$grid.jqGrid('editGridRow', $grid.jqGrid('getGridParam','selrow'),
{ //edit options
   'onInitializeForm' : function(form_id) 
    {
                      console.log(form_id);      
   }
}
);
Тогда можно оставить навигатор в PHP-коде.
А штатную кнопку edit не показывать, а добавить свою с такой же иконкой. :) Но это больше для эстетов.
Или для таких как я, кто не пользуется штатными кнопками навигатора, а делает свои кнопки на своём тулбаре, как это обычно делается в GUI-приложениях.
 

Jnas

Новичок
Возникли еще вопросы:

1) таблица моя выводит значения как мне нужно , тобишь по примеру
PHP:
SELECT *FROM {from}
.
Решил сделать "Всего:" и тут возник вопрос, как сделать "Всего:" прописал
PHP:
"db_agg" => "count()"
но тут мне нужно знать count не всего, а только то, что попадает под условие, к примеру
PHP:
SELECT *FROM {from} WHERE a.status = 'Связь'
Но при этом выводила всю таблицу
2) По примерам на сайте, и по пояснениям в форуме я понял как сделать надпись на подобие "Всего: {count}", возможно ли сделать надпись "Всего: {count} настроек" , то есть можно ли добавить после {count} которую я указываю в
PHP:
"db_agg" => "count()"
в конец надпись "настроек" ?
3) Не нашел в "formatter" такую надстройку как бы "Note", чтобы можно было создавать записи с переносом строк, типа как fetch[1].jpg , подскажите куда копать?

P.S. старался изъясниться по человечески, извините , если что не так... мозг забит/кипит...
 

~WR~

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

В свойствах колонки:
PHP:
"db_agg" => "count(CASE WHEN a.status='Связь' THEN 1 END)"
Будет считать кол-во рядов, отвечающих условию.

Далее перегружаем функцию:
PHP:
protected function getDataAgg()
{
    parent::getDataAgg();
    $this->agg['col_name'] = 'Всего: ' . $this->agg['col_name'] . ' настроек';
}
Вместо col_name - имя вашей колонки, в которой выводится значение.

Далее включаем footerRow как в этом примере:
http://jqgrid-php.net/examples/?render=jqCols
PHP:
var opts = {
    'footerrow'    : true,
    'gridComplete' : function()
    {
        $(this).jqGrid('extFooterAgg');
    }
};
Всё. Должно работать.
 
  • Like
Реакции: Jnas

~WR~

Новичок
3) Не нашел в "formatter" такую надстройку как бы "Note"
Это свойство колонки 'edittype' => 'textarea'.

formatter'ы - это изменение вывода в ячейках грида, другая степь совсем. :)
 
  • Like
Реакции: Jnas
Сверху