Создание плагина флэш-плеера (flash-player) JWPlayer для Joomla

Переделаем модуль flash-плеера для Joomla в плагин, по пути несколько упростив его.
Ниже дан код основного файла плагина. Содержимое XML-файла редактируется по аналогии с любым контент-плагином или используя руководство по созданию content плагина для Joomla.

<?php
 
// Запрещаем прямое обращение к файлу
defined( '_JEXEC' ) or die( 'Restricted access' );
 
// Включаем метод registerEvent для отслеживания нужного события — работа плагина начнется до вывода контента.
$mainframe->registerEvent( 'onPrepareContent', 'plgContentJWPlayer' );
 
// Основная функция
function plgContentJWPlayer( &$row, &$params, $page=0 )
{
	// Простая проверка наличия на странице вызова плагина
	if ( JString::strpos( $row->text, '{jwplayer' ) === false ) 
	{
		return true;
	}
 
	// Получаем информацию о плагине
 	$plugin =& JPluginHelper::getPlugin('content', 'jwplayer');
	// Создаем объект с параметрами плагина	
	$params = new JParameter( $plugin->params );
	// Читаем настройки вида плеера из jwplayer.xml
	$skin		=	$params->get( 'skin' );
	$bgColour   =   $params->get( 'bgColour' ); 
	$playlistSize = $params->get( 'playlistSize' );
 
	// Ищем тег jwplayer и его атрибуты
	$regex = '/{jwplayer\s*(.*?)}\s*(.*?){\/jwplayer}/i';
 
	// Производим замену
	$row->text = preg_replace_callback( $regex, 'plgContentJWPlayer_replacer', $row->text );
 
	return true;
}
 
function plgContentJWPlayer_replacer( &$matches ) //Передаем по ссылке строку найденных атрибутов
{
	static $c; // Инициализируем переменную-счетчик количества включений плеера
 
	if(empty($matches[1]))
	{
		$width = 320; // Дефолтные ширина и высота плеера, если в атрибутах их нет
		$height = 240; 
	}
	else
	{
		$atributes = explode(' ', $matches[1]);	// Разбираем строку атрибутов с пробелом в качестве разделителя
 
		for($i=0; $i<3; $i++) // Максимум три параметра, присваиваем значения
		{
			if(eregi('w:', $atributes[$i]))
				$width = substr($atributes[$i], 2); // 0==w, 1==:
			if(eregi('h:', $atributes[$i]))
				$height = substr($atributes[$i], 2);
		}
	}
    // Устанавливаем пути к папкам плагина и плеера
	$baseUrl = JURI::base();
	$plgUrl = $baseUrl.'plugins/content/';
	$plaUrl = $baseUrl.'plugins/content/jwplayer/';
 
	$text = $matches[2]; // Третий параметр — путь к файлу ролика
 
	// Формируем контейнер с плагином, передавая ему параметры
	$text = '<div class="'.$skin.'" id="player'. ++$c .'">Скачайте и установите, пожалуйста, <a href="http://www.macromedia.com/go/getflashplayer">Flash Player</a> для просмотра этого видео-ролика.</div>
		<script type="text/javascript" src="plugins/content/jwplayer/swfobject.js"></script>
		<script type="text/javascript">
			var s1 = new SWFObject("'.$plgUrl.'jwplayer/player.swf","ply","'. $width .'","'. $height .'","9","#'.$bgColour.'");
			s1.addParam("allowfullscreen","true");
			s1.addParam("allowscriptaccess","always");
			s1.addVariable("file", "'.$baseUrl.$text.'"); /* найденный путь к файлу */
			s1.addVariable("skin","'.$plgUrl.'jwplayer/skins/simple.swf");
			s1.write("player'. $c .'");
		</script>';
 
		return $text;
}
 
?>

Использование плагина

Не используя визуальный редактор типа TinyMCE, поместите в код страницы следующие теги: {jwplayer w:352 h:288}media/video.flv{/jwplayer}.
Скачать модуль JWPlayer для Joomla можно по ссылке (модуль пригодится своими исходниками для создания плагина).

Если вы заметили ошибки или неточности, сообщите пожалуйста в комментариях. Если понадобится готовый архив плагина — сообщите там же, в комментариях.

Комментариев: 8

  • 30.11.2011 Наталия:

    Спасибо! Очень нужен готовый архив плагина! А уж как для joomla 1.7 нужен- так это слов нет! Наталия

  • 03.02.2012 Dennis:

    Это не код а тихий ужас. Автор, зачем тебе переменные $fullscreen, $listPosition, $fullscreen, $btnColour, $bar, $frontcolor, $backcolor, если они НИГДЕ в коде не используются. На кой черт это $plaUrl надо — тоже непонятно.

    s1.addParam(«allowfullscreen»,"true");

    Почему всегда true? А если надо false?

    Я задолбался править и переписал с нуля.

    • 03.02.2012 Кирилл:

      Спасибо Ден за дельные замечания, пофиксил пост кроме s1.addParam («allowfullscreen»,"true"); — думаю, кому надо false допишут радиокнопку в настройки.

  • 03.02.2012 Dennis:

    Я уже молчу о том, что в коде нет закрывающего тега PHP.

  • 05.02.2012 Dennis:

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

    • 05.02.2012 Кирилл:

      Да все ок, просто я не планировал выкладывать архив, вряд ли сейчас вспомню как его собрать :) если не жаль свою версию, то присылай (почта есть на странице о сайте) и я выложу.

  • 30.10.2012 Stepson:

    а превьюшку каким тэгом вставить можно?


Добавление комментария:

 css.php