Периодически на форуме возникают предложения о добавлении того или иного функционала в JComments, но в большинстве своем они все очень индивидуальны, чтобы включать их в компонент. Однако это не значит, что решения нет и в этой небольшой статье я хочу привести пример простейшего плагина для JComments.
Предлагаю рассмотреть задачу разработки плагина для JComments, который будет запрещать публиковать комментарий, содержащий определенное слово (назовем его стоп-словом).
Для решения этой задачи нам необходимо сначала выбрать событие JComments, которое позволит нам перехватить момент сохранения комментария. Информация о поддерживаемых событиях доступна на официальном сайте Список поддерживаемых событий для плагинов JComments. В данном случае проще всего использовать событие onJCommentsCommentBeforeAdd, так как это событие как раз и позволит нам проверить содержимое комментария и заблокировать сохранение, если комментарий содержит заданное стоп-слово.
Приступим к созданию плагина. Для начала создадим файл XML-манифеста для плагина и назовем его stopword.xml
JComments - StopWord 06/08/2014 smart Copyright 2014 JoomlaTune.ru All rights reserved! smart@joomlatune.ru http://www.joomlatune.ru http://www.gnu.org/copyleft/gpl.html GNU/GPL 1.0 PLG_JCOMMENTS_STOPWORD_XML_DESCRIPTION stopword.php en-GB/en-GB.plg_jcomments_stopword.ini en-GB/en-GB.plg_jcomments_stopword.sys.ini
Как видно из примера это простой типовой XML-манифест для плагина, в качестве группы плагинов указан jcomments, плагин поддерживает один параметр — stopword, в котором мы будем указывать стоп-слово. Кроме того мы включили поддержку локализации языковые файлы для английского языка. Кстати, давайте их добавим. Создаем папку languages, в ней подпапку en-GB и помещаем в нее 2 файла en-GB.plg_jcomments_stopword.ini:
PLG_JCOMMENTS_STOPWORD="JComments - StopWord" PLG_JCOMMENTS_STOPWORD_FIELD_STOPWORD_LABEL="Stop-word" PLG_JCOMMENTS_STOPWORD_FIELD_STOPWORD_DESC="If comment contains specified word it will be not published." PLG_JCOMMENTS_STOPWORD_MESSAGE_ERROR="You are not allowed to use word `%s`" PLG_JCOMMENTS_STOPWORD_XML_DESCRIPTION="Plugin does not allow to save comment which contains given word."и en-GB.plg_jcomments_stopword.sys.ini
PLG_JCOMMENTS_STOPWORD="JComments - StopWord" PLG_JCOMMENTS_STOPWORD_XML_DESCRIPTION="Plugin does not allow to save comment which contains given word."
Далее создаем непосредственно файл плагина stopword.php
params->get('stopword', ''); if (!empty($stopword)) { if (JString::strpos(JString::strtolower($comment->comment), JString::strtolower($stopword)) !== false) { // если комментарий содержит стоп-слово - выводим сообщение с ошибкой JCommentsAJAX::showErrorMessage(JText::sprintf('PLG_JCOMMENTS_STOPWORD_MESSAGE_ERROR', $stopword)); // и возвращаем false для отмены сохранения return false; } } return true; } }
Теперь мы можем все запаковать в архив, установить плагин в Менеджере расширений административной панели Joomla, опубликовать, указать в параметрах любое стоп-слово и попробовать добавить комментарий с данным стоп-словом.
{jcomments lock}