Joomla 1.5: Создание плагина smilies

Joomla 1.5: Создание плагина smilies

В данной заметке я хочу осветить создание плагина для CMS Joomla 1.5. Плагин будет работать с контентом, а конкретно заменять некий набор символов на соответствующую картинку, в нашем случае вставлять в контент смайлы. Здесь я опишу процесс и свою методику разработки. Так же будут показан один нтересный, нестандартный приём разработки. Эта статья рассчитана на людей более — менее знакомых с CMS Joomla 1.5, и хоть немного понимающих её работу на уровне исходного кода. Готовый плагин можно скачать в конце статьи.

Заметил я за собой нехорошую привычку: ставить смайлики в текст, правда хрен ли от них толку, если они так текстом и остаются. И раз уж я страдаю такой хернёй, то почему бы не написать под это дело плагин, который будет приводить символьное представление смайликов в графическое?

Тут стоит заметить что визуальными html редакторами самого движка Joomla 1.5 — я не пользуюсь по нескольким причинам: во-первых они пока не могут дать приемлемый html код, во-вторых они глючат, и что больше всего всего раздражает — завёртывают содержимое тегов script в контенте — в блоки CDATA, и скрипты естественно, после такого отношения к себе не работают. Теперь я просто набираю статьи в декстопном редакторе, а потом просто копирую их в движок. Поэтому плагин будем делать не ввиде кнопки для редактора, а ввиде самостоятельного механизма.

Я для себя решил, что плагин должен быть расширяемым/универсальным. Т.е. в процессе эксплуатации мы должны иметь возможность добавлять новые сочетания символов как то) и т.п. и сопоставлять нужные им картинки. Название плагину я решил дать незамысловатое: Smilies. На самом деле получается, что сопоставить символам мы сможем любое изображение. 🙂

Спасибо разработчикам Joomla 1.5 за то что они любезно предоставили файлы примеров для создания плагинов! В Joomla 1.5 есть несколько типов плагинов:

  • authentication
  • content
  • editors
  • editors-xtd
  • search
  • system
  • tmp
  • user
  • xmlrpc

Эти типы так же являются именами директорий плагинов, которые в свою очередь находятся в директории plugins — что в корне движка. Примеры плагинов находятся в каждой из этих директорий, и называются example.php и example.xml

В Joomla 1.5 плагины можно создать несколькими способами, но мне "ближе к телу" ООП — реализация, её я и буду использовать в данной статье. Плагин я назвал "Smilies", значит файл плагина и манифеста называем соответсвенно: smilies.php и smilies.xml — создадим их пока, где нибудь на компе и сохраним в кодировке UTF-8. Так же создадим папку smilies и поместим в неё ещё два файла: collation.txt * и заглушку index.html

* — тут следует пояснить, что плагины в Joomla 1.5 не могут создавать таблицы в базе данных при установке, по крайней мере у меня не получилось сделать это стандарным способом т.е. поместив в xml — манифест такие строки:

 

<install>

  <sql>

    <file charset="utf8" driver="mysql">install.utf8.sql</file>

    <file driver="mysql">install.sql</file>

  </sql>

</install>

— и создав соответственно файлы install.utf8.sql и install.sql Но информацию то по сопоставлению символ — картинка надо где то хранить. Я решил не извращаться и хранить эту инфу в файле collation.txt — особо важной инфы в нём всё равно не будет, а работать с текстовыми файлами php умеет хорошо. На самом деле сначала я рассматривал вариант с расширением .ini но отказался от него — слишком много ограничений.

Файл манифеста попросту переправим под себя из примера plugins/content/example.xml, но это только сначала. Так как мы предполагаем расширение плагина новыми смайлами, а по сути мы дадим пользователю с самого начала указывать пары: символ — картинка, значит, если думать в рамках GUI то это должна быть своего рода строка… таблицы, где будет текстовое поле, рядом выпадающий список с файлами картинок, и здесь же кнопки для добавления/удаления новой такой же строки интерфейса:

добавление смайлов

Такого элемента интерфейса Joomla 1.5 не предоставляет, а жаль… ну, ничего — сделаем его сами. Причём здесь явно пахнет Javascript — ом.

