355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Яна Седова » Разрботка расширений для CMS Joomla » Текст книги (страница 5)
Разрботка расширений для CMS Joomla
  • Текст добавлен: 4 октября 2016, 21:48

Текст книги "Разрботка расширений для CMS Joomla"


Автор книги: Яна Седова



сообщить о нарушении

Текущая страница: 5 (всего у книги 10 страниц)

Иерархия пунктов меню. Отправка писем. Классы ядра JEditor, JURI, JError, JDate

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

Цель лекции:Ознакомиться со способом программного добавления пунктов меню в Joomla, а также с некоторыми методами классов JMail, JEditor, JURI, JError, JDate.

Организация иерархии пунктов меню в Joomla

Для хранения иерархии пунктов меню в Joomla используются вложенные множества (ссылка: http://en.wikipedia.org/wiki/Nested_set_model). Например, на рис. 4.1 представлена эта иерархия для случая, если бы в ней было всего восемь пунктов: корневой пункт меню Menu_Item_Root, com_bannersс подпунктами com_banners, com_banners_categories, com_banners_clientsи com_messagesс подпунктами com_messages_add, com_messages_read:

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

Рис. 4.1.  Пример использования вложенных множеств для организации иерархии пунктов меню

Каждому элементу иерархии соответствуют два числа – левый и правый ключи.

Для каждого пункта в таблице #__menuхранится idродителя parent_id, уровень levelи левый и правый ключи lftи rgt. На рис. 4.2 оранжевым цветом показаны id, синим – уровни, красным – левые и правые ключи.

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

Рис. 4.2.  Данные, хранящиеся для каждого пункта меню как элемента иерархии

Отправка писем (класс JMail)

Класс JMail предназначен для создания и отправки электронных писем. JMail поддерживает три механизма отправки почты: функцию PHP mail(), Sendmail и SMTP.

Доступ к глобальному объекту JMail можно получить через метод getMailer() класса JFactory:

$mailer =& JFactory::getMailer();

Отправитель письма

Для задания отправителя письма используется метод

JMail setSender(mixed $from)

где $from – либо строка, содержащая e-mail отправителя, либо массив, который содержит e-mail и имя отправителя.

Примеры:

// Первый вариант $mailer =& JFactory::getMailer(); $mailer->setSender('[email protected]'); // Второй вариант $sender = array('[email protected]', 'Вася') $mailer->setSender($sender);

Правильнее будет не задавать эти значения вручную, а получать их из настроек отправки почты, заданных в панели управления ( «Сайт» – «Общие настройки» – «Сервер»):

$config =& JFactory::getConfig(); $sender = array( $config->getValue('config.mailfrom'), $config->getValue('config.fromname')); $mailer->setSender($sender);

Адреса для ответа

Адреса для ответа задаются методом

JMail addReplyTo(array $replyto)

где $replyto – пара e-mail-имя или массив таких пар.

Например:

// Первый вариант $reply = array('[email protected]', 'Вася'); $mailer->addReplyTo($reply); // Второй вариант $reply0 = array('[email protected]', 'Вася'); $reply1 = array('[email protected]', 'Ваня'); $replies = array($reply0, $reply1); $mailer->addReplyTo($replies);

Получатель

Для задания получателя, получателя копии (Carbon Copy) и получателя скрытой копии (Blind Carbon Copy), используются методы

JMail addRecipient(mixed $recipient, mixed name = '') JMail addCC(mixed $cc, mixed name = '') JMail addBCC(mixed $bcc, mixed name = '')

где

$recipient, $cc, $bcc – e-mail или массив, состоящий из e-mail; $name – имя получателя или массив, состоящий из имен.

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

$user =& JFactory::getUser(); $mailer->addRecipient($user->email);

Задание нескольких получателей:

$recipient = array('[email protected]', '[email protected]'); $mailer->addRecipient($recipient);

Тема, текст, вложения

Тема, текст и вложения письма задаются методами

JMail setSubject(string $subject) JMail setBody(string $content) JMail addAttachment(mixed $attachment, mixed $name = '', mixed $encoding = 'base64', mixed $type = 'application/octet-stream')

где

$subject – строка, содержащая тему письма; $content – строка, содержащая текст письма; $attachment – строка, содержащая путь к файлу, или массив таких строк; $name – строка, содержащая имя файла, или массив таких строк; $encoding – кодировка сообщения: 8bit, 7bit, binary, base64, quoted-printable; $type – MIME-тип файла.

Например:

$mailer->setSubject('Тема письма'); $mailer->setBody("Текст письма"); $mailer->addAttachment(JPATH_COMPONENT.DS.'files'.DS.'document.pdf');

По умолчанию содержимое письма имеет формат plain text. Если вам нужно отправить письмо в формате HTML, используйте метод IsHTML(), задающий MIME-тип содержимого письма как text/html:

$mailer->IsHTML(true); $mailer->setBody("Текст письма, содержащий HTML-теги");

В этом случае желательно указать кодировку письма – base64, чтобы в нем не появились нежелательные символы:

$mailer->Encoding = 'base64';

Отправка

Наконец, для отправки письма используется метод Send(), возвращающий true при успешной отправке или объект JError в случае ошибки:

if ($mailer->Send() !== true) die('Ошибка отправки письма');

Проверка корректности e-mail

Помимо класса JMail, существует статический класс JMailHelper. Большинство его методов предназначены для очистки данных перед добавлением к электронному письму и используются классом JMail. Интерес для разработчика представляет метод isEmailAddress(), который проверяет, является ли заданная строка корректным адресом электронной почты:

if (!JMailHelper::isEmailAddress($str)) die('Недопустимый формат e-mail');

Перед использованием класса JMailHelper необходимо подключить библиотеку JMail:

jimport('joomla.utilities.mail');

WYSIWYG-редактор (класс JEditor)

Класс JEditor используется для работы с WYSIWYG-редактором.

Получить ссылку на глобальный объект JEditor можно так:

$editor =& JFactory::getEditor();

Отображение редактора

Для отображения выбранного администратором сайта редактора используется метод display(). Если не выбран ни один редактор, то будет отображено поле