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

  • Автор темы Автор темы ~WR~
  • Дата начала Дата начала
Вы думаете если что-то нестандартное надо будет сделать в вашем решении копаться не надо будет?

ExtJS имхо можно использовать даже как замену jquery, одни возможности ООПить на js чего стоят.

А то что у jQuery обратная совместимость хорошая, это не факт что хорошо, все-таки при переходе на более мажорную версию надо качественно улучшать продукт, без слома bc это не всегда возможно.
 
Ну если пойти самым простым способом то вот так

SELECT TOP X * FROM MyTable
WHERE id NOT IN (SELECT TOP
(Y-1) id FROM MyTable ORDER BY id) ORDER BY id
 
Вроде готово. Залил обновления на гитхаб.
Mssql - это что-то за гранью добра и зла. Воистину, какой-то Internet Explorer 6 в мире баз данных.

Когда наконец увидел работающий тестовый грид - был счастлив как ребенок! :)

С курсорами сделать не получилось. Почему-то в PDO упорно не приходят ряды, получаемые из вызовов EXEC. Сколько ни бился - победить это не смог.
Курсоры без процедур тоже выдают какую-то муть вместо нормальных результатов.
Курсоры средствами PDO (prepare + PDO::ATTR_CURSOR) писали синтаксические SQL-ошибки. Тот же самый запрос без курсора работает как часы.

Возможно, дело в том, что драйверы MSSQL для PHP попросили скачать с MSDN. Если честно, я не понял, почему этих extension нет в стандартной поставке.

В итоге сделал через window-функции, используя ROW_NUMBER и дополнительно обернув запрос.
Получился очень маленький адаптер, всего несколько строк:
https://github.com/wildraid/jqGridPHP/blob/master/php/Adapter/Mssql.php

Соответственно, вам нужно наследовать классы своих гридов не от jqGrid, а от jqGrid_Adapter_Mssql.
 
Да, еще одно. Mssql-драйвер в git тоже добавил, но под Windows он не будет работать.
Вместо mssql_* следует использовать sqlsrv_*

http://ru2.php.net/manual/en/ref.sqlsrv.php
Скачать его можно отсюда: http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx

Скорее всего, у вас ошибка: function mssql_query does not exists.
К сожалению, на Parse error и Fatal error исключения не выбрасываются, соответственно такую ошибку в браузер вывести нечем.
 
~WR~, создайте запись с <script> в поле "full name" и удивитесь.
а вообще почти эротично выглядит, только подтупляет.
 
Не удивлюсь. :) На самом деле, это стандартное поведение jqGrid. Я его старался максимально не касаться.

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

Но, пожалуй, чаще это зло. Пусть по умолчанию кодирует спец символы.
Добавил опцию encode для колонок. По умолчанию она - true. Установив false, можно избирательно выключать кодирование там, где это нужно.

Чтобы выключить глобально, в своем адаптере добавляем:
PHP:
$this->defaults['cols']['encode'] = false;


Чтобы вмешаться в процесс кодирования - перегружаем функцию outputEncodeValue.
Можно сделать какую-нибудь свою волшебную фильтрацию XSS, если вам это нужно.
 
~WR~, а есть ли пример серверной части для сложного поиска с подгруппами (Complex search)?
 
Так как подобная функция в реальном мире нужна довольно редко, не стал включать её в основное ядро, как и многие другие.

Но у меня есть код, который реализует то же самое немного в другом контексте. Причем, что интересно, он был написан еще до того, как такой поиск внесли в master-ветку jqGrid. :) Посмотрите в левый-нижний угол.

shelf2.png

В общем, если это реально кому-то интересно, могу добавить поддержку сложного поиска в понедельник-вторник.
Но, моё мнение: "умный" toolbar-поиск намного удобнее и яснее для конечных пользователей.
 
toolbar поиск удобнее, но как им сделать например фильтр по промежутку дат?
 
Например, мы используем чуть модифицированный jQuery Date Range Picker:
http://www.filamentgroup.com/lab/date_range_picker_using_jquery_ui_16_and_jquery_ui_css_framework/

Плагин привязывает прямо к input'у в toolbar'е. Кликаем, выбираем промежуток дат. Он заполняет строку поиска (например: '01.01.2011 - 16.10.2011') и вызывает обновление грида.

На стороне сервера добавляем операцию поиска:
PHP:
protected function searchOpDateRange($c, $val)
{
    list($start, $end) = explode(' - ', $val, 2);
    return "{$c['db']} BETWEEN '$start' AND '$end'";
}

И привязываем её к колонке опцией 'search_op' => 'date_range'.
В живом проекте у меня используется четыре разных оператора для поиска по датам, их код длиннее и содержит валидацию данных.

Выкладывать все это в основное ядро не стал, т.к. каждая СУБД сильно по-своему работает с датами.
 
сенкс, хорошая идея с jQuery Date Range Picker. А я сейчас пишу модуль jqgrid для kohana, который работает с моделями ORM, что по идее должно исключить зависимости от особенностей СУБД
 
WR, на вашем сайте не работает вывод в excel, у меня загружается html страница.
 
На самом деле, по умолчанию там и выдается html-страница, только с особыми заголовками. Excel сам уже парсит html.
Это наиболее простой и доступный способ. Но он, по сути, является хаком, который может не работать в некоторых браузерах или при нестандартных настройках системы.

Есть еще несколько способов вывода XLS, но все они сопряжены с геморроем, установкой лишних модулей или библиотек, большим количеством кода.
Если на это будет реальный спрос, добавлю соответствующие адаптеры в репозитарий.
 
  • Like
Реакции: AmdY
Понятно, у меня OpenOffice, он не распознает.
Но мне эта фича не требуется, спасибо. Просто подумал, может глюк какой.
 
Ув. WildRAID
Возможно ли получить базу "jqgrid_test" для просмотра скаченных примеров с Вашего сайта?
 
Просто запустите /examples/install.php, предварительно настроив config.php
Будет создана тестовая база со случайными значениями. Генератор сделан для MySQL.
 
Не смог разобраться с кодировкой и MySQL...
Запустил install , далее чуть подрезал базу MySQL...
Далее, добавил запись в MySql (через пример 'Основное' -> 'Базовая таблица'). Мною добавленная запись содержала кириллицу.
В примере посмотрел , отображается нормально, через Navicat посмотрел , крякозябры, в конфиге выставлен по умолчанию 'encoding' => 'utf-8',, посмотрел MySQL , везде выставлен cp1251, поменял на utf-8 . Ничего не изменилось ...
Одним словом:
1) если запись добавить в базу MySQL на кириллице посредством ingrid-php , в примере всё нормально , в Navicat и phpMyAdmin кракозябры
2) если запись добавить посредством Navicat и phpMyAdmin в MySQL, соответственно наоборот. прикладываю скрины.



Что я делаю не так? как устранить данную проблему...?
 
Сверху