Пишем собственный модуль для Joomla

Комментарии  (47)

Данное руководство ни на что не претендует, просто напишу как сам делаю.

До того как написать вот это я просмотрел несколько подобных руководств и понял что не все они для меня достаточно понятны. Некоторые были слишком просты и ограничивались выводом надписи «Hello World», другие наоборот , а в связи с тем что у меня знаний в области программирования просто никакие пришлось все это долго анализировать просматривать различные готовые модули и пытаться понять как оно работает.

Ну вот и решил написать этот документ который адресуется людям далеким от программирования, но желающим сделать что-то свое.
Сразу скажу что «Hello World» мы делать не будем. А зачем? Практической пользы это не приносит. Мы будем делать что-нибудь полезное и на примере моего «полезного», Вы сделаете свое «полезное».
Погнали.

Вот посидел и придумал, надо сделать ICQ информер. После размещения на сайте он будет показывать есть вы в аське или нет.

Модуль у нас состоит минимум из двух файлов.
mod_myicq.php и mod_myicq.xml

Так я их назвал что бы потом когда установлю этот модуль на сайт можно было отличить его от других установленных модулей. Поэтому имеет смысл давать осмысленные имена (во как закрутил).
Создаем текстовый документ переименовываем его в mod_myicq.xml и вставляем в него код:

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
<?xml
   version="1.0" encoding="windows-1251"?>
    <mosinstall
   type="module" version="1.0.0">
                <name>ICQ_online
    ?</name>
                <author>LightDeath</author>
                <creationDate>jule
    2008</creationDate>
                <copyright>(C) 2008 Open
    Source Matters. All rights reserved.</copyright>
                <license>http://www.gnu.org/copyleft/gpl.html
    GNU/GPL</license>
                <authorEmail>evp.pos+gmail.com</authorEmail>
                <authorUrl>http://cms-joomla.info</authorUrl>
                <version>1.0.0</version>
                <description>Информер статуса ICQ</description>
                <files>
                            <filename
   module=" mod_myicq "> mod_myicq.php</filename>
                </files>
                <params>
                            <param
   name="moduleclass_sfx" type="text" default=""
   label="Суффикс класса модуля"
   description="Тут можно прописать свой суффикс класса модуля." />
                </params>
    </mosinstall>

Этот файл можно даже назвать установочным.
Разберем что есть что:

Первая строчка очень важная и должна быть обязательно.
xml version=»1.0″ эта часть информирует браузер о том, что файл имеет формат XML

encoding=»windows-1251 это сообщает браузеру в какой кодировке надо показывать ваш модуль, при необходимости можно исправить на ту кодировку которая является основной для вашего сайта. (помогает когда все выводится крякозябрами).

Самое главное перед этой строчкой не должно быть пробелов и она должна быть самой первой.

<mosinstall type=»module» version=»1.0.0″> Этот тег говорит Joomla что это вообще такое каким образом и в какую папку установить. А определяет он просто по типу «module».

Ну, а version=»1.0.0″ это для того чтобы определить на какую версию Joomla этот модуль

<name>ICQ_online ?</name> Это имя вашего модуля. Оно будет отображаться в списке установленных модулей.

<author>LightDeath</author> Тут мы тешим самолюбие и вписываем свое имя. Ну должны ведь потомки знать кто это наКОДил тут (или нашкодил :)).

<creationDate>jule 2008</creationDate> Здесь указано когда мы это сделали

<copyright>(C) 2008 Open Source Matters. All rights reserved.</copyright> Здесь наши копирайты. Если вы собираетесь бесплатно раздавать этот модуль, то пусть так и останется. А если вы намерены его продавать , тогда правьте как вам угодно.

<license>http://www.gnu.org/copyleft/gpl.html GNU/GPL</license> Эта ссылка на лицензию. Если вы поменяли копирайт то пишите ссылку на свою лицензию.

<authorEmail> evp.pos@gmail.com</authorEmail> Ну тут понятно ваша электропочта.Ну надо ведь потом осуществлять поддержку своего творения.

<authorUrl>http://blog.boxdox.info</authorUrl> Ссылка на ваш сайт

<version>1.0.0</version> А это версия Вашего модуля. Вдруг Вы начнете наращивать функционал и исправлять ошибки.

<description>Информер статуса ICQ</description> Ну, а тут описание того что это вообще за чудо такое. Что бы пользователь не забыл что это за модуль такой и для чего он нужен.

<files>
<filename module=» mod_myicq «> mod_myicq.php</filename>
</files>

Между тегами <files></files> мы перечисляем все файлы которые будут входить в ваш модуль, а так как файл *.php в модуле должен быть обязательно, то один файл будет всегда. Выглядеть эта строчка должна именно так, ну только соответственно имя модуля надо будет менять в соответствии с именем модуля. Мы здесь задали атрибут «module» файлу mod_nmyicq.php и он принял значение имени модуля без расширения. Короче мы сообщили Joomla каким файлом запускать ваш модуль. Потом попозже мы попробуем добавить другие файлы в ваш модуль (например картинки), а пока этого нам достаточно.

1
2
3
4
5
6
<params>
                            <param name="moduleclass_sfx" type="text"  
   default="" label="Суффикс класса модуля"  
   description="Тут можно прописать
   свой суффикс класса модуля." />

                </params>

Вот мы дошли до интересных тегов

. Между этих тегов мы будем добавлять параметры которые будут использоваться для настройки вашего модуля. Вернемся к ним попозже когда будем их добавлять. А сейчас посмотрите тот параметр который у нас указан.
Он в принципе не обязателен, но ставить его как мне кажется признак хорошего тона. Вдруг человек который воспользуется вашим модулем захочет применить свой стиль CSS к вашему модулю ну и пожалуйста, мы все для него подготовили.

Ну и вроде все закрываем тег


который сообщает что файлик кончился.
Сохраняем, то что у нас получилось.

Переходим к следующему файлу.
По аналогии с предыдущим создаем текстовый документ и переименовываем его в mod_myicq.php.
Открываем его и вставляем в него вот этот код:

1
2
3
4
5
6
7
8
9
10
<?php
    /**
    * @version 1.0
    * @package ICQ_online ?
    * @copyright © 200 LightDeath
    * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
    */

    defined(
    '_VALID_MOS' ) or die( 'Restricted access' );
    ?>

Ну и тоже его разберем на кусочки:
/**
* @version 1.0
* @package ICQ_online ?
* @copyright © 200 LightDeath
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
*/

Эта часть является блоком комментариев соответственно:

  • номер версии
  • наименование
  • копирайт
  • ссылка на лицензию

Далее идет очень важная строчка:
defined( ‘_VALID_MOS’ ) or die( ‘Restricted access’ );
Эта строчка является основой безопасности вашего модуля она должна быть обязательно.
С помощью этой строки мы запрещаем доступ к модулю напрямую пользователем и разрешаем доступ к файлу только движку Joomla.

Сильно про это не думайте, а просто запомните что эта строка должна быть.
Вот и все сохраните этот файлик на всякий случай. Потому что все обязательные условия мы выполнили для создания нового модуля. И эта часть меняться уже не будет.
Теперь займемся написанием именно того кода который и будет отображать наш модуль.

Нам понадобится код который будет осуществлять запрос статуса вашей ICQ и отображать соответствующую картинку на вашем сайте.
Выглядит этот код вот так:

1
2
<img src="http://wwp.icq.com/scripts/online.dll?icq=55522230&img=21"
   border="0" alt="Статус ICQ" />

Ну тут все просто, мы получаем картинку с сервера ICQ соответствующую статусу on/off, принадлежащую номеру 55522230. Цифра 21 говорит о том какой стиль картинки будет использоватся (Icq нам предоставляет разные стили от 1-27 для того чтобы можно было подобрать под дизайн сайта). Примеры картинок

Что мы делаем с этим кодом? Да просто именно в таком виде как есть вставляем его в наш mod_myicq.php. Должно получится вот так:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    /**
    * @version 1.0
    * @package ICQ_online ?
    * @copyright © 200 LightDeath
    * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL
    */

    defined(
    '_VALID_MOS' ) or die( 'Restricted access' );
    ?>
    <img src="http://wwp.icq.com/scripts/online.dll?icq=55522230&img=21"
    border="0" alt="Статус ICQ" />
?>

Вот и все сохраняем опять файлик. А теперь надо посмотреть как работает наш модуль. Что бы это сделать надо его установить. Для этого два наших файла запаковываем в архив mod_myicq.zip. Идем в админку Joomla и устанавливаем обычным способом наш модуль. Теперь заходим в список модулей и находим наш модуль, опубликовываем его и идем смотреть что там у нас получилось.

Вот вроде модуль уже и готов. А что можно еще сделать?

А можно его например унифицировать вот если у вас сменится номер вам придется открывать код и менять номер на новый или кто-то скачал ваш модуль, а у него соответственно номер и ему придется тоже копаться в чужом коде хоть он пока и маленький. Но человек может быть не таким подготовленным как Вы :)

Вот для этого мы сейчас и добавим параметров настройки нашего модуля, чтобы человек который воспользовался вашим творением мог настроить его под себя через админ-панель сайта не ковыряя исходный код.

Итак что мы можем поменять в этом несложном коде
<img src=»http://wwp.icq.com/scripts/online.dll?icq=55522230&img=21″ border=»0″ alt=»Статус ICQ» >
Ну как минимум сам UIN (это так не по русски называют номер ICQ), идентификационный номер отображаемой картинки.
Вот этим и займемся.

Для этого открываем файл mod_myicq.xml и начинаем добавлять наши параметры которые я обещал в начале статьи.
Добавляем между тегов <params> </params> вот такую строчку»

1
<param name="myuin" type="text" default="" label="Номер ICQ " description="Введите ваш номер ICQ без пробелов и дефиса. " />

Посмотрим что мы сделали:

Мы добавили поле для ввода текста type=»text»
Добавили имя для этого поля label=»Номер ICQ»
И добавили всплывающую подсказку description=»Введите ваш номер ICQ без пробелов и дефиса. «
И имя параметра нашего поля для ввода текста name=»myuin»

Теперь по аналогии добавляем второе поле для ввода ID картинки:
<param name=»idimg» type=»text» default=»5″ label=»id стиля картинки» description=»Введите число от 1 до 27.» >

Тут все точно также только одно отличие , мы добавили значение параметру «default» значение «21», сделали мы это для того чтобы поле было изначально заполнено значением.

Ну вот таким образом теперь должен выглядеть ваш mod_myicq.xml

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
<?xml
   version="1.0" encoding="windows-1251"?>
    <mosinstall
   type="module" version="1.0.0">
                <name>ICQ_online
    ?</name>
                <author>LightDeath</author>
                <creationDate>jule
    2008</creationDate>
                <copyright>(C) 2008 Open
    Source Matters. All rights reserved.</copyright>
                <license>http://www.gnu.org/copyleft/gpl.html
    GNU/GPL</license>
                <authorEmail>evp.pos+gmail.com</authorEmail>
                <authorUrl>http://cms-joomla.info</authorUrl>
                <version>1.0.0</version>
                <description>Информер статуса ICQ</description>
                <files>
                            <filename
   module="mod_myicq">mod_myicq.php</filename>
                </files>
                <params>
                            <param
   name="moduleclass_sfx" type="text" default=""
   label="Суффикс класса модуля" description="Тутможно прописать свой суффикс класса модуля." />
    <param name="myuin" type="text" default="" label="Номер ICQ " description="Введите ваш номер ICQ без
   пробелов и дефиса." />

    <param name="idimg" type="text" default="21" label="id стиля
   картинки" description="Введите
   число от 1 до 27." />

                </params>
    </mosinstall>

Сохраняем этот файл.
Вот для чего это делалось.

Открываем mod_myicq.php
Теперь мы должны добавить в наш код переменные которые будут принимать значение соответствующие тем данным которые мы будем вводить при настройке нашего модуля.

Для этого добавляем в наш код вот такие строки:
$myuin = $params->get( ‘myuin’);
$idimg = $params->get( ‘idimg’, ’21’ );

Это мы создаем переменные и даем понять нашему коду откуда он должен взять данные и какой переменной присвоить соответствующие значения. Обратите внимание они у нас совпадают с именами полей ввода которые мы сделали в mod_myicq.xml.

Теперь осталось вставить наши переменные в код который отвечает за вывод картинки.

Делаем мы это очень простым способом используя функцию PHP echo вот что должно получится:

1
2
3
4
5
6
7
<div
    align="center">
    <img src="http://wwp.icq.com/scripts/online.dll?icq= <?php echo $myuin;
    ?> &img=<?php echo $idimg; ?> " border="0"
    alt="Статус
    ICQ" />
    </div>

Обратите внимание я все это поместил еще и в блок DIV для того чтобы просто отцентрировать нашу картинку по середине нашего модуля.

Предлагаю добавить к нашей картинке снизу еще и сам номер ICQ, чтобы человек мог увидеть на какой номер написать. А еще сделаем этот номер ссылкой на ваш профиль ICQ. Делается это вот таким кодом:

1
2
3
<a href="http://wwp.mirabilis.com/scripts/Search.dll?to=<?php
    echo $myuin; ?> " target="_blank" class="menu"><?php
    echo $myuin; ?></a>

Тут мы тоже заменили номер на переменную.

