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

DimensionSlider

Новичок
Есть вложенные таблицы, вложенная не заполняется.

Пробовал этот Вариант, в коде это видно, но не работает.
Записи добавляются, а поле contact_id продолжает быть равным Null


Заработало.
Но только после того как я добавил в выбранные поля id и contact_id
Почему? Я должен обязательно выводить эти поля?

Хотя впринципе я только что задал им width 0 и их как бы нет.

Баг или фича? :)
 

~WR~

Новичок
Sema, наберите в консоли:
PHP:
console.dir($grid.get(0).p)
И запостите результат.

DimensionSlider
Да, следует либо объявлять эти колонки как hidden, либо напрямую добавлять их в operData.
PHP:
protected function operData($r)
{
    $r['foo'] = $this->input['foo'],
    $r['bar'] = $this->input['bar'],
    
    return $r;
}
Автоматом в operData добавляются только те колонки, которые явно определены в $this->cols.
Если по умолчанию писать в запрос все приходящие переменные, то можно нарваться на ошибку SQL или перезаписать что-то лишнее.

Впрочем, это все можно изменить, перегрузив тот же operData и вернув то, что требуется. Все входящие переменные как есть доступны в $this->input.
Не забывайте только, что там приходит куча технической ерунды, которая определяет имя грида, операцию, защиту от кеширования в IE6 и т.д.

Правильнее делать на клиенте, т.к. избежите проблем с редактированием таких колонок.
 

DimensionSlider

Новичок
Спасибо. Пока скрыл колонки через hidden, все работает.

Укажите пожалуйста направление.
Нужно вставить тег audio вокруг значения ячейки.
Вы говорили можно как-то через formatter или через encode.
Можно чуть подробнее?
 

Sema

Новичок
Sema, наберите в консоли:
PHP:
console.dir($grid.get(0).p)
И запостите результат.
Что-то надо раскрыть подробнее?

PHP:
ExpandColumn: null
_height: 47
_nvtd: Array[2]
afterInsertRow: null
ajaxGridOptions: Object
altRows: false
altclass: "ui-priority-secondary"
autoencode: false
autowidth: false
beforeRequest: null
beforeSelectRow: null
caption: ""
cellEdit: false
cellLayout: 5
cellsubmit: "remote"
cellurl: "?jqgrid=jqCols"
colModel: Array[3]
colNames: Array[3]
datatype: "json"
deselectAfterSort: true
direction: "ltr"
disableClick: false
editurl: "?jqgrid=jqCols"
emptyrecords: "Нет записей для просмотра"
footerrow: false
forceFit: false
gridComplete: function ()
gridstate: "visible"
gridview: false
height: 150
hiddengrid: false
hidegrid: true
hoverrows: true
id: "jqCols"
jsonReader: Object
keyIndex: false
lastpage: "1"
lastsort: 0
loadBeforeSend: null
loadComplete: function (data)
loadError: null
loadonce: false
loadtext: "Загрузка..."
loadui: "block"
mtype: "POST"
multiboxonly: false
multikey: false
multiselect: false
multiselectWidth: 20
nv: 0
onHeaderClick: null
onPaging: null
onRightClickRow: null
onSelectAll: null
onSelectRow: null
onSortCol: null
ondblClickRow: null
page: "1"
pager: "#jqCols_p"
pagerpos: "center"
pgbuttons: true
pginput: true
pgtext: "Стр. {0} из {1}"
postData: Object
prmNames: Object
reccount: 12
recordpos: "right"
records: "12"
recordtext: "Просмотр {0} - {1} из {2}"
remapColumns: Array[0]
resizeclass: ""
rowList: Array[0]
rowNum: 20
rownumWidth: 25
rownumbers: false
savedRow: Array[0]
scroll: false
scrollOffset: 18
scrollrows: false
search: false
selarrrow: Array[0]
selrow: null
shrinkToFit: true
sortname: "id"
sortorder: "asc"
subGrid: false
subGridModel: Array[0]
subGridWidth: 20
tblwidth: 47
toolbar: Array[2]
totaltime: 5
treeANode: -1
treeGrid: false
treeGridModel: "nested"
treeReader: Object
tree_root_level: 0
url: "?jqgrid=jqCols"
userData: Object
userDataOnFooter: false
viewrecords: false
viewsortcols: Array[3]
width: 65
xmlReader: Object
__proto__: Object
 

