Готовим проект на Yii, в котором пользователи смогут, помимо всего прочего, размещать и просматривать небольшие материалы в формате MP4. Подсказали несколько вариантов решения относительно плеера, я решил остановиться на JW Player. Испытания он прошел успешно. Осталось быстренько написать соответствующее расширение для Yii.
Под катом пошагово что откуда куда скачать и листинг кода расширения с комментариями.
Сразу признаюсь что это мой первый опыт не только написания расширения под Yii, но и вообще работы с этим фреймворком.
И так. Сначала идем на longtailvideo.com и скачиваем JW Player. Распаковываем полученый архив. Оттуда нам нужны будут файлы: jwplayer.js, swfobject.js и player.swf. Создаем в дирректории с расширениями вашего Yii-проекта(т.е. в protected/extensions) дирректорию jwplayer(так будет называться наше расширение), в ней в свою очередь создаем дирректорию assets. В нее и размещаем 3 файла из архива(т.е. полный путь куда надо разместить jwplayer.js, swfobject.js и player.swf будет такой: protected/extensions/jwplayer/assets).
Теперь переходим непосредственно к созданию самого расширения. Создаем в дирректории protected/extensions/jwplayer файл JWplayer.php. В нем и будем описывать свой класс для нашего виджета.
Далее листинг кода этого файла с комментариями.
Все готово. Можно в представлении или в виде(это уж кому как нравится его называть) запускать наш видео-виджет, для этого достаточно будет вставить следующий код:
Вроде все. Спасибо за внимание.
Под катом пошагово что откуда куда скачать и листинг кода расширения с комментариями.
Сразу признаюсь что это мой первый опыт не только написания расширения под Yii, но и вообще работы с этим фреймворком.
И так. Сначала идем на longtailvideo.com и скачиваем JW Player. Распаковываем полученый архив. Оттуда нам нужны будут файлы: jwplayer.js, swfobject.js и player.swf. Создаем в дирректории с расширениями вашего Yii-проекта(т.е. в protected/extensions) дирректорию jwplayer(так будет называться наше расширение), в ней в свою очередь создаем дирректорию assets. В нее и размещаем 3 файла из архива(т.е. полный путь куда надо разместить jwplayer.js, swfobject.js и player.swf будет такой: protected/extensions/jwplayer/assets).
Теперь переходим непосредственно к созданию самого расширения. Создаем в дирректории protected/extensions/jwplayer файл JWplayer.php. В нем и будем описывать свой класс для нашего виджета.
Далее листинг кода этого файла с комментариями.
<?php
/*
* JWplayer widget class file.
* JWplayer extends CWidget
* @version 1.0 - 20110516
* @author skarah <skarah@mail.ru>
* @copyright Copyright © 2011 skarah
* @license New BSD License http://www.opensource.org/licenses/bsd-license.php
*/
class JWplayer extends CWidget
{
/**
* Задаем массив опций виджета по-умолчанию.
*
* @var array
*/
public $_options = array(
// ID плеера
'id' => 'playerID',
// Ширина видео в пикселях
'width' => 480,
// Высота видео в пикселях
'height' => 270,
// Путь к файлу
'file' => '',
// Путь к файлу флеш-плеера
'flashplayer' => '',
);
/**
* Массив для опций вижета options.
*
* @var array
*/
public $options = array();
/**
* Публикуем наши assets.
*/
public function init()
{
$this->publishAssets();
}
/**
* Запускаем плеер с установленными опциями
*/
public function run()
{
/*
* Получаем опции по умолчанию соответствующие ключам массива переменные
*/
extract($this->_options);
/*
* Получаем переданные опции
*/
extract($this->options);
echo "<div id='mediaplayer'></div>
<script type=\"text/javascript\">
jwplayer('mediaplayer').setup({
'id': '{$id}',
'width': '{$width}',
'height': '{$height}',
'file': '{$file}',
'flashplayer': '{$flashplayer}',
'modes': [{type: 'flash', src: '{$flashplayer}'}]
});
</script>";
}
protected function publishAssets()
{
/*
* Публикуем наши assets
*/
$assets = dirname(__FILE__) . '/assets';
$baseUrl = Yii::app()->assetManager->publish($assets);
if (is_dir($assets)) {
/*
* Устанавливаем путь к файлу с флеш-плеером
*/
$this->_options['flashplayer'] = $baseUrl . '/player.swf';
/*
* Регистрируем js скрипт плеера
*/
Yii::app()->clientScript->registerScriptFile($baseUrl . '/jwplayer.js', CClientScript::POS_HEAD);
Yii::app()->clientScript->registerScriptFile($baseUrl . '/swfobject.js', CClientScript::POS_HEAD);
} else {
throw new Exception('Ошибка JWplayer: не могу найти папку assets для публикации.');
}
}
}
Все готово. Можно в представлении или в виде(это уж кому как нравится его называть) запускать наш видео-виджет, для этого достаточно будет вставить следующий код:
$this->widget('application.extensions.jwplayer.JWplayer', array(
'options' => array(
'file' => '/path_to/my_mp4file.mp4'
),
));
Вроде все. Спасибо за внимание.