Действия

Как написать мамбот для Joomla 1.0.x

Материал из База знаний 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 можно считать завершенным.