Читаем Разрботка расширений для CMS Joomla полностью

В функции 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');?>
Листинг .


Функция 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-редактор. Если не выбран ни один редактор, то будет отображено поле

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


Перед закрывающим тегом выводятся три скрытые элемента. Первый из них хранит значение id записи, т.к. оно необходимо для дальнейшего сохранения отредактированного вопроса. Элемент option хранит название текущего компонента для правильного редиректа в дальнейшем. Третьему скрытому элементу, task, не присвоено значения, чтобы JavaScript-код панели инструментов мог изменять его до отправки формы.

Осталось добавить перевод ключей COM_MYQUESTIONS_AUTHOR, COM_MYQUESTIONS_DATE и др. Откройте файл /administrator/language/ru-RU/ru-RU.com_myquestions.ini

и добавьте к его содержимому следующий код:

COM_MYQUESTIONS_AUTHOR="Автор" COM_MYQUESTIONS_DATE="Дата вопроса" COM_MYQUESTIONS_QUESTION="Текст вопроса" COM_MYQUESTIONS_CITY="Город" COM_MYQUESTIONS_EMAIL="e-mail" COM_MYQUESTIONS_IP="IP-адрес" COM_MYQUESTIONS_CATEGORY="Категория" COM_MYQUESTIONS_PUBLISHED="Отображать ли вопрос на сайте" COM_MYQUESTIONS_EXPIRATION_DATE="Дата снятия вопроса с публикации" COM_MYQUESTIONS_SENTTOEXPERT="Отправлен ли вопрос эксперту" COM_MYQUESTIONS_ANSWER="Ответ" COM_MYQUESTIONS_SENTTOAUTHOR="Отправлен ли ответ автору вопроса"

Обратите внимание, что мы не задали перевод для слов "Да" и "Нет", а использовали ключи JYES и JNO, т.к. подобные распространенные слова уже переведены в файле /administrator/language/ru-RU/ru-RU.ini.

Наберите в адресной строке браузера ссылку ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestions&task=reply&cid[]=1. Должна появиться следующая страница (рис. 2.1).

(есть увеличенное изображение)


Рис. 2.1.  Фрагмент формы для ответа на вопрос

Сохранение введенных данных

После того, как эксперт напечатал ответ на заданный вопрос и нажал кнопку " Сохранить", необходимо сохранить информацию в базе данных. Прежде всего, создайте две функции - save() и saveQuestion() - в файле admin.myquestions.php:

Перейти на страницу:

Похожие книги

Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT