Мамбот AgeBot
11.02.2011
Меня попросили решить задачку:
Нужно вывести в статичном содержимом автоматически вычисляемый возраст.
Такая «проблема» легко решается написанием Mambot’а.
Меня попросили решить задачку: Нужно вывести в статичном содержимом автоматически вычисляемый возраст. Такая «проблема» легко решается написанием Mambot’а. Мамботы в Joomla 1.0.x делятся на: Content Editors editors-xtd search system Нам нужен Content. Чтож приступим. Нам нужно подготовить xml документ:
1 |
<?xml version="1.0" encoding="iso-8859-1"?> <mosinstall version="1.0.0" type="mambot" group="content"> <name>agebot</name> <author>oddler</author> <creationDate>12 04 09</creationDate> <copyright>Left</copyright> <license></license> <authorEmail></authorEmail> <authorUrl>www.oddler.ru</authorUrl> <version>1.0.0</version> <description></description> <files> <filename mambot="agebot">agebot.php</filename> </files> </mosinstall> |
Тут все предельно просто. Так теперь сам мамбот. Для начала нужно решить к какому события «прицепится». Я выбрал onPrepareContent - $_MAMBOTS->registerFunction( 'onPrepareContent', 'botMyAge' ); Далее создаем функцию botMyAge которая будет искать в тексте {my_age} и заменять на возраст.
1 |
<?php defined( '_VALID_MOS' ) or die( 'Доступ ограничен' ); $_MAMBOTS->registerFunction( 'onPrepareContent', 'botMyAge' ); function botMyAge($published, &$row, &$params, $page=0) { $pos = strpos($row->text, '{my_age}'); if ($pos !== FALSE) { $year=2000; $month=1; $date=1; $age=0; $today = getdate(); $m=$today['mon']; $d=$today['mday']; $y=$today['year']; if ($m >= $month && $d >= $date) { $age=$y-$year; } else { $age=$y-$year-1; } $row->text = str_replace('{my_age}', $age, $row->text); } } ?> |
Как видно из примера, основная работа происходит над свойством text объекта $row. Я решил не писать еще и editors-xtd (мабот кнопки, которая появится ниже окна редактора) , т.ч. вставка {my_age} производится вручную.