В xml — теге install добавим атрибут method="upgrade" для того, что бы после установки плагина, когда мы продолжим разрабатывать его мы бы могли загружать новые версии не удаляя старую. Т.е. производить upgrade. В теге files пропишем наш файл smilies.php (smiles.xml — не обязательно) + укажем папку smiles

Файл smiles.xml:

 

<?xml version="1.0" encoding="utf-8"?>

<install version="1.5" type="plugin" group="content" method="upgrade">

    <name>Content - Smilies</name>

    <author>Moskitos80</author>

    <creationDate>07-10-2011</creationDate>

    <copyright>Copyright (C) 2011 - 2012. All rights reserved.</copyright>

    <license>GNU/GPL</license>

    <authorEmail>moskitos80@gmail.com</authorEmail>

    <authorUrl>http://php-zametki.ru</authorUrl>

    <version>1.0</version>

    <description>Преобразует заданные символы в контенте в соответствующие смайлики</description>

     

    <files>

        <filename plugin="smilies">smilies.php</filename>

        <folder>smilies</folder>

    </files>

     

</install>

Итак, на данный момент где то на компутере мы имеем два файла: smilies.php и smilies.xml а так же папку: smilies и в ней тоже 2 файла: collation.txt и index.html. В нашей разработке мы будем использовать ООП подход, а при таком раскладе нам нужно в главном файле плагина — это smilies.php описать класс с именем: plg(тип)(ИмяПлагина) т.е. в нашем случае: plgContentSmilies — потому, как тип нашего плагина "Content". Этот наш класс должен расширять Joomla — класс JPlugin (это касается плагинов любого типа). Если смотреть файл примера в движке: /plugins/content/example.php, то там класс имеет методы:

  • onAfterContentSave
  • onAfterDisplayContent
  • onAfterDisplayTitle
  • onBeforeContentSave
  • onBeforeDisplayContent
  • onPrepareContent

Плагины папки content, обрабатывают контент, после того, как движок его уже достал из базы, но перед тем, как он выводится на экран. Самое "популярное" событие — onPrepareContent. Оно запускается первее всех.

Так вот методы, которые я привёл в списке выше — фактически являются обработчиками событий, происходящих с контентом, если приглядеться к их названиям, они сами говорят, какие события они обрабатывают. Нас интересует естественно onPrepareContent. В нашем классе мы "перегрузим" имеено его, и он будет единственным. Снизу листинг файла smilies.php :

 

// Защита от прямого доступа:

defined('JPATH_BASE') or die ('Restricted access');

// Импортируем файл с классом, что бы JPlugin стал нам доступен:

jimport( 'joomla.plugin.plugin' );

 

class plgContentSmilies extends JPlugin

{

    function onPrepareContent( &$article, &$params, $limitstart)

    {      

 

    }

}

На данный момент мы имеем следующую структуру:

 

smilies.php

smilies.xml

smilies/collation.txt

smilies/index.html

Причём содержание у нас сейчас имеют только два файла это smilies.php и smilies.xml — на данный момент этого вполне хватит. Теперь возьмём все эти файлы и папку и поместим в zip — архив, и обзовём его соответственно: smilies.zip

Рискну заметить, что если вы читаете эту статью у вас должен быть установлен локальный веб сервер, или какая нибудь другая тестовая площадка для сайтов. Желательно иметь установленную рабочую копию движка Joomla 1.5

Открываем админку нашего тестового сайта на Joomla. И загружаем наш недоделанный плагин. Топаем в расширения->менеджер плагинов и выбираем свой плагин ( Content — Smilies ), и публикуем его.

 

 

Возможно Вас заинтересуют эти материалы

Joomla 1.5: Отправка почты.

В этой заметке рассказано о том, как отправлять почту, используя механизмы предоставленные Joomla 1.5 (

Joomla 1.5: Пагинация.

Класс JPagination, представленный в Joomla! 1.5, позволяет легко, и просто добавлять постраничную навигацию - пагинацию

Joomla 1.5: Система событий.

Joomla 1.5 имеет систему событий, основанную на реализации шаблона проектирования Observer. И эта система очень неплохо