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

4aki.zp

Новичок
Что я делаю не так?
Я же там потом сам на все и ответил,
Посмотрел через firebug в firefox , так в Мозилле все работает отлично, а вот Опера и Хром как то не понимает.

Хотел показать что написано в editurl: *.php, пока копировал заметил:
При выводе данных было написано
PHP:
header("Content-type: text/xml;charset=utf-8");
а я то использую Json
PHP:
header("Content-type: text/json;charset=utf-8");
так все в порядке

Извините за невнимательность и глупый вопрос, спасибо что ответили
Если это не помогает, проверь правильно ли ты оформил json. и проверь что б у тебя стоял datatype: 'json'

А о закрытии писал ~WR~:
http://www.trirand.com/jqgridwiki/doku.php?id=wiki:form_editing
Тут есть опции 'closeAfterAdd' и 'closeAfterEdit'. Их можно задать через 'navGrid' (prmEdit - вроде есть в примерах).
Но еще лучше, если это нужно для всех ваших гридов, изменить значение по умолчанию:
PHP:
$.jgrid.edit.closeAfterAdd = true;
$.jgrid.edit.closeAfterEdit = true;
Добавьте это куда-нибудь в <head>, после подключения js'ов, но до грида.
 

morozzz

Новичок
Я же там потом сам на все и ответил,

Если это не помогает, проверь правильно ли ты оформил json. и проверь что б у тебя стоял datatype: 'json'

А о закрытии писал ~WR~:
Так я и пишу, потому как не работает, я же ответ заголовков дал, там указаны возвращаемые данные application/json... и указал ответ, он вроде соответствует формату json!?
ставил перед выводом header("Content-type: text/json;charset=utf-8"); всё тоже самое.
Вот и спрашиваю что я делаю не так?
никаких datatype я не вводил, я так понимаю в jqgridphp по умолчанию в формате json работает!
Может первый параметр в строке ответа не должен быть { "success": "1" } или что ещё я уже голову сломал...

Закрытие я думаю сработает после того как я разберусь с ошибкой вывода, поэтому про это вопрос пока отпадает.
 

4aki.zp

Новичок
Вот и спрашиваю что я делаю не так?
ты перед выводом когда header ставишь, если массив используешь, пиши так:
PHP:
header("Content-type: application/json;charset=utf-8");
echo json_encode($array);
,
а если как объект то так:
PHP:
header("Content-type: text/script;charset=utf-8");
echo json_encode($object);
это же важно.
И добавь эти строки
PHP:
datatype: 'json',
	ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
А { "success": "1" } лично у меня его нет, но а мешать он не должен...
 

altair83

Новичок
Всем добрый день.
У меня возникла проблема: есть таблица с возможность загрузки файлов, соответственно перед рендерингом установлены параметры
PHP:
<script>
  var opts ={'caption'	: 'Реестр',
  'editurl'   : null, 
  'dataProxy' : $.jgrid.ext.ajaxFormProxy 
};	
</script>
Но при таких параметрах сообщение в jqGrid_Exception в функции operData не выводится.
Например так:
PHP:
protected function operData($r) {	
  if(isset($_FILES['upload'])) {
    $this->curr_sn=$r['sn'];
    require_once 'classes/upload.class.php';
    $this->upload = new upload($_FILES['upload']);
    if(!$this->upload->uploaded) {
       throw new jqGrid_Exception('Upload failed');
    }
    if(!in_array($this->upload->file_src_name_ext, $this->file_ext)) {
      throw new jqGrid_Exception('Bad file type');
    }
  }

  $r['region']=$_SESSION['login'];
		
  if (strlen($r['gsm'])!=10) {			
    throw new jqGrid_Exception('Длина GSM-номера, должна быть 10 символов');
  }
  return $r;
}
Кстати, в примере http://jqgrid-php.net/examples/?render=jqOperUpload при выборе недопустимого типа файла, сообщение об ошибке так же не выводится.
 

morozzz

Новичок
ты перед выводом когда header ставишь, если массив используешь, пиши так:
PHP:
header("Content-type: application/json;charset=utf-8");
echo json_encode($array);
,
а если как объект то так:
PHP:
header("Content-type: text/script;charset=utf-8");
echo json_encode($object);
это же важно.
И добавь эти строки
PHP:
datatype: 'json',
	ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
А { "success": "1" } лично у меня его нет, но а мешать он не должен...
Смотрите,
При выводе grid я в одном методе (назовем его "grid_render()") указываю:
PHP:
echo "<script>";   

        echo $this->grid->loader->render('grid_lands_categories');
        echo "</script>";
А при выводе данных в json и при обработке операций я использую в другом методе (назовем его "grid()"):
PHP:
$this->grid->loader->oper('grid_lands_categories', 'edit');
$this->grid->loader->output('grid_lands_categories')
Так вот куда я должен поместить
header("Content-type: application/json;charset=utf-8");
echo json_encode($array);
Да и что бы я не размещал в header, output() автоматически возвращает json..
 

morozzz

Новичок
Смотрите,
При выводе grid я в одном методе (назовем его "grid_render()") указываю:
PHP:
echo "<script>";   

        echo $this->grid->loader->render('grid_lands_categories');
        echo "</script>";
А при выводе данных в json и при обработке операций я использую в другом методе (назовем его "grid()"):
PHP:
$this->grid->loader->oper('grid_lands_categories', 'edit');
$this->grid->loader->output('grid_lands_categories')
Так вот куда я должен поместить

