Вход/Регистрация
Разрботка расширений для CMS Joomla
вернуться

Седова Яна Анатольевна

Шрифт:

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)

где:

$with - id пользователя, с которым нужно сравнить значение поля checked_out. Если запись заблокирована как раз этим пользователем, то функция вернет false, как и в том случае, если она не заблокирована вообще. В обоих этих случаях текущий пользователь имеет право работать с ней; $against - id пользователя, использующийся, если функция вызвана как статическая.

Для блокировки записей используется метод

bool checkOut(int $userId, mixed $pk=null)

где:

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

При этом в поле checked_out_time будет записано текущее время.

Для разблокировки записей используется метод bool checkIn(mixed $pk=null)

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

$table->load($id); $user =& JFactory::getUser; if ($table->isCheckedOut($user->get('id'))) die('Запись уже заблокирована другим пользователем'); echo 'Запись не заблокирована'; if (!$table->checkout($user->get('id'))) die('Не удалось заблокировать запись с id текущего пользователя'); echo 'Заблокировали запись'; // работа с записью... if (!$table->checkin($user->get('id'))) die('Не удалось разблокировать запись'); echo 'Разблокировали запись';

published

Значение поля published показывает, опубликована ли запись. Чтобы изменить значение этого поля для одной или нескольких записей, используется метод

bool publish(mixed $pks=null, int $state=1, int $userId=0)

где:

$pks - массив ключей записей, к которым необходимо применить операцию; $state - новое значение поля published (0 или 1); $userId - используется только когда в таблице существует также поле checked_out. При наличии в таблице этого поля метод publish может быть применен только к тем записям, для которых checked_out равно 0 или заданному $userId.

Метод вернет true и в том случае, если какие-либо из записей были заблокированы и для них не удалось изменить значение published.

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

$id_list = array($id); $user =& JFactory::getUser; if (!$table->publish($id_list, 1, $user->get('id'))) die($table->getError);

hits

В поле hits хранится количество просмотров записи. Для увеличения этого значения на 1 используется метод

bool hit(mixed $pk=null)

где $pk - первичный ключ записи.

Например:

$table->hit;

Практика

Создание таблицы базы данных

Создайте таблицу для хранения вопросов, выполнив следующий SQL-запрос:

CREATE TABLE `jos_myquestions` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(255) NOT NULL, `date` DATETIME NOT NULL, `question` TEXT NOT NULL, `city` VARCHAR(50) NULL, `email` VARCHAR(50) NOT NULL, `IP` VARCHAR(15) NOT NULL, `id_cat` INT NOT NULL, `published` TINYINT(1) NULL DEFAULT '1', `expiration_date` DATETIME NULL DEFAULT '0000-00-00 00:00:00', `senttoexpert` TINYINT(1) NULL DEFAULT '0', `answer` TEXT NULL DEFAULT '', `senttoauthor` TINYINT(1) NULL DEFAULT '0' );

По умолчанию дата снятия вопроса с публикации имеет значение '0000-00-00 00:00:00'. Будем считать, что такая дата означает, что вопрос опубликован навсегда.

Для тестирования системы добавьте запись в таблицу, выполнив SQL-запрос:

INSERT INTO `jos_myquestions`(`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES(NULL, 'Аноним', '2012-01-01 09:00:00', 'Есть ли жизнь на Марсе', 'Москва', 'somebody@mail.ru', '12.345.67.890', '1')

Создание класса таблицы

Создайте в папке /administrator/components/com_myquestionsпапку tables. В этой папке создайте файл question.php:

<?php defined('_JEXEC') or die('Restricted access'); class TableQuestion extends JTable { var $id = null; var $name = null; var $date = null; var $question = null; var $city = null; var $email = null; var $IP = null; var $id_cat = null; var $published = null; var $expiration_date = null; var $senttoexpert = null; var $answer = null; var $senttoauthor = null; function __construct(&$db) { parent::__construct('#__myquestions', 'id', $db); } } ?>

  • Читать дальше
  • 1
  • ...
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: