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

MrZaYaC

Новичок
не работают кнопки Add и Edit, или для них нужно прописать функции?

Всмысле они есть, при нажатии всплывают, но не сохраняют изменения в базе...
 

DimensionSlider

Новичок
MrZaYaC, поле ключа есть в выборке this->cols?

У меня не работало Add при его отсутствии.
Добавить в
PHP:
$this->cols = array(
				'id'        => array('label' => 'id:',
									'width' => 0,
									'align' => 'center',
									'editable' => false, 
									'search_op' => 'like', 
									'hidden' => true
									),
Если не нужно на форме, то скрыть через hidden => true

Либо объявить в OperData как написано вот тут
 

DimensionSlider

Новичок
Подскажите,

Актуально:
Добавил кнопку в ячейку таблицы, как по клику на ней подсветить/выбрать строку под определенным номером?


Неактуально:
Где можно посмотреть описание всех настроек таблицы? Разобрался, тут
Как отключить авторастягивание колонок? Разобрался:
PHP:
$this->cols_default = array('fixed' => true);
В чем измеряется width колонок? Разобрался, в пикселях. Если не выполнить fixed=>true, тогда размер пересчитывается.
 

yadenis

Новичок
~WR~, спасибо, всё получилось :).

Возникла ещё одна проблема, если сделать в форме несколько полей для загрузки файлов, то они заливаются либо редактируются только если затрагивать все поля. То есть, если, например, три поля и попробовать изменить картинку только в первом или в двух, то ничего не происходит.

Подскажите, пожалуйста, в чем может быть дело?
 

MrZaYaC

Новичок
MrZaYaC, поле ключа есть в выборке this->cols?

У меня не работало Add при его отсутствии.
Добавить в
PHP:
$this->cols = array(
				'id'        => array('label' => 'id:',
									'width' => 0,
									'align' => 'center',
									'editable' => false, 
									'search_op' => 'like', 
									'hidden' => true
									),
Если не нужно на форме, то скрыть через hidden => true

Либо объявить в OperData как написано вот тут
id у меня в таблице прописано... add открывается, заполняю поля, жму sumbit и ничего не происходит, тоже самое и с редактированием...
 

DimensionSlider

Новичок
А т.е. ничего не происходит? Окошко даже не закрывается?
Если так, то надо смотреть код страницы и ответы от сервера.
 

~WR~

Новичок
На все вопросы - один ответ: открываем firebug и смотрим, что возвращается от сервера.
jqGridPHP, по-возможности, старается возвращать понятные ошибки в формате json, но это не сработает в случае фаталов и прочих ошибок, если включен display_errors.
 

yadenis

Новичок
Не думаю, что в моем случае firebug помог бы, ибо данные просто не отправлялись на сервер)

Решил проблему добавлением в ajaxFormProxy: function(opts, act) кода для удаления всех пустых input'ов типа file.

PHP:
var ele1 = $form.find(':file[value=""]');
		
ele1.each(function()
{
    $(this).remove();
});
Удалять input'ы вряд ли есть хорошо, но как быстрое решение вполне подошло)
 

yadenis

Новичок
Доброго времени суток.
Использую multiselect: true и при определенных условиях хочу заблокировать возможность выделения записей.

В самом jqgrid не нашел возможности запретить выделение, поэтому попробовал выставить чекбоксам disabled=disabled, но этого оказалось недостаточно, т.к. все равно осталась возможность выделения записей простым щелчком по строке и я так и не придумал как это запретить.

Подскажите, пожалуйста, какие возможны варианты?
 

~WR~

Новичок
Если мне не изменяет память, там есть эвент на выделение строки.
И если он возвращает false, то никакого выделения не происходит.
 

yadenis