Да и что бы я не размещал в header, output() автоматически возвращает json..
Проблема решена!

Значит так, меня сразу стал смущать ответ в виде
PHP:
{ "success": "1" }{ "page": "1", "total": null, "count": "1", "rows": [ { "id": "4", "cell": [ "4", "1", "<img src=\"\/assets\/default\/public\/img\/admin\/button_green.gif\">", "20", "Коттеджи", "тест" ] } ], "userdata": { "agg": { "_count": "1" } } }
возвращается два json так сказать
1 { "success": "1" } - ответ от функции "oper", что всё ок.
2 { "page": "1", "total": null, "count": "1", "rows": [ { "id": "4", "cell": [ "4", "1", "<img src=\"\/assets\/default\/public\/img\/admin\/button_green.gif\">", "20", "Коттеджи", "тест" ] } ], "userdata": { "agg": { "_count": "1" } } } - ответ с данными от "output"

Так вот вместе они сосуществовать не могут по всей видимости, потому функцию "output" и функции операций (edit, add, del) нужно разделять логикой.
сделал так
PHP:
if($this->input->post('id')){
            if(is_numeric($this->input->post('id'))){
            	$this->grid->loader->oper('grid_lands_objects', 'edit');
            }else{
            	$this->grid->loader->oper('grid_lands_objects', 'add');
            }
        }else{
        	$this->grid->loader->output('grid_lands_objects');
        }
После этого всё работает как надо!

Вопрос остался только затем, что мешает сосуществовать нескольким json в ответе, это или в jqgrid так или это изначально считается неправильно.
 

morozzz

Новичок
Кто нибудь знает как вывести просто текст или html в форме редактирования?

При выводе работает если устанавливаю 'encode' => false, при редактировании выводит только input в зависимости от параметра 'edittype'.
 

Игорь2000

Новичок
Добрый день. Мне надо сложить данные двух колонок. Например A+B=C. Но мне необходимо что бы колонка С не просто выводила сумму А и В, а реально обновляла ее в базе данных.
Это возможно сделать? Спасибо.
 

Игорь2000

Новичок
Спасибо. Работает. Правда только после рефреша таблицы.
У меня еще вопрос: как разукрасить данные двух столцов А и В, надо чтобы если А>B то А зеленый, а В красный и наоборот, а если равно то оба синие.
Получается разукрасить только одно условие.
protected function parseRow($r)
{
$r['_class'] = array('A' => ($r['A'] < $r['B']) ? 'bold font-red' : null);

return $r;
}
 

morozzz

Новичок
Доброй ночи всем. Может кто поможет.
Есть кусок кода который формируется в parseRow для колонки "images_alt"
PHP:
<div id="blablabla">blablabla</div>
Добавляю содержание к ячейке "upload" при редактировании
PHP:
<script>
$grid.bind('jqGridAddEditBeforeShowForm', function(event, $form)
{
var row_id = $(this).getGridParam('selrow');
var imghtml = $(this).getCell(row_id, 'images_alt');
$form.find('#upload').after(imghtml);
});
</script>
Есть код который реагирует на событие
PHP:
$(document).ready( function(){
	$('#blablabla').click(function(){
  		alert('Вы героически кликнули по элементу "blablabla"!');
	});
});
Код для ячейки "images_alt" успешно добавляется в ячейку "upload", но событие при нажатии не срабатывает...
Если вывести код "images_alt" отдельно от grid всё работает!
Почему то не cрабатывает script?
 

~WR~

Новичок
Потому что id у элементов должен быть уникален.
Используйте class вместо id.
 

~WR~

Новичок
Кто нибудь знает как вывести просто текст или html в форме редактирования?
Тут лучше всего использовать custom-форматтер. В документации jqgrid есть несколько примеров.
В unformat вызывать $.jgrid.stripHtml(), чтобы получить чисто значение.

Либо, если случай более сложный, значение сохраняют в атрибуте элемента (типа data-orig-value) и выводят его в результате unformat.
 

MaklauT

Новичок
Кто знает как сделать так чтобы дата выводилась в формате dd.mm.yyyy.
пробовал на мой взгляд очевидное, в colModel поставить 'datefmt' => 'd.m.Y' без результатно
 

klev2004

Новичок
Кто знает как сделать так чтобы дата выводилась в формате dd.mm.yyyy.
пробовал на мой взгляд очевидное, в colModel поставить 'datefmt' => 'd.m.Y' без результатно
Можно так:
PHP:
protected function parseRow($r)
{
$r['Time'] = date('d.m.Y H:i:s', $r['Time']); // Time - имя поля

return $r;
}
 

mamboz

Новичок
Доброго времяни суток. Решил подружить Грид с ораклом, но как то упорно он этого не хочет делать... тоесть грид по всей видимости подключился, но вот никак не приходят ряды...
В конфиге прописал так
PHP:
'pdo_dsn'  => 'oci:dbname=oradb',
В класе взял наследование
PHP:
class jqSimple extends jqGrid_Adapter_Oracle
{
Грид рисуеться, но рядов апсолютно нет.... что я пропустил? Помогити плиз.
 

~WR~

Новичок
Firebug'ом посмотрите, что возвращается при загрузке данных аяксом.
Скорее всего, там какой-нибудь Warning, который прольет свет на причину.
 
Сверху