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

zacar

Новичок
Подскажите как в окне редактирования, в котором два select, реализовать зависимость одного от второго. Первый получаем по id из таблицы, а вот второй нужно выборкой из БД.
спс.
 

dasser

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

DimensionSlider

Новичок
Подскажите. Есть кастомная колонка которая вычисляет день недели по дате.
Делает DAYOFWEEK( datetime_stamp )
Как задать фильтр по ней?

Сделал все в таком виде, но фильтрация не работает, ведь по сути колонки то нет.

Код:
'dayofweek'    => array(       
                'label'        => 'День',
                'width'        => 55,
                'align'        => 'center',
                'editable'      => false,
                'stype'        => "select",
                'search_op'    => 'ignore',
                'encode'        => false,
                'db' => "CASE DAYOFWEEK( datetime_stamp )
                                                WHEN 1 THEN 'Воскресенье'
                                                WHEN 2 THEN 'Понедельник'
                                                WHEN 3 THEN 'Вторник'
                                                WHEN 4 THEN 'Среда'
                                                WHEN 5 THEN 'Четверг'
                                                WHEN 6 THEN 'Пятница'
                                                WHEN 7 THEN 'Суббота'
                                            END",
                // не знаю как до ума довести. Выдуманная колонка, надо как-то объяснить что надо фильтровать по значение DAYOFWEEK( колонка_с_датой ), т.е. по идее добавлять в where
                'searchoptions' => array(
                        'value' => new jqGrid_Data_Value( $daysofweek, 'Все'),
                        ),
                ),

    protected function getDaysOfWeek()
    {   
        $rows = array();
        $rows[ '1' ] = 'Воскресенье';
        $rows[ '2' ] = 'Понедельник';
        $rows[ '3' ] = 'Вторник';
        $rows[ '4' ] = 'Среда';
        $rows[ '5' ] = 'Четверг';
        $rows[ '6' ] = 'Пятница';
        $rows[ '7' ] = 'Суббота';
   
        return $rows;
    }
 
Последнее редактирование:

DOCSIMUS

Новичок
Добрый вечер.
Только начал разбираться.
Таблицу с данными вывел, понастраивал, полистал доки.
Есть Formatter, почитал про него.
Попробовал. Получилось.
Но не могу понять как сделать следующее:
В таблице есть поля IP, psw, в которых соответственно IP и пароль.
Надо чтобы при выводе таблицы появились гиперссылки на ячейках столбца IP вида http://IP/psw
т.е. фактически необходимо динамически сгенерировать нужный код на основе данных из самой таблицы
вроде бы для этого есть Custom Formatter, но не могу понять как его использовать
может быть, если не сложно приведете пример?
 

demeshko

Новичок
Попробуйте так, добавил поле d_week в примере по jqMiscDatepickers.php, всё работает

protected function init()
{
$this->table = 'tbl_customer';
$this->sweek=array(1=>'Понедельник',2=>'Вторник',3=>'Среда',4=>'Четверг',5=>'Пятница',6=>'Суббота',7=>'Восскресенье');
#Set columns
$this->cols = array(
'id' => array('label' => 'ID',
'width' => 10,
'align' => 'center',
),
'c_name' => array('label' => 'Customer name',
'db' => "CONCAT(first_name, ' ', last_name)",
'width' => 35,
),
'd_week' => array('label' => 'Day week',
'db' => "DAYOFWEEK(date_birth)",
'width' => 35,
'stype' => 'select',
'searchoptions' => array('value' => new jqGrid_Data_Value($this->sweek, 'Все')),
'search_op' => 'equal', //exact match
),
- - -- - -

);
$this->render_filter_toolbar = true;
}
protected function parseRow($r)
{
$r['d_week'] = $this->sweek[$r['d_week']];
return $r;
}[/quote]
 

DimensionSlider

