Абстрактный класс JTable
Этот класс дает возможность для ускоренной разработки интерфейса для работы с БД. Класс JTable поможет в осуществлении таких действий, как блокировка, создание или удаление содержимого таблиц базы данных. Функции, которые поддерживает класс JTable, приведены ниже:
- Возможность копирования информации к JTable;
- Запись данных в XML;
- Полное управление записями;
- Возможность сопоставить запись с набором заранее определенных правил;
- Блокировка пользователя в любое время
- Возможность сортировки записей таблиц;
- Создание активной записи;
- Создание счетчика количества просмотров записи;
Класс Jtable, предоставляемый нам Joomla!
Для того, чтобы можно было работать с записями таблицы БД, Joomla позволяет осуществить выполнение всех основных функций при работе с таблицей — CRUD (Create Read Update Delete). Но для работы класс необходимо расширить, то есть – создать новый класс для каждой таблицы, которая будет работать в классе JTable. Если при создании подкласса строго придерживаться определенных правил, то это позволит нам вставить созданное расширение в framework Joomla. Каждое новое имя класса должно быть с префиксом table, и этот класс должен располагаться в каталоге tables, каждый в новом отдельном файле в административном разделе компонента. Работа с классом JTable показана на примере ниже.
Название класса должно быть таким: Table[Имя класса], к примеру, Table[MyData] и при этом располагаться в каталоге. Первое же применение класса должно проходить с определением глобальных свойств класса — JPATH_COMPONENT_ADMINISTRATOR.DS.’tables’.DS.’mydata.php’. Как видно из записи, глобальные сврйства класса должны именоваться так же, как и поля таблицы. Эти свойства будут использованы, как буфер для единичных записей. Теперь, для того, чтобы использовать метод JTable::getInstance(), необходимо дать определение конструктору и переназначить check(). Метод check() проверяет буфер и его содержимое. Если при проверке возвращается false, то применяем setError() и поясняем ошибку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | class TableMyData extends JTable { /** @var int Primary key */ var $id = null; /** @var string Content */ var $content = null; /** @var int Checked-out owner */ var $checked_out = null; /** @var string Checked-out time */ var $checked_out_time = null; /** @var string Parameters */ var $params = null; /** @var int Order position */ var $ordering = null; /** @var int Number of views */ var $hits = null; /** * Конструктор * * @param database Database object */ function __construct( &$db ) { parent::__construct('#__myextension_mydata', 'id', $db); } /** * Проверяем * * @return boolean True if buffer is valid */ function check() { if(!$this->content) { $this->setError(JText::_('Ошибка')); return false; } return true; } } |
Создаем экземпляр класса JTable:: getInstance().
1 2 | JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'); $table = JTable::getInstance('mydata', 'Table'); |
Главные задачи по управлению таблицей БД CRUD
CRUD (Create Read Update Delete) — имя общих задач по управлению таблицей БД.
В данном примере мы создадим новую запись; $table — TableMyData
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $table->reset(); $table->set('content', "Содержимое"); $table->set('ordering', $table->getNextOrder()); if ($table->check()) { if (!$table->store()) { // Здесь обработчик ошибок записи // Применяем $table->getError() } } else { // Здесь обработчик ошибки проверки буфера // Применяем $table->getError() } |
Метод reset() чистит буфер и устанавливает все значения по умолчанию. Метод getNextOrder() находит следующий элемент. При несуществующей записи – значение 1. Теперь о нашем примере – те поля, которые имели значение по умолчанию, после записи будут пустыми. Содержимое буфера после выполнения нашего примера будет:
1 2 3 4 5 6 7 8 9 10 | [id] => 1 [content] => Содержимое [checked_out] => [checked_out_time] => [params] => [ordering] => 1 [hits] => 0 Выполнив store(), можно его загрузить: $table->load($table->id); |
Содержимое буфера:
1 2 3 4 5 6 7 | [id] => 1 [content] => Содержимое [checked_out] => 0 [checked_out_time] => 0000-00-00 00:00:00 [params] => [ordering] => 1 [hits] => 0 |
Теперь необходимо переустановить reset(). Чтобы загрузить запись, применяем:
1 2 3 4 | if (!$table->load($id)) { // Для определения ошибок применяем $table->getError() } |
Чтобы обновить запись, можно использовать два метода. Первый метод – загрузка записи из БД, второй метод – установка значений свойств буфера. Обновляем запись:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $table->reset(); $table->setVar('id', $id); $table->setVar('content', JRequest::getString('content')); if ($table->check()) { if (!$table->store()) { // Обработка ошибок (ошибки) $table->getError() } } else { // Обработка ошибок ввода $table->getError() } |
Удалить запись можно так:
1 2 3 4 | if (!$table->delete($id)) { // Здесь – обработка ошибок } |
Продолжение статьи читайте здесь.
Оцените статью по 5-бальной шкале: