Использование класса JTable
Для нужной таблицы создаем класс на основе JTable
defined('_JEXEC') or die(); class TableRecipes extends JTable { public function __construct($db) { parent::__construct( '#__recipes', 'id', $db ); } public function bind($array, $ignore = '') { if (isset($array['attribs']) && is_array($array['attribs'])) { $registry = new JRegistry; $registry->loadArray($array['attribs']); $array['attribs'] = (string)$registry; } return parent::bind($array, $ignore); } public function check() { if (trim($this->title) == '') { $this->setError(JText::_('COM_INTEGRALS_WARNING_PROVIDE_VALID_NAME')); return false; } return true; } }
Указали имя таблицы в базе данных и ключевое поле. Во время привязки данных, конвертируем массив в json. также делаем проверку, к примеру, есть ли текст заголовка.
Теперь, чтобы получить объект таблицы в файле модели, создадим функцию:
public function getTable($type = 'Recipes', $prefix = 'Table', $config = array()) { return JTable::getInstance($type, $prefix, $config); }
Если мы хотим получить объект таблицы, например, из модуля, то делаем так:
JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_recipes/tables'); $row = JTable::getInstance('recipes', 'Table', array());
Зарезервированные поля для таблиц.
Field name | Methods using the field name |
---|---|
checked_out | checkOut, checkIn, isCheckedOut |
checked_out_time | checkOut, checkIn, isCheckedOut |
hits | hit |
ordering | getNextOrder, reorder, move |
published | publish |
Например, в джумла есть механизм блокировки таблицы на время редактирования, чтобы одну таблицу не начали редактировать несколько человек. Для этого есть метод checkOut, он делает отметки в соответствующем поле таблицы.
Чтобы добавить или изменить запись в таблице, делаем так:
$dataItems['id'] = $id; $dataItems['fieldid'] = $data['id']; $dataItems['title'] = $fieldItemTitles[$i]; $dataItems['ordering'] = $fieldItemOrders[$i]; $table->bind($dataItems); if ($table->check()) { if (!$table->store()) { // обработчик ошибок записи // используем $table->getError() } } else { // обработчик ошибки проверки буфера // тоже используем $table->getError() }
Создаем нужный массив, привязываем его к таблице и сохраняем. Если переданный ключ совпадает с записью в таблице, то эта запись обновится.
Удаляем так:
if (!$table->delete($id)) { // обрабатываем ошибки }