Просмотры
Материал из База знаний Joomla.
Содержание |
Вступление
Вы уже знаете, что мамботы по сути это маленькие функции, которые чаще всего выполняют какие-либо замены в переданном им на обработку тексте или выполняют некие системные действия. Примером может служить мамбот mosimage, который заменяет все вхождения {mosimage} на реальные картинки, которые были присвоены статье в административной части. Довольно удобно, согласитесь.
В этой статье мы попытаемся написать мамбот типа "контент", который удаляет плохие слова из статьи. Понятно, что мало кто в здравом уме будет публиковать статьи с нехорошими словами, но в качестве учебной задачи она нам подойдет.
Подготовка файлов
Назовем мы его badword - это будет его краткое имя. Создаем два файла:
- bot_badword.php
- bot_badword.xml
Приставка bot_ вовсе не обязательна, но удобнее, что бы файлы назывались согласно их назначению и пускай даже никто и не узнает зачем они в принципе нужны. Главное - это система. Для начала пишем в них следующее содержимое:
- bot_badword.php
<?php /** * Мамбот замены плохих слов */ defined( '_VALID_MOS' ) or die( 'Всем привет' ); $_MAMBOTS->registerFunction( 'onPrepareContent', 'botReplaceBadWords' ); /** * Основная фукнция замены плохих слов */ function botReplaceBadWords( $published, &$row, &$params, $page=0 ) { //$row->text return true; } ?>
- bot_badword.xml
<?xml version="1.0" encoding="windows-1251"?> <mosinstall version="1.0.0" type="mambot" group="content"> <name>Bad words filter</name> <files> <filename mambot="bot_badword">bot_badword.php</filename> </files> <params/> </mosinstall>
Установка
Лучше всего разрабатывать что-либо на живой Joomla, а не придумывая псевдо-код. Поэтому на домашнюю Joomla, которую не страшно потерять ставим этот мамбот. Просто архивируем два файла в один архив и загружаем в инсталляторе мамботов. Дальше по ходу разработки он будет обрастать дополнительными строками кода.
После установки он должен появиться в списке мамботов. Вам будет нужно его "включить".
Разработка
Если зайти в настройки мамбота, то мы увидим, что он не предлагает нам для ввода никаких параметров. А логично было бы предположить, что пользователь может задавать - какие же слова являются "плохими". Предлагаю создать для этих слов специальное поле, которое назовем words. Для этого добавим в xml-файл несколько строк и в результате он будет выглядеть так:
<?xml version="1.0" encoding="windows-1251"?> <mosinstall version="1.0.0" type="mambot" group="content"> <name>Bad words filter</name> <files> <filename mambot="bot_badword">bot_badword.php</filename> </files> <params> <param name="words" type="textarea" label="Плохие слова" description="Введите список плохих слов через запятую" cols="60" rows="10" /> </params> </mosinstall>
Вспомним, что мамбот уже установлен и xml-файл лежит в папке /mambots/content. Там и модифицируем его. После чего заходим в административную часть, в настройки нашего мамбота и видим новое поле. В него для теста набиваем что-нибудь вроде "123, 234,345".
Больше настроек не будет. Открываем файл /mambots/content/bot_badword.php в вашем любимом редакторе и пишем код, который и будет реализовывать функционал замены плохих слов в статье.
Обработка параметров мамбота
Для выборки параметров используется слегка замысловатая, но тем не менее рабочая конструкция следующего вида:
global $database; static $botParams = null; if ( !$botParams ) { $query = "SELECT params FROM #__mambots WHERE element = 'bot_badword' AND folder = 'content'"; $database->setQuery( $query ); $database->loadObject($mambot_info); $botParams = new mosParameters( $mambot_info->params ); }
Помещаем ее в самое начало фукнции botReplaceBadWords и забываем. Из переменной $botParams в дальнейшем можно будет достать введенный в админке параметр words.
Извлечение списка плохих слов
Выглядит следующим образом:
$bad_words = explode(',',$botParams->get('words')); foreach($bad_words as $ind=>$word) $bad_words[$ind] = trim($word);
Здесь мы извлекаем слова, преобразовываем их в массив, предполагая что они разделены запятыми и применяем trim для удаления лишних пробелов и переводов строк.
Замена плохих слов
foreach($bad_words as $word) { $row->text = str_replace($word,str_repeat("*",strlen($word)),$row->text); }
Мы просто заменяем слова звездочками. В переменной $row->text хранится текущий текст статьи. А в конце функции мамбота возвращем true - замена произошла успешно.
Окончательный вид функции
/** * Основная фукнция замены плохих слов */ function botReplaceBadWords( $published, &$row, &$params, $page=0 ) { global $database; static $botParams = null; if ( !$botParams ) { $query = "SELECT params FROM #__mambots WHERE element = 'bot_badword' AND folder = 'content'"; $database->setQuery( $query ); $database->loadObject($mambot_info); $botParams = new mosParameters( $mambot_info->params ); } $bad_words = explode(',',$botParams->get('words')); foreach($bad_words as $ind=>$word) $bad_words[$ind] = trim($word); foreach($bad_words as $word) { $row->text = str_replace($word,str_repeat("*",strlen($word)),$row->text); } return true; }
Сборка мамбота
Под сборкой понимается создание архива, который можно устанавливать на других сайтах. Архив будет состоять из двух файлов мамбота. Просто запаковываем их в ZIP и можно делать с ними все что захотим.
На этом создание простейшего мамбота для Joomla можно считать завершенным.
Последнее изменение этой страницы: 17:34, 4 декабря 2007.