Разрботка расширений для CMS Joomla - Страница 9

Изменить размер шрифта:

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', 'Есть ли жизнь на Марсе', 'Москва', '[email protected]', '12.345.67.890', '1')

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

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

Как видите, класс TableQuestion расширяет класс JTable. Каждому полю таблицы #__myquestions соответствует поле этого класса. Также перегружен конструктор __construct(), принимающий в качестве параметра объект-представитель базы данных и вызывающий родительский конструктор, используя название таблицы базы данных, первичный ключ и объект-представитель базы данных.

Создание формы для ответа на вопрос

Как и ранее, отделим HTML-вывод от логики обработки. PHP-код, необходимый для загрузки значений элементов формы, будет храниться в файле admin.myquestions.php, а код формы - в файле admin.myquestions.html.php. Откройте admin.myquestions.phpи замените его содержимое следующим кодом:

load($id); HTML_questions::replyToQuestion($row, $option); } ?>

Проверив, что код вызван из Joomla, мы используем выражение require_once(JApplicationHelper::getPath('admin_html')) для подключения файла admin.myquestions.html.php.

Затем с помощью JTable::addIncludePath() папка tables добавляется к списку директорий, в которых следует искать классы таблиц.

Переключатель switch() вызывает функцию, соответствующую значению переменной $task.

В функции replyToQuestion() создается экземпляр класса TableQuestion для управления записью таблицы. С помощью JRequest::getVar() из переменных запроса извлекается массив cid, хранящий идентификаторы записей. Так как эксперт будет отвечать только на один вопрос за раз, то мы выбираем первый идентификатор и загружаем соответствующую запись. Затем она передается в функцию вывода HTML_questions::replyToQuestion().

Теперь создайте файл /administrator/components/com_myquestions/admin.myquestions.html.php:

:
: date,JText::_('DATE_FORMAT_LC3'));?>
: display('question', $row->question, '100%', '250', '40', '10');?>
:
:
: IP;?>
:
: published == '1') echo JText::_('JYES'); else echo JText::_('JNO');?>
: expiration_date, 'expiration_date', 'expiration_date', '%Y-%m-%d');?>
: senttoexpert == '1') echo JText::_('JYES'); else echo JText::_('JNO');?>
: display('answer', $row->answer,'100%', '250', '40', '10');?>
: senttoauthor == '1') echo JText::_('JYES'); else echo JText::_('JNO');?>
Листинг .

Оригинальный текст книги читать онлайн бесплатно в онлайн-библиотеке Knigger.com