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

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

Жанры

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

Перед закрывающим тегом </form> выводятся три скрытые элемента. Первый из них хранит значение 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:

function save { $row =& JTable::getInstance('question', 'Table'); if (!$row->bind(JRequest::get('post'))) { echo "<script> alert('".$row->getError."'); window.history.go(-1); </script>\n"; exit; } $row->question = JRequest::getVar('question', '', 'post', 'string', JREQUEST_ALLOWRAW); $row->answer = JRequest::getVar('answer', '', 'post', 'string', JREQUEST_ALLOWRAW); if (!$row->store) { echo "<script> alert('".$row->getError."'); window.history.go(-1); </script>\n"; exit; } return $row; } function saveQuestion($option, $task) { $row = save; global $app; if ($task == 'save') $app->redirect('index.php?option='.$option, JText::_('COM_MYQUESTIONS_REPLY_SAVED')); else if ($task == 'apply') $app->redirect('index.php?option='.$option.'&task= reply&cid[]='.$row->id, JText::_('COM_MYQUESTIONS_REPLY_SAVED')); }

Переменной $row присваивается значение экземпляра класса TableQuestion и вызывается функция bind для связывания переменных, полученных из формы, с полями этого класса.

Для тех значений, которые вводились с помощью редактора Joomla, стандартный способ получения значений из массива JRequest::get('post') не подходит, т.к. функция bind автоматически удаляет HTML-код, что приведет, в частности, к потере разрывов строк и тегов абзаца. Поэтому для получения значений question и answer в том виде, в котором они были введены в редакторе, используется функция getVar класса JRequest. Данной функции передается имя переменной формы, значение по умолчанию, метод запроса, с помощью которого мы хотим получить данные (get/post), ожидаемый формат и флаг JREQUEST_ALLOWRAW, означающий, что данные не должны быть отфильтрованы.

Наконец, вызывается функция store для сохранения вопроса в базе данных.

В функции saveQuestion происходит вызов функции save, а затем в зависимости от задачи, т.е. от того, какая кнопка была нажата, - " Сохранить" или " Сохранить и закрыть", - мы перенаправляем пользователя либо к той же странице редактирования вопроса, на которой он находится, но уже с сохраненными данными, либо к главной странице нашего компонента. В обоих случаях выводится сообщение о том, что данные были сохранены. Для перенаправления и вывода сообщения используется функция redirect глобального объекта JApplication.

Добавьте задачу сохранения записи в переключатель switch в файле admin.myquestions.php(выделенный код):

Добавьте перевод для ключа COM_MYQUESTIONS_REPLY_SAVED в файл /administrator/language/ru-RU/ru-RU.com_myquestions.ini:

COM_MYQUESTIONS_REPLY_SAVED="Данные

сохранены"

Сохраните все ваши файлы и перейдите по ссылке ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestions&task=reply&cid[]=1. Напишите что-нибудь в поле для ответа и нажмите кнопку " Сохранить и закрыть". Вы должны увидеть следующую страницу (рис. 2.2).

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

Рис. 2.2. Результат сохранения ответа на вопрос

С помощью phpMyAdmin вы можете проверить, что данные были сохранены в таблице базы данных jos_myquestions (рис. 2.3).

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

Рис. 2.3. Ответ на вопрос сохранен в базе данных

Вывод списка записей

Прежде всего, добавьте в файл admin.myquestions.phpследующую функцию:

function showQuestions($option) { $db =& JFactory::getDbo; $query = "SELECT * FROM #__myquestions"; $db->setQuery($query); $rows = $db->loadObjectList; if ($db->getErrorNum) { echo $db->stderr; return false; } HTML_questions::showQuestions($option, $rows); }

Эта функция загружает все записи из таблицы #__myquestions и передает их в виде массива $rows в следующую функцию, которую необходимо добавить в файл admin.myquestions.html.phpв класс HTML_questions:

function showQuestions($option, &$rows) { $maxlen = 100; ?> <form action="index.php" method="post" name="adminForm"> <table class="adminlist"> <thead> <tr> <th width="20"> <input type="checkbox" name="toggle" value="" onclick="checkAll(<?php echo count($rows);?>);"/> </th> <th class="title"><?php echo JText::_('COM_MYQUESTIONS_AUTHOR');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_DATE');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_QUESTION');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_EMAIL');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_PUBLISHED');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_EXPIRATION_DATE');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_SENTTOEXPERT');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_ANSWER');?></th> <th><?php echo JText::_('COM_MYQUESTIONS_SENTTOAUTHOR');?></th> </tr> </thead> <?php jimport('joomla.filter.output'); $k = 0; for ($i = 0, $n = count($rows); $i < $n; $i ++) { $row = &$rows[$i]; $checked = JHTML::_('grid.id', $i, $row->id); $link = JFilterOutput::ampReplace('index.php?option=' .$option . '&task=reply&cid[]='. $row->id); ?> <tr class="<?php echo "row$k";?>"> <td><?=$checked?></td> <td><?=$row->name?></td> <td><?=JHTML::_('date', $row->date, JText::_('DATE_FORMAT_LC3'))?></td> <td><?='<a href="#">'.substr(strip_tags($row->question), 0,$maxlen-1).'</a>'?></td> <td><?=$row->email?></td> <td align="center"> <?php if ($row->published == '1') echo JText::_('JYES'); else echo JText::_('JNO');?> </td> <td> <?php if ($row->expiration_date == '0000-00-00 00:00:00') echo JText::_('COM_MYQUESTIONS_DATE_NOT_DEFINED'); else echo JHTML::_('date', $row->expiration_date, JText::_('DATE_FORMAT_LC3'));?> </td> <td align="center"> <?php if ($row->senttoexpert == '1') echo JText::_('JYES'); else echo JText::_('JNO');?> </td> <td><?=substr(strip_tags($row->answer),0,$maxlen-1)?></td> <td align="center"> <?php if ($row->senttoauthor == '1') echo JText::_('JYES'); else echo JText::_('JNO'); ?> </td> </tr> <?php $k = 1 - $k; } ?> </table> <input type="hidden" name="option" value="<?php echo $option;?>"/> <input type="hidden" name="task" value=""/> <input type= "hidden" name="boxchecked" value="0"/> </form> <?php } Листинг .

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

Кодекс Охотника. Книга V

Винокуров Юрий
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Кодекс Охотника. Книга V

Долг

Кораблев Родион
7. Другая сторона
Фантастика:
боевая фантастика
5.56
рейтинг книги
Долг

Матабар III

Клеванский Кирилл Сергеевич
3. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар III

Мое ускорение

Иванов Дмитрий
5. Девяностые
Фантастика:
попаданцы
альтернативная история
6.33
рейтинг книги
Мое ускорение

Печать мастера

Лисина Александра
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Печать мастера

Я все еще барон

Дрейк Сириус
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Я все еще барон

Эволюционер из трущоб. Том 9

Панарин Антон
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 9

Измена. Тайный наследник. Том 2

Лаврова Алиса
2. Тайный наследник
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Тайный наследник. Том 2

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

С Д. Том 16

Клеванский Кирилл Сергеевич
16. Сердце дракона
Фантастика:
боевая фантастика
6.94
рейтинг книги
С Д. Том 16

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

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

Неудержимый. Книга XIX

Боярский Андрей
19. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIX

Дракон

Бубела Олег Николаевич
5. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.31
рейтинг книги
Дракон