Новичок
Добрый вечер.
Надо чтобы при выводе таблицы появились гиперссылки на ячейках столбца IP вида http://IP/psw
может быть, если не сложно приведете пример?
Объявляете в классе функцию parseRow и используете :)
Код:
protected function parseRow( $r ) {

        $rfilename  = $r['filename'];    
        $r[ 'filename' ] = '<a href="http://localhost/index.php?param=".$rfilename."</a>"';    
        return $r;
    }
 

DimensionSlider

Новичок
Попробуйте так,
Да, большое спасибо. Действительно так работает. :)

Код:
$this->sweek        = array( 1 => 'Восскресенье',2=>'Понедельник',3=>'Вторник',4=>'Среда',5=>'Четверг',6=>'Пятница',7=>'Суббота' );

$this->cols         = array(
'dayofweek'    => array(         
                'label'        => 'День',
                'width'        => 55,
                'align'        => 'center',
                'editable'      => false,
                'stype'        => "select",
                'search_op'    => 'equal',
                'encode'        => false,         
                'db' => "DAYOFWEEK( datetime_stamp )",
                'searchoptions' => array(
                        'value' => new jqGrid_Data_Value($this->sweek, 'Все'),
                          ),
                ), 
///...
);

protected function parseRow( $r ) { 
$r['dayofweek']  = $this->sweek[$r['dayofweek']]; 
}
 

DimensionSlider

Новичок
Не нашел в примерах реализацию для формы редактирования...
когда требуется не вводить значения, а выбрать из выпадающего списка.
При этом это значения из другой таблицы и хранится в базе должнен соответственно ИД этой записи
Может кто-то знает как это организуется?



Просто оставлю свой вариант здесь:
Для колоночки
Код:
'edittype' => 'select'
'editoptions' => array('value'=>array( 1=>'Юр.лицо', 2=>'Физ. лицо')),
И далее так
Код:
protected function parseRow( $r ) {
        $contactType = $r[ 'contactType' ];
        if ( $contactType == '1' ) {
            $contactType = 'Юр. лицо';
        }
        if ( $contactType == '2' ) {
            $contactType = 'Физ. лицо';
        }
        $r[ 'contactType' ] = $contactType;
        return $r;
    }
 
Последнее редактирование:

DOCSIMUS

Новичок
в editrules выставляю custom в true
необходимо указать custom_func - например Numcheck

