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

  • Автор темы Автор темы ~WR~
  • Дата начала Дата начала
Может.

Посмотрите примеры в секции 'New in version 3.7'.
http://www.trirand.com/blog/jqgrid/jqgrid.html

Хитрый момент: чтобы работал toolbar-поиск, ему нужно добавить опцию stringResult: true.
Если этого не сделать, то при поиске будут исчезать все записи. В примере опция есть, но легко не заметить.
 
~WR~, спасибо!
Еще вопрос: как сделать чтобы если текста много он переносился по словам?
 
О, это весьма хитрая тема.

Можно прописать в CSS для ячеек white-space: normal.
Можно на стороне сервера делать wordwrap().
Можно написать хитрый скрипт, который будет показывать контент ячейки целиком при наведении курсора.

Делайте любым способом, но точно могу сказать, что идеального решения сразу для всех случаев нет. При каждом подходе будут минусы.
 
Залил большой апдейт на гитхаб.
Самое серьезное изменение: переделана работа с Primary key.

1. Теперь можно редактировать primary-колонки без дополнительных усилий. Например, изменить id существующей записи.
2. Поддерживается составной primary key из нескольких колонок.

Нужно всего лишь перечислить их следующим образом:
PHP:
protected function init()
{
    ...
    $this->primary_key = array('user_id', 'country_id', 'region');
    ...
}

Кто уже сталкивался с этой проблемой, тот оценит. :)

Если коротко, то сделано через замену имени параметра 'id' на '_id' при CRUD-операциях.
Параметры, начинающиеся с подчеркивания, считаются "системными", поэтому существование обычной колонки с таким именем невозможно. Это позволяет победить сразу весь букет возможных проблем с двоякой трактовкой параметров.

Теперь 'id' - это новое значение input'а с именем 'id' из формы редактирования, а '_id' - это rowid редактируемой записи. И нет проблем.
 
Если primary_key должен формироваться из разных таблиц при JOIN'ах.

Вывод данных будет работать без дополнительного кода.
Для редактирования используем две новых функции:

1. Собрать составной primary_key из ряда таблицы или $_POST:
PHP:
$data = array(
    'user_id' => 15,
    'country_id' => 10,
    'region' => 'Foo',
);
$this->implodePrimaryKey($parts); //'15_10_Foo'

2. Разбить составной primary_key обратно в массив:
PHP:
$key = '15_10_Foo';
$this->explodePrimaryKey($key); // array('user_id' => 15, 'country_id' => 10, 'region' => 'Foo');

Отталкиваясь от этих данных, можно легко сделать апдейт в две и более таблицы.

Если во фрагментах ваших ключей могут встретиться символы подчеркивания, то можно заменить glue на любой другой:
PHP:
$this->primary_key_glue = ':';
//'15:10:Foo'
 
Спасибо!
У меня большая таблица. Изначально видны не все столбцы. Как сделать так чтобы невидимые столбцы отображались при редактировании и добавлении записей?
 
PHP:
'editable' => true,
'editrules' => array('edithidden' => true),

Это фишка самого jqGrid. Без явного edithidden скрытые колонки не покажет в форме.
 
Доброго времяни суток всем жителям форума.
Есть вопрос или даже прозьба, если кто данный грид прикручивал к Oracl-у проделитесь минитестовым проэктом, а то я себе весь мозг вынес, но так и не запустил

Подключился так
PHP:
'
....
pdo_dsn' => 'oci:host=localhost:1521; dbname=orcl11',
'pdo_user' => 'myschema',
'pdo_pass' => '123456',

В класе таблици описываю наследование так

PHP:
class jqSimple extends jqGrid_Adapter_Oracle
{
    protected function init()
    {
        
        $this->query = "SELECT id_user FROM users";
................

Табличка рисуеться, но данных нет.
Причем попробовал спецом в запросе задать несуществующую таблицу, что б получить ошибку так вообще не мур мур.
PHP:
$jq_loader->set('debug_output', TRUE);
установлено

Короче я в тупике.

Через фаребаг нарыл
<!--error--><br />
<b>Fatal error</b>: Wrong parameters for Exception([string $exception [, long $code [, Exception $previous = NULL]]]) in <b>Z:\home\tt\www\php\Exception\Exception.php</b> on line <b>12</b><br />
<script language=JavaScript src='/denwer/errors/phperror_js.php'></script>
Копаю дальше...
 
Странно, вроде больше не должно быть этой проблемы. Какая версия php?
 
PHP Version 5.3.13
Перепробовал jquery от версии 1,4 до 1,9, кстати на 1,9 не работает грид вообще
Также у меня комплект из:
- jquery-ui-1.9.2
- jquery.jqGrid-4.4.1
 
Здравствуйте.
Во первых, спасибо за программы и форум.
Подскажите, для строчки в гриде надо при помощи программы на PHP выполнить:
1.Изменения в таблицах MySQL
2.Загрузку информации в таблицы MySQL из файлов (XML, Exel )
3.Визуализацию информации в формате HTML
Как вызывать программы PHP из грида, может быть есть пример.

Спасибо.
 
mamboz, добавьте var_dump с аргументами для Exception перед той строкой, где происходит ошибка.

Nole, это можно сделать через custom operations.
http://jqgrid-php.net/examples/?render=jqOperCustom
http://jqgrid-php.net/doku.php?id=wiki:oper-common&#пользовательские_операции
Блин, болван, давненько работал с ПХП...
Проблема зашита с некоректным запросом... нехватает скобки ")"
string(129) "SQLSTATE[HY000]: General error: 907 OCIStmtExecute: ORA-00907: missing right parenthesis
Сейчас поковыряю как выдрать конечный запрос и поищу где проблем...

Проблема кроется в адаптере Oracle, а иммено в
PHP:
function buildFields
. В основной запрос не переходить результат функции.... ковыряю дальше
 
На самом деле, тут еще что-то работает не так.
Любая SQL-ошибка должна выдаваться в браузер.

А если включен debug_mode, то еще и запрос должно прикладывать.
 
Ну и главная печаль - в Oracle нет offset. Поэтому, возможно, вот эта страшная обертка из адаптера работает не для всех случаев:
PHP:
SELECT *
FROM ($query) a
WHERE _rownum BETWEEN $offset_min AND $offset_max
 
Ну и главная печаль - в Oracle нет offset. Поэтому, возможно, вот эта страшная обертка из адаптера работает не для всех случаев:
PHP:
SELECT *
FROM ($query) a
WHERE _rownum BETWEEN $offset_min AND $offset_max
Полностью с Вами согласен, но эта обертка не работает из за того что в перечень полей не попадает
PHP:
if($this->limit > -1)
        {
            $fields .= ', rownum AS _rownum ';
        }
 
Всем веселого дня!
Раньше подключал datepicker простой функцией
PHP:
$(document).ready(function(){
    
  $('#exampleRange').attachDatepicker({});
  
		
});
После отключения старых js и подключения новых (для jqgrid) Firebug выдает: TypeError: $(...).attachDatepicker is not a function

Собственно, как подключать datepicker`ы вне jqgrid`ов?
 
Вряд ли это как-то связано.

Поищите, почему пропала функция attachDatepicker, и как она добавлялась в jQuery.
Возможно, там использовался на правильный $.extend, а что-то еще.

Еще мог измениться порядок подключения скриптов.
Если совсем не будет зацепок, то можете захостить пример где-нибудь. Посмотрю.
 
Сверху