Вот так будет выглядеть наш mod_myicq.php с новыми изменениями:

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
<?php
    /**
    * @version
    1.0
    * @package
    ICQ_online ?
    *
    @copyright © 200 LightDeath
    *
    @license  
    http://www.gnu.org/copyleft/gpl.html GNU/GPL
    */

    defined(
    '_VALID_MOS' ) or die( 'Restricted access' );
    $myuin =
    $params->get( 'myuin');
    $idimg =
    $params->get( 'idimg', '21a' );
    ?>
    <div
    align="center">
    <img src="http://wwp.icq.com/scripts/online.dll?icq=<?php echo $myuin;
    ?>&img=<?php echo $idimg; ?>" border="0" alt="Статус ICQ" /><br>
    <strong>
    <a href="http://wwp.mirabilis.com/scripts/Search.dll?to=<?php echo $myuin;
    ?> " target="_blank"
    class="menu"><?php echo $myuin; ?></a></strong>
    </div>

Ну вот вроде и все можно упаковывать в *.zip и устанавливать, если вы устанавливали предыдущий вариант то его надо предварительно удалить.
Ну а после установки и настройки параметров. Можно будет посмотреть на результат.

Незнаю насколько понятно я обьяснил, но сложностей именно с эти вроде не должно возникнуть.

Точно таким же образом можно делать какие угодно модули, смело использую PHP, JAVA и HTML.

Ну я думаю что это не конец, что нибудь придумаю еще и на примере этого модуля буду учится сам и может помогу еще кому нибудь.

Люди которые понимают в програмировании побольше (учитывая что я ничего почти не понимаю и делаю интуитивно), прошу писать замечания и советы может они помогут мне и всем остальным.

04
Авг
2009