PHP:
protected function init()
    {
            $this->cols = array(
                'Num' => array('label' => '№',
                'width' => 10,
                'align' => 'center',
                'edittype' => 'text',
                'editoptions' => array('size' => 5, 'maxlength' => 3),
                'editrules' => array('required' => true, 'integer' => true, 'custom' => true, 'custom_func' => 'Numcheck'),
                'formoptions' =>array('elmprefix' => '(*)'),
            ),
не понимаю где нужно определить саму функцию Numcheck
Код:
function Numcheck(value, colname) {
        if (value < 1) {
          return [false,"Введите значение больше 0"];
        }
        else
        {
          return [true,""];
        }
    }
пробовал в классе jqGrid где Init постоянно сообщение
Пользовательская функция должна присутствовать в случае пользовательской проверки!
что я делаю не так?
 

DimensionSlider

Новичок
Помню где-то тут приводился пример как в заголовке в фильтре вызвать datepicker для колонки типа дата. Но при выборе даты приходилось еще нажимать Enter чтобы таблица отфильтровалась.

Просто оставлю решение чтобы не приходилось жать на Enter :)


Код:
$datePickerStr = 'function (elem) {
                            $(elem).datepicker({
                                dateFormat    : "yy-mm-dd",
                                firstDay      : 1,
                                dayNames      : ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"],
                                dayNamesShort : ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
                                dayNamesMin  : ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"],
                                monthNames    : ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"],
                                changeYear      : true,
                                changeMonth    : true,
                                showButtonPanel : true,
                                onSelect: function () {
                                    var $grid, grid;
                                    if (typeof (elem.id) === "string" && this.id.substr(0, 3) === "gs_") {
                                        // in case of searching toolbar
                                        $grid = $(elem).closest(\'div.ui-jqgrid-hdiv\')
                                                      .next(\'div.ui-jqgrid-bdiv\')
                                                      .find("table.ui-jqgrid-btable:first");
                                        if ($grid.length > 0) {
                                            grid = $grid[0];
                                            if ($.isFunction(grid.triggerToolbar)) {
                                                setTimeout(function(){
                                                    grid.triggerToolbar();
                                                }, 50);
                                            }
                                        }
                                    } else {
                                        // refresh the filter in case of
                                        // searching dialog
                                        $(this).trigger(\'change\');
                                    }
                                }   
                               
                            });
                        }';
Код:
            'datetime_stamp'  => array('label' => 'Дата/время звонка',
                                'width'            => 135,
                                'firstsortorder'    => "desc",
                                'align'            => 'center',
                                'hidden'            => true,
                                'editable'          => false,
                                    'searchoptions' => array
                                    (
                                        'dataInit' => new jqGrid_Data_Raw( $datePickerStr )
                                    ),                                                           
                                ),
 

DOCSIMUS

Новичок
Так для других то напишите ) А то как-то некрасиво :)
я осваиваю jqGrid, jQuery, как впрочем и все остальное, первую неделю
конечно мне нетрудно написать как я нашел решение, но не уверен, что оно правильное
при очень слабом знании php, js, ну и всего остального, трудно находить решения
тем не мене
решение первое
используем функцию jqGrid_Data_Raw

PHP:
'editrules' => array('required' => true,
                               'integer' => true,
                               'custom' => true,
                               'custom_func' => new jqGrid_Data_Raw(
                                                                  'function(value,colname){
                                                                               if (value < 1)
                                                                                    return [false,"Введите значение больше нуля"];
                                                                               else
                                                                                    return [true,""];
                                                                               }'
                                                                                               )
                              ),
не знаю, но такой способ не рекомендуется

я использовал второй способ - переопределил функцию OperData и в ней уже писал код проверки

код в самой функции с потолка - просто для примера
 

mictor1973

Новичок
Подскажите, пожалуйста, что я делаю не так.
имеется поле логическое , но на самом деле в mysql это поле типа tinyint(1).
Хочу чтобы оно отображалось и редактировалось в виде checkbox -са.
Но происходит следующее: всё отображается нормально и в таблице и в окне редактирования. Но при редактировании если хочется поменять значение поля из "no checked" в "checked ", то значение этого поля не изменяется после нажатия кнопки "save". При этом когда при редактировании делаю "uncheck" , то после нажатия кнопки "save" в таблице значение поля изменяется (т.е. становится равным нулю)

'control_value' => array('label' => 'Контрольное значение?',
'width' => 30,
'db' => 'i.control_value',
'align' => 'center',
'formatter' => 'checkbox',
'edittype' => 'checkbox',
'editable' => true,
),
 

Rrryyy

Новичок
Возможно ли загрузка аудио файла в таблицу, с возможностью этот файл проигрывать?
Спасибо.
 

Rrryyy

Новичок
Возможно ли загрузка аудио файла в таблицу, с возможностью этот файл проигрывать?
Спасибо.
Можно.
'record' => array('label' => 'Запись',
'width' => 10,
'db' => 'a.record',
'search_op' => 'ignore',
'sortable' => false,
'encode' => false,
),
protected function parseRow(array $r) {
$r['record'] = "<audio controls> <source src='http://bla/bla/bla/{$r['record']}' type='audio/mpeg'></audio>";
}

Как видите, файл у меня на удаленном сервере.
 

acanthis

Новичок
Возможно ли загрузка аудио файла в таблицу, с возможностью этот файл проигрывать?
Спасибо.
Ну, во-первых, загружать аудио-файл нужно на сервер а не в таблицу) А во-вторых, проигрывание аудио-файлов не имеет никакого отношения к jqgridphp :)
 
Сверху