Мамбот AgeBot

11.02.2011 07:00:03
Меня попросили решить задачку: Нужно вывести в статичном содержимом автоматически вычисляемый возраст. Такая «проблема» легко решается написанием Mambot’а.
Меня попросили решить задачку:
Нужно вывести в статичном содержимом автоматически вычисляемый возраст.
Такая «проблема» легко решается написанием Mambot’а.
Мамботы в Joomla 1.0.x делятся на:
Content
Editors
editors-xtd
search
system

Нам нужен Content.
Чтож приступим.
Нам нужно подготовить xml документ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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} производится вручную.

Категории: CMS Joostina (Joomla 1.0.X), Joomla
Яндекс.Метрика