47 Комментариев к статье:
“Пишем собственный модуль для Joomla ”

  1. Хотелось бы что-то наваять в комментах креативного, но мысль не складывается, так что просто “зачОт”

  2. Привет, что-то я иничего не понял. Как именно это работает

  3. А что конкретно непонятно-то? Мне кажется достаточно доходчиво написано.

  4. Спасибо за статью. Я хоть и программист , но на джумлу модули не писал, а когда все так разжёвано описано приятно читать.

  5. :( что то статус не прально отоброжаеться

    Ответ:
    Ну для начала попробуйте включить в настройках аськи видимость для веб и поиска.
    Потом отключите кеширование в модуле.
    Если не поможет, то это уже в AOL обращатся.

  6. Спасибо за быстрый ответ, попробуем :)

  7. Очень доходчиво написано.
    Низкий поклон автору!

  8. а если надо написать модуль который добавляет блок на страницу а не который создает отдельную страницу?

  9. Так, тут вроде и описан способ как добавить содержимое для блока. Размещение блоков (позиции модулей) напрямую зависит от шаблона, а вот заполнять позиции модулей нужно как раз модулями. И тут пример, как написать такой модуль. Если нужно в определенном месте добавить новую позицию, то нужно просто внести изменения в шаблон.
    Или я неправильно вопрос понял?

  10. как раз искал пример написания модуля, то что нужно. спасибо!

  11. Вы крут, привили мне желание попробовать Joomla!

  12. Спасибо!Ждем продолжения-если можно с базой данных.

  13. За пример по icq спасибо. Самое важное в модуле — как добираться не только до своих настрое, но до других модулей и до данных Joomla native.
    Для спрашающих «а попонятнее» — в инете уже ряд понятных книг на русском о программировании и управлении joomla. Качайте.
    Автор — доделай до полной версии :)
    Например через «запятую» куча UIN и листом или строкой ник+статус.
    Тогда уже начинающим будет понятнее + работа со строками!
    Удачи!

  14. Спасибо. Отличная статья

  15. Автор хотел сделать как можно понятней — а получилось как у всех: запутано и непонятно :(

  16. присоединяюсь к ораторам)
    действительно очень полезно.
    и действительно пишите продолжение с примером про БД

  17. Знаете чтение статьи о КОДинге разбавленное каплей юмора приводит настроение в такой работоспособный тонус что ент сил терпеть и с нетерпеньем рвусь в бой!Спасибо!

  18. Строка кода в php файле defined(
    ‘_VALID_MOS’ ) or die( ‘Restricted access’ ); эта константа для старых версий 1.0
    для новых defined(‘_JEXEC’) or die(‘Restricted access’);

  19. Блин, просто нет слов. Перелопатил в инете кучу мусора. Ничего толкового так и не нашёл. Уже даже как-то стал немного грустить и нервничать. Но, прочитав Вашу статью, понял, что всё не так уже и безнадёжно в мире познания joomla.
    Спасибо Вам, огромное за эту статью! Удачи Вам :)

  20. Автору глубокий респект

  21. Спасибо большое! Всё круто)

  22. у меня почему что Модуль Установить: No module file specified
    что делать?

  23. Так вод откуда ножки ростут…
    (встречал копии этой статьи)))

    Вопрос такай: возможно ли сделать такой модуль, котрый будет показывать не только on-line статус icq, но и «текстовый» статус?
    Такое бывает?

  24. вери вери гуд пост!!!

  25. Спасибо за статью. все ещё актуально для новичков. (эт про меня :))

  26. как программист говорю: спасибо!
    до этого не приходилось для жумлы что-либо делать, теперь же обязательно попробую

  27. Админу респект)) молодец..я вот спросить хотел….
    собрался писать модуль — калькулятор (для страховой компании) и понятия не имею с чего начать…как все это должно работать….что посоветуешь? спасибо

  28. ЗДравствуйте, большое спасибо за хороший материал!
    Делал по вашему примеру модуль для слайдера(чтобы можно было управлять из админки Joomla 1.5.22)? говорит что успешно установил, но когда модуль включаешь на странице, joomla отображает пустую страницу, после выключения модуля страница вновь отображается!
    вот код mod_slider.php :
    get(‘i1′);
    $i2=$param->get(‘i2′);
    $i3=$param->get(‘i3′);
    $i4=$param->get(‘i4′);
    ?>

    <img src="»>
    <img src="»>
    <img src="»>
    <img src="»>

    Что не так? заранее спасибо

  29. На джумле много чего делал, но модуль решил написать впервые. Смутные представления о РНР, но тут все предельно ясно. Только вопрос — переменные из других модулей или компонентов можно как-то брать? Скажем мне нужен модуль с последними тремя объявлениями на сайте, Объявления публикуются при помощи компонента и имеют ID, как мне в модуль добавить последние три? В качестве ответа жду что-то теоретическое, если можно на почту illustrarium@ya.ru.

  30. для joomla 1.5 таким же образом модули писать?

    если в параметрах обявишь переменную, которая уже существует, что случится?

  31. Прекрасная статья. Приведён толковый пример в доступном изложении. У меня у самого появилась необходимость написать свой модуль — думал не реально, а ведь можно сделать!!!

    Спасибо за статью!!!

  32. Автор спс большое :-) нашел то что хотел, и ничего темного не осталось ;)

  33. Спасибо, очень доходчиво написанно,будь модуль более функциональнее написан я бы был вообще в щенячем восторге)

  34. Как я понял, статься устарела. Даже если принять во внимание поправку от Владимира 10. Октябрь 2010 | 13:16, то все равно под 1.7 Joomla-ой модуль не инсталлируется.
    JInstaller: :Install: Cannot find Joomla XML setup file
    пошел искать дальше, когда разберусь, попробую вернуться сюда и прокомментировать.

  35. Уважаемый автор, исправьте, пожалуйста следующие ошибки:
    mod_myicq.xml:
    нет второй угловой скобки в теге
    mod_myicq.php:
    если вы пишите html внутри блока php, то надо писать echo »;

  36. Статья полезная, как не верти. Дает понять, что да как делать.
    Что же касается под разные версии Joomla! — так просто нужно ориентироваться на уже существующие в них модули.

    Что же — в любом случае — автору спасибо. Интересно было почитать)

  37. Автору спасибо, отличный гайд, все работает.

  38. Спасибо! Автор, пиши еще.
    Вполне себе все понятно и доходчиво, как для новичков вроде меня.
    Как раз надо модуль зафигачить на сайтец — статья в тему подвернулась. Теперь имею понимание, как это делать и куда копать.

    Еще раз, спасибо! :)

  39. Спасибо автору статьи. Хорошо дал понять основные принципы!

  40. icq собственными руками на джумлу. Класс. То что я и искал, но а можно сделать так чтобы еще при нажатии отправлялось сообщение на номер прямо с моего сайта?

  41. Внимательно посмотрел оба файла, все echoна месте и скобки закрыты.

  42. Большое спасибо. Очень толково и понятно.

  43. Классно! Очень доступно и интересно написанная статья

  44. разве что можно заменить на
    а так материал интересный, спасибо)

  45. Автор молодчина. ++

  46. Спасибо автору за потраченное время на написание статью, все доступно написано, а это ведь редкость однако, респект!

  47. Земной поклон тебе, человек! Вот ей-богу! Огромное человеческое спасибо!

Оставить комментарий