Вход/Регистрация
Разрботка расширений для CMS Joomla
вернуться

Седова Яна Анатольевна

Шрифт:

Перечисленные методы создавались в то время, когда Joomla работала с PHP4, где отсутствовал механизм обработки исключений. Если на хостинге стоит PHP5, предпочтительнее использовать класс Exception.

Даты (класс JDate)

JDate - класс для работы с датами. Для создания объекта JDate используется метод getDate класса JFactory:

JDate JFactory::getDate(mixed $time = 'now', mixed $tzOffset = null)

где

$time - дата и время в формате, годном для функции PHP strtotime; $tzOffset - временная зона. Может задаваться числом от -12 до 14 (смещение относительно всемирного координированного времени - UTC) или строкой из числа временных зон, поддерживаемых PHP (их список можно найти на странице ссылка: http://www.php.net/manual/ru/timezones.php).

В отличие от многих других методов JFactory, getDate не возвращает глобальный объект, а создает новый. Поэтому перед вызовом этого метода не нужно ставить амперсанд:

$now = JFactory::getDate; // текущие дата и время $some_date = JFactory::getDate('2012-01-01 00:00:00','Europe/Moscow');

Получение даты в каком-либо формате

string format(string $format, bool $local = false, bool $translate = true)

где

$format - формат; $local - возвращать дату в локальной временной зоне или в GMT; $translate - переводить ли текст.

Чтобы не задавать формат даты вручную, можно использовать один из определенных в Joomla форматов: DATE_FORMAT_LC, DATE_FORMAT_LC1 и т.д. Их список находится в языковом файле language/<ln-LN>/<ln-LN>.ini, где <ln-LN>– код языка. Как и для всякого языкового ключа, значение такого формата можно получить с помощью функции JText::_. Например, выведем дату в формате DATE_FORMAT_LC3:

echo $some_date->format(JText::_('DATE_FORMAT_LC3'));

Получение даты в формате, пригодном для вставки в запрос SQL

string toMySQL(bool $local=false)

Например, для получения материалов, созданных ранее даты $some_date, можно выполнить запрос:

$query = "SELECT * FROM #__content WHERE created < '{$some_date->toMySQL}'";

Практика

Отправка уведомлений по электронной почте

Сейчас в форме для ответа на вопрос две кнопки на панели инструментов (рис. 4.4) - нерабочие.

Рис. 4.4. Кнопки для отправки уведомлений по электронной почте

Напишем код для их обработки.

Откройте файл admin.myquestions.phpи добавьте в переключатель switch обработку двух задач:

case 'sendToExpert': case 'sendAnswer': send($option,$task); break;

Добавьте также в этот же файл функцию send:

function send($option,$task) { $row_new = save; $q = $row_new->question; $a = $row_new->answer; $mailer =& JFactory::getMailer; $mailer->setSender('test@mysite.ru'); if ($task == 'sendToExpert') { $mailer->addRecipient('expert@mysite.ru'); $mailer->setSubject(JText::_('COM_MYQUESTIONS_NEW_QUESTION')); $mailer->setBody(JText::sprintf('COM_MYQUESTIONS_EMAIL_EXPERT_BODY',$q)); } else { $mailer->addRecipient($row_new->email); $mailer->setSubject(JText::_('COM_MYQUESTIONS_NEW_ANSWER')); $mailer->setBody(JText::sprintf('COM_MYQUESTIONS_EMAIL_USER_BODY',$q,$a)); } $mailer->IsHTML(true); if ($mailer->Send !== true) $message = 'COM_MYQUESTIONS_EMAIL_ERROR'; else { $message = 'COM_MYQUESTIONS_EMAIL_SUCCESS'; $db =& JFactory::getDbo; if ($task == 'sendToExpert') $query = "UPDATE #__myquestions SET senttoexpert=1 WHERE id={$row_new->id}"; else $query = "UPDATE #__myquestions SET senttoauthor=1 WHERE id={$row_new->id}"; $db->setQuery($query); $db->query; if ($db->getErrorNum) { echo $db->stderr; return false; } } global $app; $app->redirect('index.php?option='.$option.'&task=reply&cid[]='.$row_new->id, JText::_($message)); } Листинг .

В данной функции прежде всего происходит сохранение текущей записи и обновленная запись сохраняется в переменной row_new. Затем в зависимости от того, отправляется это уведомление эксперту или автору вопроса, задаются отправитель, получатель, тема и текст письма. Если уведомление отправляется пользователю, задавшему вопрос, то адрес электронной почты получателя берется из записи row_new.

При задании тела письма используется метод JText::sprintf, пропускающий заданную ему строку через PHP-функцию sprintf. В выражении JText::sprintf('COM_MYQUESTIONS_EMAIL_USER_BODY',$q,$a) 'COM_MYQUESTIONS_EMAIL_USER_BODY' - это строка формата, которую мы сейчас зададим в языковом файле, а $q и $a - это аргументы (соответственно текст вопроса и текст ответа).

Тип содержимого письма задается как 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="Добрый день!На сайте появился новый вопрос: <i>%s</i>" COM_MYQUESTIONS_NEW_ANSWER="Ответ на ваш вопрос" COM_MYQUESTIONS_EMAIL_USER_BODY="Добрый день!На сайте появился ответ на ваш вопрос: <i>%s</i>Ответ был таким:<i>%s</i>"

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

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

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

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

  • Читать дальше
  • 1
  • ...
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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