Изменить стиль страницы

Тип содержимого письма задается как text/html, так как оно содержит html-теги.

Если письмо успешно отправлено, то в соответствующей вопросу записи в базе данных значение senttoexpert или senttoauthor устанавливается равным 1.

В конце функции происходит перенаправление на текущую страницу с выводом сообщения либо об успешной отправке письма, либо об ошибке.

Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniследующий код:

COM_MYQUESTIONS_EMAIL_SUCCESS="e-mail отправлен" COM_MYQUESTIONS_EMAIL_ERROR="Не удалось отправить e-mail" COM_MYQUESTIONS_NEW_QUESTION="Новый вопрос" COM_MYQUESTIONS_EMAIL_EXPERT_BODY="<p>Добрый день!</p><p>На сайте появился новый вопрос: </p><p><i>%s</i></p>" COM_MYQUESTIONS_NEW_ANSWER="Ответ на ваш вопрос" COM_MYQUESTIONS_EMAIL_USER_BODY="<p>Добрый день!</p><p>На сайте появился ответ на ваш вопрос: </p><p><i>%s</i></p><p>Ответ был таким:</p><p><i>%s</i></p>"

Как видите, строки COM_MYQUESTIONS_EMAIL_EXPERT_BODY и COM_MYQUESTIONS_EMAIL_USER_BODY содержат параметры. Так как их тип - строковый (тексты вопроса, ответа), то используется описатель типа %s.

Теперь перейдите в бэкенде на страницу ответа на вопрос и нажмите кнопку " Отправить эксперту". Вы должны увидеть сообщение о том, что письмо отправлено (рис. 4.5).

Разрботка расширений для CMS Joomla _33.jpg

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

Рис. 4.5.  Сообщение об отправке уведомления по электронной почте

Если вы используете локальный сервер, то ваше письмо, скорее всего, на самом деле не отправилось. В Денвере срабатывает почтовая заглушка sendmail: все письма просто помещаются в папку <путь к Денверу>/tmp/!sendmailв виде файлов с расширением .eml. Если в вашем случае так и есть, то откройте эту папку и найдите в ней только что "отправленное" письмо (можно ориентироваться по названию файла - это дата и время "отправки"). Откройте файл в почтовой программе и убедитесь, что его содержимое соответствует заданным нами значениям (рис. 4.6).

Разрботка расширений для CMS Joomla _34.jpg

Рис. 4.6.  Результат отправки уведомления на локальном сервере - файл .eml, открытый в почтовой программе

Перейдите к списку вопросов и убедитесь, что значение в столбце " Отправлен ли вопрос эксперту" поменялось с " Нет" на " Да" (рис. 4.7).

Разрботка расширений для CMS Joomla _35.jpg

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

Рис. 4.7.  Новое значение в столбце "Отправлен ли вопрос эксперту"

Аналогично проверьте, как работает кнопка " Отправить ответ".

Добавление пункта меню

Добавим пункт меню для управления категориями.

Создавая первый пункт меню для нашего компонента, мы не указали значения левого и правого ключей. Определим их сейчас. Уровень данного пункта равен 1 (его предком является корень дерева с уровнем 0, а потомки могут иметь уровень 2 и более). Родительский узел - это самая первая строка в таблице #__menu, посмотрите значение его правого ключа в поле rgt.

Пусть $right_key - правый ключ родительского узла, $level - уровень родительского узла. Тогда для задания правильных значений левого и правого ключей выполним следующие запросы (не забудьте заменить $right_key и $level на значения из вашей таблицы):

Обновление ключей узлов, стоящих за родительским узлом:

UPDATE jos_menu SET lft=lft+2, rgt=rgt+2 WHERE lft>$right_key

Обновление родительской ветки:

UPDATE jos_menu SET rgt=rgt+2 WHERE rgt>=$right_key AND lft<$right_key

Обновление нового узла:

UPDATE jos_menu SET lft=$right_key, rgt=$right_key+1, level=$level+1 WHERE title='com_myquestions_menu'

Пусть теперь $right_key и $level - соответственно правый ключ и уровень этого только что обновленного нами узла, а $parent_id - его id. Создадим два подпункта этого пункта меню (не забудьте заменить 10006 на id вашего компонента из таблицы #__extensions).

Подпункт для управления списком вопросов:

UPDATE jos_menu SET lft=lft+2, rgt=rgt+2 WHERE lft>$right_key; UPDATE jos_menu SET rgt=rgt+2 WHERE rgt>=$right_key AND lft<$right_key; INSERT INTO `jos_menu` (`menutype`, `title`, `alias`, `path`, `link`, `type`, `parent_id`, `level`, `component_id`, `access`, `img`, `params`, `lft`, `rgt`, `client_id`) VALUES ('menu', 'com_myquestions_menu_questions', 'Questions', 'My Questions/Questions', 'index.php?option=com_myquestions', 'component', $parent_id, $level+1, 10006, 1, 'class:component', '', $right_key, $right_key+1, 1);

Обратите внимание, что значения alias и path соответствуют иерархии узлов.

Посмотрите в таблице #__menu новое значение $right_key главного пункта меню для нашего компонента - оно должно было увеличиться на 2. Теперь создадим подпункт для управления списком категорий:

UPDATE jos_menu SET lft=lft+2, rgt=rgt+2 WHERE lft>$right_key; UPDATE jos_menu SET rgt=rgt+2 WHERE rgt>=$right_key AND lft<$right_key; INSERT INTO `jos_menu` (`menutype`, `title`, `alias`, `path`, `link`, `type`, `parent_id`, `level`, `component_id`, `access`, `img`, `params`, `lft`, `rgt`, `client_id`) VALUES ('menu', 'com_myquestions_menu_categories', 'Categories', 'My Questions/Categories', 'index.php?option=com_myquestions&task=showcat', 'component', $parent_id, $level+1, 10006, 1, 'class:component', '', $right_key, $right_key+1, 1);

Наконец, добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.sys.iniкод:

COM_MYQUESTIONS_MENU_QUESTIONS="Управление вопросами" COM_MYQUESTIONS_MENU_CATEGORIES="Управление категориями"

Обновите любую страницу в бэкенде и убедитесь, что появились два новых подпункта меню " Моя система "вопрос - ответ"" (рис. 4.8).

Разрботка расширений для CMS Joomla _36.jpg

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

Рис. 4.8.  Подпункты меню в бэкенде

Разработка фронтенда

Для удобства дальнейшего тестирования добавим еще несколько вопросов в различные категории:

INSERT INTO `jos_myquestions` (`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES (NULL, 'Аноним', '2012-01-02 09:01:00', 'Быть или не быть?', 'Москва', '[email protected]', '12.345.67.890', '1'); INSERT INTO `jos_myquestions` (`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES (NULL, 'Аноним', '2012-01-01 09:02:00', 'А судьи кто?', 'Москва', '[email protected]', '12.345.67.890', '2'); INSERT INTO `jos_myquestions` (`id`, `name`, `date`, `question`, `city`, `email`, `IP`, `id_cat`) VALUES (NULL, 'Аноним', '2012-01-01 09:03:00', ' А был ли мальчик?', 'Москва', '[email protected]', '12.345.67.890', '2');

Для наглядности выключите SEF в настройках сайта: в бэкенде зайдите в меню " Сайт" - " Общие настройки" и установите переключатель " Включить SEF (ЧПУ)" в значение " Нет".

Вывод списка категорий

Замените содержимое файла /components/com_myquestions/myquestions.php(обратите внимание, что мы больше не работаем с папкой /administrator) на следующий код:

<?php defined('_JEXEC') or die('Restricted access'); jimport('joomla.application.helper'); require_once(JApplicationHelper::getPath('html')); JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'. DS.$option.DS.'tables'); switch($task) { default: showCategories($option); break; } function showCategories($option) { $db =& JFactory::getDbo(); $query = "SELECT c.id, c.name, c.desc ". "FROM #__myquestions_categories c"; $db->setQuery($query); $rows = $db->loadObjectlist(); if ($db->getErrorNum()) { echo $db->stderr(); return false; } HTML_questions::showCategories($rows, $option); } ?>