FL.ru – фриланс сайт удаленной работы №1. Поиск удаленной работы, фрилансеры.

Абстрактный класс JTable

Категории: Joomla

Этот класс дает возможность для ускоренной разработки интерфейса для работы с БД. Класс 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))
{
 // Здесь – обработка ошибок
}

Продолжение статьи читайте здесь.




Подпишитесь на рассылку блога
max1net.com:
Уже подписались человек
Укажите свой e-mail