Joomla 1.5: Создание плагина smilies - Создание плагина Joomla стр.2

Joomla 1.5: Создание плагина smilies - Создание плагина Joomla стр.2

Индекс материала
Joomla 1.5: Создание плагина smilies
Создание плагина Joomla стр.2
Создание плагина Joomla стр.3
Все страницы

Теперь мы будем работать с уже установленным плагином, в директории плагинов, в движке - так мы сможем контролировать процесс разработки, и что бы удостовериться, что мы всё еще понимаем, что делаем - открываем файл: ...\plugins\content\smilies.php И добавляем в него пару строчек, теперь он должен выглядеть так:

// Защита от прямого доступа:
defined('JPATH_BASE') or die ('Restricted access');
// Импортируем файл с классом, что бы JPlugin стал нам доступен:
jimport( 'joomla.plugin.plugin' );

class plgContentSmilies extends JPlugin
{
  function onPrepareContent( &$article, &$params, $limitstart)
  {		
    echo '<h1>РАБОТАЕТ!!!</h1>';
    return true;
  }
}

Затем откройте какую нибудь статью на своём сайте, и если вы до сих пор всё делали правильно, то вы должны увидеть надпись "РАБОТАЕТ!!!", в самом верху, там, где выводится контент. Если нет, то проверяем, что не забыли опубликовать плагин, и что он вообще установился.

Следующим нашим шагом будет разработка интерфейса админа. Где же нам взять такой чудо-элемент, картинку которого я привел выше. Как я уже говорил Joomla 1.5 ничего подобного не предоставляет, но мы можем создать свой элемент управления.

Здесь мне видится такой выход: мы создадим свой элемент управления - frame, он будет выводить html-элемент IFRAME, который будет отображать ещё один наш файл, в котором мы уже сможем создать любой функционал, не взирая на ограничения движка Joomla. Итак, нужно добавить следующие строчки в файл манифеста smilies.xml :

<params addPath="/plugins/content/smilies">
  <param name="frame" type="smiliesframe" label="Сопоставление" description="Сопоставление" />
</params>

Теперь он должен выглядеть так:

<?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>
	
    <params addPath="/plugins/content/smilies">
		<param name="frame" type="smiliesframe" label="Сопоставление" description="Сопоставление" />
	</params>	
	
</install>

В теги params - заключаются . Если мы хотим добавить не стандартный элемент, то мы указываем в охватывающем теге params - атрибут addPath, а его значением станет путь в папку с файлом, где будет описан класс, реализующий нужный функционал. Далее указываем сам элемент param - все атрибуты соответствуют стандартным, но атрибут type - имеет значение - название файла (smiliesframe - без расширения), описывающего элемент класса.

Класс этот должен расширять класс JElement и иметь название JElement(имяФайлаЭлемента). Так, как в xml файле манифеста мы указали в атрибуте type параметра param значение smiliesframe, то файл нам нужно назвать smiliesframe.php , а класс который мы в нем опишем: JElementSmiliesFrame. Он должен иметь единственный метод:

fetchElement($name, $value, &$xmlElement, $control_name)

Где $name, $value - это значения одноимённых атрибутов xml - элемента <param /> в файле манифеста. $xmlElement - это объект JSimpleXMLElement, который содержит в себе дубликаты остальных параметров.

В принципе аргументы этого метода, в нашем случае, нам не интересны. Нам вообще нужно будет просто вернуть из метода нашего класса - html код элемента (это касается и всех остальных случаев) ниже листинг файла smiliesframe.php

<?php

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

class JElementSmiliesFrame extends JElement
{
  public function fetchElement($name, $value, &$xmlElement, $control_name)
  {
    return '<iframe frameborder="0" src="/plugins/content/smilies/smiliestoolbar.php" width="400px" height="400" align="center">IFRAME не работает!</iframe>';
  }
}

В листинге выше мы описали наш не стандарный элемент:

<param name="frame" type="smiliesframe" label="Сопоставление" description="Сопоставление" />

Который выведет в панели администратора html элемент IFRAME, который отоюражает результат работы файла /plugins/content/smilies/smiliestoolbar.php - создадим этот файл. Однако теперь нам нужно инициализировать систему, как бы с нуля, ведь фактически получается, что файл smiliestoolbar.php подключается у нас вне движка, а так хочется попользоваться его удобствами. Запустить систему "с толкача" можно следующим образом (пропишем этот код в самом начале файла smiliestoolbar.php) :


define('_JEXEC',1);
header('Content-type: text/html; charset=utf-8');

define('DS',DIRECTORY_SEPARATOR);
define('JPATH_BASE', realpath('..'.DS.'..'.DS.'..'.DS));

require_once(JPATH_BASE.DS.'includes'.DS.'defines.php');
require_once(JPATH_BASE.DS.'includes'.DS.'framework.php');

$mainframe = JFactory::getApplication('administrator');



Добавить комментарий


Защитный код
Обновить






Кто на сайте
Сейчас 41 гостей онлайн