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

~WR~

Новичок
Завтра попробую реализовать вариант с курсором.
 

Sender

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

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

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

Valey

Новичок
Ну если пойти самым простым способом то вот так

SELECT TOP X * FROM MyTable
WHERE id NOT IN (SELECT TOP
(Y-1) id FROM MyTable ORDER BY id) ORDER BY id
 

~WR~

Новичок
Вроде готово. Залил обновления на гитхаб.
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.
 

~WR~

Новичок
Да, еще одно. 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 исключения не выбрасываются, соответственно такую ошибку в браузер вывести нечем.
 

weregod

unserializer
~WR~, создайте запись с <script> в поле "full name" и удивитесь.
а вообще почти эротично выглядит, только подтупляет.
 

~WR~

Новичок
Не удивлюсь. :) На самом деле, это стандартное поведение jqGrid. Я его старался максимально не касаться.

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

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

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

Чтобы вмешаться в процесс кодирования - перегружаем функцию outputEncodeValue.
Можно сделать какую-нибудь свою волшебную фильтрацию XSS, если вам это нужно.
 

grinvich11

Новичок
~WR~, а есть ли пример серверной части для сложного поиска с подгруппами (Complex search)?
 

~WR~

Новичок
Так как подобная функция в реальном мире нужна довольно редко, не стал включать её в основное ядро, как и многие другие.

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

shelf2.png

В общем, если это реально кому-то интересно, могу добавить поддержку сложного поиска в понедельник-вторник.
Но, моё мнение: "умный" toolbar-поиск намного удобнее и яснее для конечных пользователей.
 

A1x

Новичок
toolbar поиск удобнее, но как им сделать например фильтр по промежутку дат?
 

~WR~

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

Выкладывать все это в основное ядро не стал, т.к. каждая СУБД сильно по-своему работает с датами.
 

A1x

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

Alien85

I like my cat
WR, на вашем сайте не работает вывод в excel, у меня загружается html страница.
 

~WR~

Новичок
На самом деле, по умолчанию там и выдается html-страница, только с особыми заголовками. Excel сам уже парсит html.
Это наиболее простой и доступный способ. Но он, по сути, является хаком, который может не работать в некоторых браузерах или при нестандартных настройках системы.

Есть еще несколько способов вывода XLS, но все они сопряжены с геморроем, установкой лишних модулей или библиотек, большим количеством кода.
Если на это будет реальный спрос, добавлю соответствующие адаптеры в репозитарий.
 
  • Like
Реакции: AmdY

Alien85

I like my cat
Понятно, у меня OpenOffice, он не распознает.
Но мне эта фича не требуется, спасибо. Просто подумал, может глюк какой.
 

Jnas

Новичок
Ув. WildRAID
Возможно ли получить базу "jqgrid_test" для просмотра скаченных примеров с Вашего сайта?
 

~WR~

Новичок
Просто запустите /examples/install.php, предварительно настроив config.php
Будет создана тестовая база со случайными значениями. Генератор сделан для MySQL.
 

Jnas

Новичок
Не смог разобраться с кодировкой и MySQL...
Запустил install , далее чуть подрезал базу MySQL...
Далее, добавил запись в MySql (через пример 'Основное' -> 'Базовая таблица'). Мною добавленная запись содержала кириллицу.
В примере посмотрел , отображается нормально, через Navicat посмотрел , крякозябры, в конфиге выставлен по умолчанию 'encoding' => 'utf-8',, посмотрел MySQL , везде выставлен cp1251, поменял на utf-8 . Ничего не изменилось ...
Одним словом:
1) если запись добавить в базу MySQL на кириллице посредством ingrid-php , в примере всё нормально , в Navicat и phpMyAdmin кракозябры
2) если запись добавить посредством Navicat и phpMyAdmin в MySQL, соответственно наоборот. прикладываю скрины.



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