~WR~

Новичок
Странно. Всё есть вроде. И 'p', и 'userData' в нём.
Какая версия jqGrid?

Перед строкой с ошибкой добавьте console.dir(this);
Что покажет?
 

Sema

Новичок
Странно. Всё есть вроде. И 'p', и 'userData' в нём.
Какая версия jqGrid?

Перед строкой с ошибкой добавьте console.dir(this);
Что покажет?
jqGrid версии 3.6.1
вставил, без изменений.

Щас попробую установить более свежую версию.
 

Sema

Новичок
Аллилуя!!! заработала) обновился до версии 4.3.2

~WR~, спасибо за помощь!
 

DimensionSlider

Новичок
Подскажите пожалуйста по такому вопросу
Добавляю date picker в область поиска.
Выбор из виджета календаря выдает строки в формате 04/11/2012 и в итоге не работает.
Подскажите как настроить?

Разобрался

PHP:
		'datetime_stamp'   =>array('label' => 'Дата/время звонка',
								'width' => 4,
								'align' => 'center',
								'editable' => false, 
									'searchoptions' =>  array
									(
														'dataInit' => new jqGrid_Data_Raw
														(
															'function(el){$(el).datepicker(
															{															
																dateFormat: "yy-mm-dd" 
															}
															);}'
														)
									),															
								),
Новичкам вроде меня: описание стандартного datepicker смотреть здесь
 

Игорь2000

Новичок
Уважаемый WR. Спасибо за ответ. Еще вопрос - как сделать простую колонку нумерации строк? Спасибо.
 

yadenis

Новичок
Здравствуйте, ~WR~. Подскажите, пожалуйста. Хочу видоизменить стандартные формы редактирования и добавления записей. Как я понял это можно сделать только полностью заменив стандартную форму на свою? Для просто таблицы всё более менее ясно, а как поступить если нужно изменить формы вложенной таблицы?

Спасибо.
 

~WR~

Новичок
Вложенная таблица ничем не отличается от основной. :)

Если изменения не слишком радикальные, то цепляемся на эвент beforeShow и через jQuery правим форму.
Если совсем всё новое, то проще определить отдельные функции. И кнопочки добавлять на тулбар через navButtonAdd.

jQuery UI Dialog в помощь.
 

MrZaYaC

Новичок
Помогите подключить таблицу... я только учусь программировать, так что не бейте больно :)

сразу код:
PHP:
require "php/jqGridLoader.php";
	$loader = new jqGridLoader;
	#Set grid directory
	$loader->set("grid_path", "php/");
 
#Use PDO for database connection
$loader->set("db_driver", "PDO");
 
#Set PDO-specific settings
$loader->set("pdo_dsn"  , "mysql:dbname=evm_crm;host=127.0.0.1");
$loader->set("pdo_user" , "evm_crm");
$loader->set("pdo_pass" , "qwerty");
$loader->autorun();
class jqUsers extends jqGrid
{
    protected function init()
    {
        $this->table = 'users';
 
        $this->cols = array(
            'id'          => array('label' => 'ID',
                                   'width' => 10,
                                   'align' => 'center',
                                   ),
 
            'fio'  => array('label' => 'FIO',
                                   'width' => 25,
                                   'editable' => true,
                                   ),
 
            'tel'   => array('label' => 'tel',
                                   'width' => 25,
                                   'editable' => true,
                                   ),
 
            'mob'    => array('label' => 'mob',
                                   'width' => 25,
                                   'align' => 'center',
                                   'editable' => true,
                                   ),
			'gp_id'    => array('label' => 'gp_id',
                                   'width' => 25,
                                   'align' => 'center',
                                   'editable' => true,
                                   ),
        );
    }
}	
	
?>
<script>
{$loader->render('jqUsers')}
</script>
на странице ничего нет, где я что не так пишу?
 

~WR~

Новичок
Скорее всего, нет подключения JS и CSS файлов.
Посмотрите код страницы в примерах - содержимое тега <head>.
 

MrZaYaC

Новичок
я сейчас скопировал весь архив... запустил /examples/install.php он базу набил, захожу в /examples ... таблицы нет...

да все верно, не тот путь в шапке к скриптам был....
 
Сверху