Абстрактный класс для разбивки резалта запроса на страницы c сортировкой по столбцам

antonio

Moderator
Команда форума
Добавлена новая фича, выбор типа линейки разбивки, либо диапазон записей либо диапазон страниц.
 

RomikChef

Guest
Это ж надо столько писать :)
Не, я уж по-старинке, пятью строчками :)
 

antonio

Moderator
Команда форума
По просьбам трудящихся организую малекий экскурс в устройство сего творения.

1. Почему данный класс я назвал абстрактным?

Потому что я абстрагировался от построения таблицы и разбивки на страницы в общих чертах следующими параметрами:

а) в конструктор передается sql запрос для разбивки на страницы, классом проводится легкий анализ запроса и он "сам" (один из методов класса) вычисляет общее кол-во записей и добавляет order by и limit

б) для отрисовки содержимого ячеек таблицы используется механизм call back функций (call back это просто. Это значит что я передаю в массив столбцов названия функций, которые, естественно написаны заранее и вызываю согласно моему API (Application program interface), см. первый пост по ссылке и примеры там же, вызываю данные функции внутри класса по схеме $function($obj,$Fields) - это и есть мой API; см. доку по РНР в плане вызовов функций с именами, хранящимися в переменнных). Зачем это нужно? Спросите Вы. Да затем, что, например, вместо содержимого ячейки из базы Вам, например, надо отрисовать ссылку, поэтому метод заранее можно считать неопределенным - это и есть call back, который если задан, то будет вызываться для столбца на каждой строке таблицы для отрисовки содержимого.

с) Надо заполнить только массивы описания столбцов и описания таблицы, а так же свойств таблицы, солбцов и строки в плане характеристик html параметров тегов для приведения вида таблицы к тому, который Вам нужен (см. ссылку в первом посте)

д) Реализован внутренний механизм сортировки по столбцам, для этого просто надо щелкнуться на название столбца, повторный щелчок на название столбца приводит к смене направления сортировки на противоположный. Можно разрешать или запрещать сортировку по определенному столбцу (см. пример по ссылке в первом посте)

е) таким образом, мы имеем абстракцию от типа разбивки (диапазон записей или страниц), sql запроса и html вида таблицы и ее разбивки на страницы (кол-ва строк на странице и длина линейки разбивки).

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

Ромикшеф, добавь, если я че упустил или плохо объяснил :)
 

Crazy

Developer
Меленький вопрос к автору:

Код:
 $p=strpos(strtolower($this->sql),"from");
Это успешно отработает следующий запрос?

Код:
select id, dateFrom, dateTo from log
 

antonio

Moderator
Команда форума
:) это я ищу позицию слова from в sql запросе. Crazy, хорош прикалываться :)
 

Crazy

Developer
Я не прикалываюсь. В данном примере код, следующий за приведенной строкой, вместо ожидавшегося "from log" получит "From, dateTo from log" и все если и будет работать, то более чем странно.

Так что нужно что-то править. Либо запрещать перечислять поля в select'е, либо искать "from" как-то иначе (regexp'ом, к примеру).
 

antonio

Moderator
Команда форума
Понял, спасибо, исправлю щас (ну не догнал сразу :))
 

antonio

Moderator
Команда форума
Пофиксил, теперь все оки

$p=strpos(strtolower($this->sql)," from ");
 
Сверху