Загрузчик

В jqGridPHP каждая таблица представлена отдельным классом, который наследуется от базового класса jqGrid, либо от промежуточного класса-адаптера. Обращения к таблицам осуществляется не напрямую, а через специальный единый класс-загрузчик: jqGridLoader

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

Прежде всего, подключите jqGridLoader.php и создайте объект jqGridLoader:

require PATH_TO_JQGRID_PHP . "jqGridLoader.php";
$loader = new jqGridLoader;

Далее необходимо его настроить.
Как минимум - указать путь к папке с таблицами, а также данные для доступа к БД.

Установка осуществляются через метод set. Получение значений - метод get.

#Set grid directory
$loader->set("grid_path", PATH_TO_GRIDS);
 
#Use PDO for database connection
$loader->set("db_driver", "PDO");
 
#Set PDO-specific settings
$loader->set("pdo_dsn"  , "mysql:dbname=testdb;host=127.0.0.1");
$loader->set("pdo_user" , "root");
$loader->set("pdo_pass" , "");

Полный список настроек

Вы можете передавать любые другие переменные через загрузчик. К ним можно будет легко обратиться внутри классов таблиц. Например:

protected function init()
{
    $this->loader->get("db_driver"); //PDO
}

Обращение к таблицам

Просто

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

$loader->autorun();

Сложно

По умолчанию у таблицы всего три public метода:

  • render - создание HTML + JS кода для отрисовки таблцы
  • output - вывод данных в таблицу
  • oper - различные операции (добавление, изменение, удаление и т.п.)

Чтобы обратиться к ним, используется следующий синтаксис:

$loader->method_name('grid_class', [$foo1], [$foo2]);

где grid_class - имя класса таблицы
method_name - имя вызываемого public-метода класса таблицы
Остальные переменные передаются в вызываемый метод в качестве аргументов

Например:

$loader->output($grid_name);
$loader->render($grid_name, null, 2);
$loader->oper($grid_name, $oper);

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

Например, если вам вдруг понадобится добавить всеобщие логи на действие 'oper', то достаточно будет перегрузить всего один метод в jqGridLoader, а не править класс каждой таблицы по-отдельности.

Дополнительная прослойка также поможет мне сохранить обратную совместимость, если я надумаю что-то кардинально поменять в следующей версии.

Законченный пример

Следующий код используется в наших примерах для подключения загрузчика.

<?php
#Get config
require 'config.php';
 
require $_CONFIG['root_path'] . 'jqGridLoader.php';
 
#Init loader
$jq_loader = new jqGridLoader;
 
#Set grid_path
$jq_loader->set('grid_path', 'grids' . DS);
 
#Set PDO options
$jq_loader->set('pdo_dsn' , $_CONFIG['pdo_dsn']);
$jq_loader->set('pdo_user', $_CONFIG['pdo_user']);
$jq_loader->set('pdo_pass', $_CONFIG['pdo_pass']);
 
#Turn on debug output
$jq_loader->set('debug_output', true);
 
#Autorun grid OUTPUT or OPER, if possible
#Script may 'exit' here!
$jq_loader->autorun();
 
... proceed to rendering ...

На других языках