Чтение онлайн

на главную - закладки

Жанры

Разрботка расширений для CMS Joomla
Шрифт:

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

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

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

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

<?php defined('_JEXEC') or die('Restricted access'); require_once (JApplicationHelper::getPath('admin_html')); JTable::addIncludePath(JPATH_COMPONENT.DS.'tables') ; switch($task) { case 'reply': replyToQuestion($option); break; default: break; } function replyToQuestion($option) { $row =& JTable::getInstance('Question','Table'); $cid = JRequest::getVar('cid', array(0), '', 'array'); $id = $cid[0]; $row->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:

<?php defined ('_JEXEC') or die ('Restricted access'); class HTML_questions { function replyToQuestion($row, $option) { $editor =& JFactory::getEditor; ?> <form action = "index.php" method="post" name="adminForm" id="adminForm"> <fieldset class="adminform"> <table class="admintable" width=100%> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_AUTHOR');?>: </td> <td> <input class="text_area" type="text" name="name" id="name" size="50" maxlength="255" value="<?php echo $row->name;?>"/> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_DATE');?>: </td> <td> <span class="text_area" type="text" name="date" id="date"><?php echo JHTML::_('date', $row->date,JText::_('DATE_FORMAT_LC3'));?></span> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_QUESTION');?>: </td> <td> <?php echo $editor->display('question', $row->question, '100%', '250', '40', '10');?> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_CITY');?>: </td> <td> <input class="text_area" type="text" name="city" id="city" size="50" maxlength="50" value="<?php echo $row->city;?>"/> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_EMAIL');?>: </td> <td> <input class="text_area" type="text" name="email" id="email" size="50" maxlength="50" value="<?php echo $row->email;?>"/> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_IP');?>: </td> <td> <span class="text_area" type="text" name="IP" id="IP"><?php echo $row->IP;?></span> </td> </tr> <tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_CATEGORY');?>: </td> <td> <input class="text_area" type="text" name="id_cat" id="id_cat" size="50" maxlength="250" value="<?php echo $row->id_cat;?>"/> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_PUBLISHED');?>: </td> <td valign="top"> <?php if ($row->published == '1') echo JText::_('JYES'); else echo JText::_('JNO');?> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_EXPIRATION_DATE');?>: </td> <td> <?php echo JHTML::_('calendar', $row->expiration_date, 'expiration_date', 'expiration_date', '%Y-%m-%d');?> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_SENTTOEXPERT');?>: </td> <td valign="top"> <?php if ($row->senttoexpert == '1') echo JText::_('JYES'); else echo JText::_('JNO');?> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_ANSWER');?>: </td> <td> <?php echo $editor->display('answer', $row->answer,'100%', '250', '40', '10');?> </td> </tr> <tr> <td width="100" class="key"> <?php echo JText::_('COM_MYQUESTIONS_SENTTOAUTHOR');?>: </td> <td valign="top"> <?php if ($row->senttoauthor == '1') echo JText::_('JYES'); else echo JText::_('JNO');?> </td> </tr> </table> </fieldset> <input type="hidden" name="id" value="<?php echo $row->id;?>"/> <input type="hidden" name="option" value="<?php echo $option;?>"/> <input type="hidden" name="task" value=""/> </form> <?php } } ?>

Листинг .

Функция HTML_questions::replyToQuestion выводит на экран уже заполненную форму, значения элементов которой берутся из объекта $row. Форме присвоено название adminForm, чтобы к ней можно было обращаться из JavaScript.

Классы JHTML и JEditor будут рассмотрены позже. Сейчас поясним только те выражения, в которых используются методы этих классов:

echo JHTML::_('date', $row->date,JText::_('DATE_FORMAT_LC3')); выводит дату $row->date в формате DATE_FORMAT_LC3 (один из стандартных форматов, заданных в Joomla).

$editor =& JFactory::getEditor; echo $editor->display('question', $row->question, '100%', '250', '40', '10'); отображает выбранный администратором HTML-редактор. Если не выбран ни один редактор, то будет отображено поле <textarea>. В редакторе или поле <textarea> будет выведено значение $row->question.

echo JHTML::_('calendar', $row->expiration_date, 'expiration_date', 'expiration_date', '%Y-%m-%d'); выводит текстовое поле со значением $row->expiration_date и пиктограмму календаря, при нажатии на которую появляется календарь для выбора даты.

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

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

Магия чистых душ

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Магия чистых душ

Барон Дубов

Карелин Сергей Витальевич
1. Его Дубейшество
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Барон Дубов

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Барон диктует правила

Ренгач Евгений
4. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон диктует правила

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Долгий путь домой

Русич Антон
Вселенная EVE Online
Фантастика:
космическая фантастика
попаданцы
6.20
рейтинг книги
Долгий путь домой

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Завод-3: назад в СССР

Гуров Валерий Александрович
3. Завод
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Завод-3: назад в СССР

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Отдельный танковый

Берг Александр Анатольевич
1. Антиблицкриг
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Отдельный танковый

Метатель. Книга 3

Тарасов Ник
3. Метатель
Фантастика:
попаданцы
альтернативная история
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель. Книга 3

Боярышня Евдокия

Меллер Юлия Викторовна
3. Боярышня
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Боярышня Евдокия