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

Абстрактный класс JTable — продолжение

Категории: Joomla

Если в delete() не указать идентификатор, то ID назначается из буфера. Методу canDelete() присущ всего один параметр – двухмерный массив, и проверка этим методом производится в том случае, если наша созданная запись в БД имеет похожие записи с иными таблицами БД. Внутри этого массива (canDelete() находятся ключи joinfield, name, idfield и label. Имя первого ключа – idfield. Имя внешнего ключа таблицы – joinfield, имя таблицы – name, Если похожих записей не найдено, то выводится сообщение «ошибка» при помощи ключа label, который описывает отношения между таблицами.

На нижеприведенном примере можно проверить наличие зависимости между записями таблиц #__myextension_mydata и #__myextension_children. Таблица #__myextension_children имеет ключи childid (первичный) и primary (внешний).

1
2
3
4
5
6
7
8
9
10
11
12
13
$join1 = array('idfield'   => 'childid', 
 'name'      => '#__myextension_children', 
 'joinfield' => 'parent', 
 'label'     => 'Children');
 
$joins = array($join1);
if ($table->canDelete($id, $joins))
{
 if (!$table->delete($id))
 {
 // Ошибка
 }
}

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

1
2
3
4
5
6
7
8
9
$join1 = array('idfield'   => 'childid', 
 'name'      => '#__myextension_children', 
 'joinfield' => 'parent', 
 'label'     => 'Children');
$join2 = array('idfield'   => 'ichildid', 
 'name'      => '#__myextension_illegitimate_children', 
 'joinfield' => 'parent', 
 'label'     => 'illegitimate Children');
$joins = array($join1, $join2);

Как управлять зарезервированным полем

При помощи класса JTable можно управлять зарезервированными полями. Для осуществления или снятия публикации можно применить метод publish(). При наличии в таблице поля checked_ out запись сторонним пользователем не редактируется. Пример ниже:

1
2
3
4
5
6
$publishIds = array($id);
$user =& JFactory::getUser();
if (!$table->publish($publishIds, 1, $user->get('id')))
{
 // Ошибка
}

Hits

Сделать инкремент записи можно, применив метод hit(). Инкремент – это увеличение переменной на единицу. В качестве примера устанавливается идентификатор записи и выполняется инкремент

1
2
$table->set('id', $id);
$table->hit();

В параметре hit() можно указать тот идентификатор, который нам нужен

1
$table->hit($id);

Checking Out

Прежде, чем блокировать запись, нужно удостовериться, что она не блокирована прежде. Блокировка необходима для того, чтобы несколько пользователей одновременно не работали с одной и той же записью. Методом isCheckOut() можно проверить наличие блокировки:

1
2
3
4
5
6
$table->load($id);
$user =& JFactory::getUser();
if ($table->isCheckedOut($user->get('id')))
{
 // Действия выполняются в случае блокировки 
}

Блокировка записи для пользователя:

1
2
3
4
5
6
$table->load($id);
$user =& JFactory::getUser();
if (!$table->checkout($user->get('id')))
{
 // Ошибка
}

Обработка записи:

1
2
3
4
5
6
$table->load($id);
$user =& JFactory::getUser();
if (!$table->checkin($user->get('id')))
{
 // Ошибка
}

Все эти приемы действуют только для зарегистрированных посетителей.

Ordering

Чтобы создать список элементов в назначенном порядке, можно пользоваться несколькими методами. Первый — reorder(). Он создает правильное расположение записей и исправляет ошибки.

1
$table->reorder();

Если таблица более сложная в построении, то используется дополнительный параметр. Для примера представим поле group. В первой (1) группе упорядочиваем записи следующим методом:

1
2
3
$db =& $table::getDBO();
$where = $db->nameQuote('group').' = 1';
$table->reorder($where)

Второй метод — getNextOrder(). Результат работы этого метода – очередная запись в том порядке, который мы определили. Как и в предыдущем варианте, можно определять группы. Например:

1
2
3
$db =& $table::getDBO();
$where = $db->nameQuote('group').' = 1';
$nextPosition = $table->getNextOrder($where);




Третий, и последний метод — move(). Перемещает записи на одну позицию вниз или вверх. Пример перемещения вверх:

1
2
3
4
$db =& $table::getDBO();
$where = $db->nameQuote('group').' = 1';
$table->load($id);
$table->move(1, $where)

Как видите, сохраняется возможность определения групп.

Поле параметров

Класс JParameter применим для обработки параметров INI. Так как в JTable специальных способов для управления параметрами не существует, то создаем объект JParameter и обработать его

1
$params = new JParameter($table->params);

После получения доступа к параметрам можно применять get() и set() для изменения параметров.

1
2
$value = $params->get('someValue');
$params->set('someValue', ++$value);

Методом toString() можно получить INI строку.

1
$table->params = $params->toString();

Можно даже самостоятельно создать строку параметра, для этого указываются путь к файлу XML и непосредственно параметры.

1
$params = new JParameter('foo=bar', $pathToXML_File);

Вывод на экран:

1
echo $params->render('params');

Поле даты

Сохраняя дату, необходимо следить за ее форматом. Для БД дата сохраняется в таком виде: YYYY-MM-DD HH:MM:SS. Методом JDate это сделать проще всего. Чтобы привести дату к правильному выводу, применяется метод toMySQL().

1
2
3
4
5
6
7
8
9
// import JDate class
jimport('joomla.utilities.date');
// Текущая дата
$myDate = gmdate();
// Новая дата JDate
// Для joomla версии 1.5.0 - $jdate = new JDate($myDate);
$jdate = & JFactory::getDate($myDate);
// Создание запроса toMySQL()
$query = 'SELECT * FROM #__example WHERE date < '.$jdate->toMySQL();

Где $ toMySQL() – дата в UNIX.




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