Новичок
да, onSelectRow. Я попробовал его в первую очередь, но return false; не оказал никакого эффекта, как при включенном, так и при отключенном мультиселекте :(.
 

~WR~

Новичок
Не.. beforeSelectRow нужен.
onSelectRow - это после успешного выделения.
 

~WR~

Новичок
Если что - всегда есть крайний вариант.
Биндим jQuery события непосредственно на контролы, которые могут попытаться выбрать ряд. И внутри вызываем метод, который снимает выделение.

Вроде так, но я точно не помню.
PHP:
.setGridParam('selarrrows', []);
 

yadenis

Новичок
Да, действительно, промахнулся я с эвентом...:-[ прописал beforeSelectRow и disabled для чекбоксов и всё получилось, спасибо :).
 

aurewa

Новичок
Всем доброго дня. Проблемка у меня с отображением грида. Вернее он вообще не отображается.
Дано:
1. виндовый сервер + wamp - все работает прекрасно
2. сервер лично поднятый на centos - имеется проблема с отображением грида

В чем собственно проблема. В пхп я не силен, просто заказчику надо было прикрутить данное решение. Так вот после недолгих поисков я выявил что пролемка моя кроется вот в этой строке 'editoptions' => array('value'=> new jqGrid_Data_Value($langs)).Опять же повторюсь на виндовом сервере все прекрасно работает. Если убираю у колонки этот editoptions и связанную с ним логику то грид прекрасно работает и на Centos. Зашел в тупик помогите, куда рыть.

ниже могу привести кусочки кода :

PHP:
 $langs = $this->getLangs();

$this->query = "
            SELECT m.id, m.imei,m.name, m.price, m.price_valet, m.lang, m.balance,m.phone_number,m.groups,m.rxgain,m.txgain
            FROM modems m
                LEFT JOIN `group` g ON (m.groups=g.id)
                LEFT JOIN `valets` v ON (m.price_valet = v.id)
                LEFT JOIN `languages` l ON (m.lang = l.id)
            WHERE {where}
        ";
.......
        
        $this->cols = array(  'lang'=>array('label'  => 'Язык',
                'db'     => "m.lang",
                'width' => 10,
                'replace' => $langs,
                'search' => false,
                'sortable' => false,
                'editable' => true,
                'edittype' => 'select',
                'editoptions' =>  array('value'=> new jqGrid_Data_Value($langs)),
и тд.......

.....


protected function getLangs()
    {
        $result = $this->DB->query("SELECT * FROM `languages`");
        $rows = array();
        while($r = $this->DB->fetch($result))
        {
            $rows[$r['id']] = $r['short_name'];
        }

        return $rows;
    }
 

~WR~

Новичок
А в $langs есть какие-нибудь нехорошие символы, типа кавычек, фигурных скобок или двоеточий?

Попробуйте так:
PHP:
'editoptions' =>  array('value'=> $langs),
И, кстати, замените еще список полей в запросе на плейслолдер {fields}, если это не специально сделано. Без этого не будет работать постраничный вывод.
 

~WR~

Новичок
Вообще, ошибку в студию.
Если фатал выпал при рендеринге, то он может быть спрятан в тег <script>. Посмотрите исходный код страницы.

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

aurewa

Новичок
Знаете массив $langs как вы видите из кода получатеся путем выборки данных из таблицы languages. В данный момент эта таблица пуста.Я сравнивал исходный код , который получается при рендеринге страницы на локальном сервере - рабочий вариант и на удаленном (где есть ошибка). Так вот раздичие таково :

PHP:
Работающий вариант:
{ "label": "Язык", "replace": [  ], "formatter": null, "hidden": false, "editable": true, "search": false, "classes": "", "align": "left", "null": null, "encode": true, "width": "10", "sortable": false, "edittype": "select", "editoptions": { "value": Object id #8 }, "name": "lang", "index": "lang" } ]
PHP:
Не работающий вариант идентичен, но в отличие от рабочего содержит вот такой участок кода
"editoptions": { "value": " "}
Более подробно сейчас ответить не могу, ибо не имею связи с сервером, но завтра я попробую все что вы мне посоветовали а так же вытащу всю информацию, которая поможет решить проблему.Спасибо большое за помощь.
 

~WR~

Новичок
Есть мнение, что где-то используется очень древняя версия php - старше 5.2.
В этом случае __toString работает по-другому. Если так, то нужно обновиться.

В консоли javascript какие ошибки?
Судя по описанию, должно НЕ работать как раз первое.
 

aurewa

Новичок
Есть мнение, что где-то используется очень древняя версия php - старше 5.2.
В этом случае __toString работает по-другому. Если так, то нужно обновиться.

В консоли javascript какие ошибки?
Судя по описанию, должно НЕ работать как раз первое.
Все спасибки разобрался со всем, у меня действительно стоял пхп 5.1. Сработало оба решения. Попробувал вот так 'editoptions' => array('value'=> $langs) - работает, обновил версию пхп, и заработали оба варианта решения (тот который в примерах и тот что привели вы). Спасибо за помощь.
 
Сверху