Читаем Разрботка расширений для CMS Joomla полностью

JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_mycomponent'.DS.'tables');

Теперь при создании экземпляра класса TableMytable Joomla будет искать файл mytable.php.

Для получения экземпляра данного класса используется метод getInstance():

object getInstance(string $type, string $prefix= 'JTable', array $config=array())

где

$type - вторая часть имени класса; $prefix - первая часть имени класса; $config - массив, содержащий настройки конфигурации.


В их числе может находиться объект-представитель базы данных, и тогда он будет использован вместо глобального объекта JDatabase. Например:

$row =& JTable::getInstance('mytable', 'Table');

Производный от JTable класс наследует в числе прочих методы bind(), store(), load() и delete(), позволяющие управлять записями таблицы без единой строки SQL-кода.

Создание/редактирование записи таблицы

Как правило, для создания или редактирования записи таблицы во фронтенде или бэкенде создается HTML-форма. Значения, введенные в нее пользователем, можно получить с помощью класса JRequest в виде массива. Полученный массив необходимо связать с объектом JTable. Связываниезаключается в том, что каждому полю класса присваивается значение элемента массива, ключ которого совпадает с названием этого поля. Для этого используется метод

bool bind(mixed $src, mixed $ignore=array())

где:

$src - ассоциативный массив или объект для связывания с экземпляром класса; $ignore - массив или разделенный пробелами список полей, которые нужно игнорировать при связывании.


Например:

if (!$row->bind(JRequest::get('post'))) return JError::raiseWarning(500, $row->getError());

Обычно ошибка связывания возникает, если поля класса не соответствуют ключам массива, - например, когда в HTML-форме в название элемента input вкралась опечатка.

Для сохранения записи используется метод bool store(bool $updateNulls=false)

Если параметр $updateNulls равен false, то те поля объекта JTable, которые имеют значение null, будут игнорироваться при связывании.

Пример использования метода store():

if (!$row->store()) JError::raiseError(500, $row->getError());

Метод store() на основе хранящихся в $row значений генерирует запрос UPDATE или INSERT, в зависимости от значения id. Если запись создается впервые, то она не имеет значения id и будет сконструирован запрос INSERT, в противном случае - UPDATE. Это позволяет использовать данный метод как для создания новых записей, так и для обновления существующих.

Получение записи из таблицы

Для получения записи используется метод

bool load(mixed $keys = NULL, bool $reset = true)

где

$keys - первичный ключ записи, которую необходимо получить, или массив полей для поиска соответствий; $reset - задает, будут ли перед получением новой записи заново присвоены полям значения по умолчанию.


Например:

$row->load($id);

Удаление записи

Для удаления записи используется метод

bool delete(mixed $id=null)

где $id - первичный ключ записи, которую требуется удалить. Если он не задан, то используется значение соответствующего поля объекта.

Пример:

$row->delete($id);

Управление полями ordering, checked_out/checked_out_time, published и hits

Существуют методы класса JTable для управления часто используемыми полями ordering, checked_out/checked_out_time, published и hits.


ordering

Поле ordering позволяет пользователю упорядочить список объектов по своему желанию. Чтобы пересчитать значения в поле ordering, используется метод void reorder([string $where = ''])

При этом записи сортируются по значению ordering, а затем в это поле записываются натуральные числа, начиная с 1. Параметр $where позволяет задать условие ограничения выборки, к которой будет применена эта операция.

Пример использования метода:

$table->reorder();

Изменить значение ordering для одной записи, передвинув ее выше или ниже в списке, можно с помощью метода

void move(int $dirn, [string $where = ''])

где $dirn - величина, которая будет прибавлена к текущему значению ordering (отрицательное значение приведет к смещению записи вверх, а положительное - вниз).

Например, поднимем запись на одну строку вверх:

$table->load($id); $table->move(-1);


checked_out/checked_out_time

Поля checked_out и checked_out_time используются для блокировки записей во избежание редактирования их несколькими пользователями одновременно. checked_out хранит id пользователя, работающего с записью в данный момент, а checked_out_time - время начала редактирования. Прежде чем заблокировать запись, необходимо проверить, не заблокирована ли она уже другим пользователем, с помощью метода

bool isCheckedOut(int $with=0, int $against=null)

где:

Перейти на страницу:

Похожие книги

Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT