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

~WR~

Новичок
Может.

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

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

tyu

Новичок
~WR~, спасибо!
Еще вопрос: как сделать чтобы если текста много он переносился по словам?
 

~WR~

Новичок
О, это весьма хитрая тема.

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

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

~WR~

Новичок
Залил большой апдейт на гитхаб.
Самое серьезное изменение: переделана работа с 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 редактируемой записи. И нет проблем.
 

~WR~

Новичок
Если 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'
 

tyu

Новичок
Спасибо!
У меня большая таблица. Изначально видны не все столбцы. Как сделать так чтобы невидимые столбцы отображались при редактировании и добавлении записей?
 

~WR~

Новичок
PHP:
'editable' => true,
'editrules' => array('edithidden' => true),
Это фишка самого jqGrid. Без явного edithidden скрытые колонки не покажет в форме.
 

mamboz

Новичок
Доброго времяни суток всем жителям форума.
Есть вопрос или даже прозьба, если кто данный грид прикручивал к 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>
Копаю дальше...
 

~WR~

Новичок
Странно, вроде больше не должно быть этой проблемы. Какая версия php?
 

mamboz

Новичок
PHP Version 5.3.13
Перепробовал jquery от версии 1,4 до 1,9, кстати на 1,9 не работает грид вообще
Также у меня комплект из:
- jquery-ui-1.9.2
- jquery.jqGrid-4.4.1
 

Nole

Новичок
Здравствуйте.
Во первых, спасибо за программы и форум.
Подскажите, для строчки в гриде надо при помощи программы на PHP выполнить:
1.Изменения в таблицах MySQL
2.Загрузку информации в таблицы MySQL из файлов (XML, Exel )
3.Визуализацию информации в формате HTML
Как вызывать программы PHP из грида, может быть есть пример.

Спасибо.
 

mamboz

Новичок
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
. В основной запрос не переходить результат функции.... ковыряю дальше
 

~WR~

Новичок
На самом деле, тут еще что-то работает не так.
Любая SQL-ошибка должна выдаваться в браузер.

А если включен debug_mode, то еще и запрос должно прикладывать.
 

~WR~

Новичок
Ну и главная печаль - в Oracle нет offset. Поэтому, возможно, вот эта страшная обертка из адаптера работает не для всех случаев:
PHP:
SELECT *
FROM ($query) a
WHERE _rownum BETWEEN $offset_min AND $offset_max
 

mamboz

Новичок
Ну и главная печаль - в Oracle нет offset. Поэтому, возможно, вот эта страшная обертка из адаптера работает не для всех случаев:
PHP:
SELECT *
FROM ($query) a
WHERE _rownum BETWEEN $offset_min AND $offset_max
Полностью с Вами согласен, но эта обертка не работает из за того что в перечень полей не попадает
PHP:
if($this->limit > -1)
        {
            $fields .= ', rownum AS _rownum ';
        }
 

tyu

Новичок
Всем веселого дня!
Раньше подключал datepicker простой функцией
PHP:
$(document).ready(function(){
    
  $('#exampleRange').attachDatepicker({});
  
		
});
После отключения старых js и подключения новых (для jqgrid) Firebug выдает: TypeError: $(...).attachDatepicker is not a function

Собственно, как подключать datepicker`ы вне jqgrid`ов?
 

~WR~

Новичок
Вряд ли это как-то связано.

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

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