webew
Войти » Регистрация
 
PHP
JavaScript

Трудности с jqGrid

17 декабря 2012, 18:36
Автор: Misscelica
Добрый день.
Возникла следующая ситуация. У меня есть таблица, сформированная через плагин jqGrid, данные в которую подгружаются из базы данных через РНР. В одном из столбцов выводится количество записей для каждой строки в зависимости от других полей, с выборкой проблем нет, всё выводится корректно. Нужно, чтобы, при переходе по каждой из этих цифр (последняя колонка в таблице), открывалась бы страница, в зависимости от того, какие данные передаются (у меня это statusid, flightid, campid), файл на сервере уже существует, куда должна вести эта ссылка. Перечисленные мной данные я передаю с помощью РНР, в инструментах разработчика в Хроме я вижу, что они передаются. Думаю, что надо написать функцию на Javascript, используя function name (cellvalue, options, rowObject), но как это сделать возникают трудности, не понимаю синтаксиса таких функций, помогите, пожалуйста.http://webew.ru/f/ZhXaaYNY.jpg
Добавить комментарий

1234ru

Похоже, требуется сделать следующее:

1. Найти код инициализации jqGrid вида:

$("что-то").jqGrid({
    colNames:...,
    colModel:...
});



2. В colModel найти строку, соответствующую интересующей колонке. Ей добавить параметр -
formatter:sidesCountFormatter

(sidesCountFormatter - это имя будущей функции, оно может любым; главное - чтобы было таким же, как и в п.3).

Если formatter уже есть, то нужно найти функцию, указанную как formatter, и п. 3 проводить с ней.


3. Создать функцию.
Согласно документации, она должна принимать три параметра.
Что эти параметры из себя представляют на практике, мне пока не совсем понятно, поэтому для начала придется на них посмотреть в консоли. Поэтому функцию пусть будет для начала следующего вида:

function sidesCountFormatter(cellvalue, options, rowObject) {
    console.log('смотрим sidesCountFormatter');
    console.log(cellvalue);
    console.log(options);
    console.log(rowObject);
}



Видимо, эта функция должна выполняться при построении каждой из строк таблицы.

На данном этапе нужно найти в консоли то, что из нее получится, развернуть вложенное дерево (если разворачивается) и показать скриншот (ну или словами описать, что там).


Да, еще важный вопрос.
По какому алгоритму должна формироваться ссылка?
То, что не убивает нас, делает нас инвалидами.
18.12.2012, 04:51
Ответить
NO USERPIC

Misscelica

jqGrid у меня инициализируется,
$(function(){
    $('#table1').jqGrid({
        url:'/emc/ajax/getcamp.php',
        height: 800,
        autowidth: true,
        rowNumbers: true,
        mtype: 'POST',
        datatype: 'json',
        jsonReader: {repeatitems : false, id: "0"},
        colModel: [
            {name: 'client', label: 'Клиент', width:40, align:'center'},
            {name: 'campany', label: 'Кампания', width:60, align:'center'},
            {name: 'campid', hidden: true},
            {name: 'flight', label: 'Флайт', width:70, align:'center'},
            {name: 'flightid', hidden: true},
            {name: 'st', label: 'С', width:40, align:'center'},
            {name: 'en', label: 'По', width:40, align:'center'},
            {name: 'status', label: 'Статус', width:60, align:'center'},
            {name: 'statid', hidden: true},
            {name: 'col', label: 'Количество сторон', width:50, align:'center', formatter: linkformatter, formatoptions: {target: '_blank'}},
            {name: 'statuscamp', label: 'Статус кампании', hidden: true, width:80, align:'center'},// группировка по статусу рекл. кампании   
        ],
        pager: jQuery('#ptable1'),
        viewrecords: true,
        gridview: true,
        caption: 'Рекламные кампании',
        hidegrid: false,
        grouping: true,
        groupingView: {
            groupField: ['statuscamp'],
            groupColumnShow: false
        },
        beforeSelectRow: function (rowid, e) {
        var $myGrid = $(this),
            i = $.jgrid.getCellIndex($(e.target).closest('td')[0]),
            cm = $myGrid.jqGrid('getGridParam', 'colModel');
        return (cm[i].name === 'cb');
    },     
    });
    $("#table1").navGrid('#ptable1',{add: false, edit:false, del:false, search: false, refresh:true});
});

С этим проблем не возникает. В colModel у меня за нужный столбец отвечает
{name: 'col', label: 'Количество сторон', width:50, align:'center', formatter: linkformatter, formatoptions: {target: '_blank'}}

Параметр formatter я добавила - linkformatter - моя функция. Я ее попыталась написать:
function linkformatter(cellvalue, options, rowObject){
 var link = '<a href="/emc/ooh/mylist.php?campid=' + rowObject[5] + '&flightid=' + rowObject[2] + '&statid='+rowObject[3]+'" target="_blank" '+'>'+cellvalue+'</a>';   
 return link;
}

Теперь при переходе по ссылке действительно открывается нужная страница, но там выводится не та информация.
Мне не понятно, что за параметры у функции cellvalue, options, rowObject?

Я попробовала написать функцию, как вы написали, но теперь в каждой строке нужного столбца underfined. А где именно в консоли смотреть? Я пользуюсь Хромом, инструментами разработчика.
Спасибо
18.12.2012, 15:31
Ответить

1234ru

Так, уже хорошо.
Осталось теперь разобраться с видом cellvalue, options и rowObject.

Для этого в код linkformatter (лучше в начало) нужно добавить:

   console.log('смотрим linkformatter');
    console.log(cellvalue);
    console.log(options);
    console.log(rowObject);


(оставшийся код можно поместиь в комментарий, он пока не нужен).


Консоль входит в стандартный набор средств разработчика в браузере Chrome.
Открыть консоль можно, нажав F12 и выбрав последнюю вкладку в верхнем меню панели (она так и называется - Console).
То, что не убивает нас, делает нас инвалидами.
19.12.2012, 00:26
Ответить
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: раскидка по почтовым ящикам доступна многим