Как стать автором
Обновить

Yii расширение для показа MP4 на коленке

Время на прочтение3 мин
Количество просмотров3.5K
Готовим проект на 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. В нем и будем описывать свой класс для нашего виджета.

Далее листинг кода этого файла с комментариями.

<?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'
					),
				));


Вроде все. Спасибо за внимание.
Теги:
Хабы:
Всего голосов 10: ↑8 и ↓2+6
Комментарии10

Публикации

Истории

Работа

PHP программист
148 вакансий

Ближайшие события