Автоматическое преобразование ссылки на видео с ютуба, которая вставлена в посте блога, на стене, на форуме в плеер с этим видео.
Также рассмотрим вывод этого видеоролика в своем стилизованном плеере на базе Uppod плеера и вывод этого ролика в модальном окне используя имеющийся в коробке Инстанта Colorbox.
0. Бэкап файлов.
1. includes/bbcode/bbcode.lib.php
в функции autoLink
Это
Заменил на это
Можно было бы конечно сразу здесь же заменять ссылку на полный код видеоролика с ютуба. Но я решил на этом этапе извлекать только Идентификатор видеоролика и в базу вместе с постом записывать только его обрамляя тегом <youtube></youtube>
Это оставляет больше возможностей для маневра на будущее. Например можно будет менять в любое время во врех роликах стандартный плеер Ютуб на свой, размер плеера, ну и если на самом Ютубе что то изменится, идентификатор ролика всё равно останется тот же скорее всего. Поэтому в базу пишется только ИД видео, а дальше придется в каждом компоненте описывать преобразование ИД ролика в плеер.
На примере стены пользователя я сделал это так:
2. core/classes/user.class.php
послеа) вставил это
для вывода плеера ютуб в его стандартном виде
******
б) или это
для вывода вместо плеера картинки иконки, при нажатии на которую видео откроется в Colorbox
******
в) или это
для вывода видео в html5 плеере от uppod uppod.ru/help/html5
******
г) а если плеер будет со своим и стилями то вот так
******
core/classes/blog.class.php
после
вставить
(это в плеере Uppod со своими стилями, другие примеры выше)
При этом для uppod в <head> секцию сайта нужно добавить js вызова плеера Uppod и js вызова стилей для плеера Uppod (если они используются). О подключении стилей Uppod html5 читайте здесь uppod.ru/help/q=styles-html5
Действия из пункта 2 придется повторить для блогов, комментов, форума.
Вот что получается
Ссылка вставленная на стену превратилась в плеер
Оно же но с использованием Uppod
Вместо ссылки картинка со ссылкой на видео.
по клику на картинку открывается видео в колорбоксе.
P.S. в файле стилей можно задать стиль для блока <youtube>
например скрыть там где еще не работает преобразование или вывести там фон с текстом что видео скоро появится)
body youtube{
display:none;
}
P.P.S — если после этого внедрения нужно в посте опубликовать ссылку на видео что бы она осталась в виде ссылке, это можно сделать через bbcode тег url. Не проверял, но по идее там ссылки не будут заменяться на плеер.
Пока всё. Кто хочет дополнить, улучшить, вэлкам.
Также рассмотрим вывод этого видеоролика в своем стилизованном плеере на базе Uppod плеера и вывод этого ролика в модальном окне используя имеющийся в коробке Инстанта Colorbox.
0. Бэкап файлов.
1. includes/bbcode/bbcode.lib.php
в функции autoLink
Это
"~(\s|^)((?:http|https|ftp)://[^<\s]+[^<\.,:;?!\"»'+\-\s])~uim", "~(\s|^)(www\.[^<\s]+[^<\.,:;?!\"»'+\-\s])~uim", "'([^\w\d-\.]|^)([\w\d-\.]+@[\w\d-\.]+\.[\w]+[^.,;\s<\"\'\)]+)'usi" ); '$1<a href="/redirect?url=$2">$2</a>', '$1<a href="/redirect?url=http://$2">$2</a>', '$1<a href="mailto:$2">$2</a>' );
"/\s*[a-zA-Z\/\/:\.]*youtu(be.com\/watch\?v=|.be\/)([a-zA-Z0-9\-_]+)([a-zA-Z0-9\/\*\-\_\?\&\;\%\=\.]*)/i", "~(\s|^)((?:http|https|ftp)://[^<\s]+[^<\.,:;?!\"»'+\-\s])~uim", "~(\s|^)(www\.[^<\s]+[^<\.,:;?!\"»'+\-\s])~uim", "'([^\w\d-\.]|^)([\w\d-\.]+@[\w\d-\.]+\.[\w]+[^.,;\s<\"\'\)]+)'usi" ); '<youtube>$2</youtube>', '$1<a href="/redirect?url=$2">$2</a>', '$1<a href="/redirect?url=http://$2">$2</a>', '$1<a href="mailto:$2">$2</a>' );
Это оставляет больше возможностей для маневра на будущее. Например можно будет менять в любое время во врех роликах стандартный плеер Ютуб на свой, размер плеера, ну и если на самом Ютубе что то изменится, идентификатор ролика всё равно останется тот же скорее всего. Поэтому в базу пишется только ИД видео, а дальше придется в каждом компоненте описывать преобразование ИД ролика в плеер.
На примере стены пользователя я сделал это так:
2. core/classes/user.class.php
после
while($record = $inDB->fetch_assoc($result)){ $record['fpubdate'] = $record['is_today'] ? cmsCore::dateDiffNow($record['pubdate']) : cmsCore::dateFormat($record['pubdate']); $record['avatar'] = cmsUser::getUserAvatarUrl($record['author_id'], 'small', $record['imageurl'], $record['is_deleted']);
$record['content'] = preg_replace('|<youtube>(.*)</youtube>|isU', '<iframe width="560" height="315" src="https://www.youtube.com/embed/$1" frame allowfullscreen></iframe>', $record['content']);
******
б) или это
$record['content'] = preg_replace('|<youtube>(.*)</youtube>|isU', ' <a class="iframe cboxElement" href="https://www.youtube.com/embed/$1"><img src="/images/play_video.png" style="width:300px; height:auto;" /></a>', $record['content']);
******
в) или это
$record['content'] = preg_replace('|<youtube>(.*)</youtube>|isU', '<div class="player" id="$1"></div><script type="text/javascript">this.player = new Uppod({m:"video",uid:"$1",file:"https://www.youtube.com/embed/$1"});</script>', $record['content']);
для вывода видео в html5 плеере от uppod uppod.ru/help/html5
******
г) а если плеер будет со своим и стилями то вот так
$record['content'] = preg_replace('|<youtube>(.*)</youtube>|isU', '<div class="player" id="$1"></div><script type="text/javascript">this.player = new Uppod({m:"video",uid:"$1",file:"https://www.youtube.com/embed/$1",st:"uppodvideo"});</script>', $record['content']);
core/classes/blog.class.php
после
$post['content_html'] = preg_replace('|<youtube>(.*)</youtube>|isU', '<div class="player" id="$1"></div><script type="text/javascript">this.player = new Uppod({m:"video",uid:"$1",file:"https://www.youtube.com/embed/$1",st:"uppodvideo"});</script>', $post['content_html']);
При этом для uppod в <head> секцию сайта нужно добавить js вызова плеера Uppod и js вызова стилей для плеера Uppod (если они используются). О подключении стилей Uppod html5 читайте здесь uppod.ru/help/q=styles-html5
Действия из пункта 2 придется повторить для блогов, комментов, форума.
Вот что получается
Ссылка вставленная на стену превратилась в плеер
Оно же но с использованием Uppod
Вместо ссылки картинка со ссылкой на видео.
по клику на картинку открывается видео в колорбоксе.
P.S. в файле стилей можно задать стиль для блока <youtube>
например скрыть там где еще не работает преобразование или вывести там фон с текстом что видео скоро появится)
body youtube{
display:none;
}
P.P.S — если после этого внедрения нужно в посте опубликовать ссылку на видео что бы она осталась в виде ссылке, это можно сделать через bbcode тег url. Не проверял, но по идее там ссылки не будут заменяться на плеер.
Пока всё. Кто хочет дополнить, улучшить, вэлкам.



Вот код модуля mod_blogs
// //
// InstantCMS v1.10.6 //
// www.instantcms.ru/ //
// //
// written by InstantCMS Team, 2007-2015 //
// produced by InstantSoft, (www.instantsoft.ru) //
// //
// LICENSED BY GNU/GPL v2 //
// //
/******************************************************************************/
function mod_blogs($mod, $cfg){
$inDB = cmsDatabase::getInstance();
$default_cfg = array (
'sort' => 'pubdate',
'owner' => 'user',
'shownum' => 5,
'minrate' => 0,
'blog_id' => 0,
'showrss' => 1
);
$cfg = array_merge($default_cfg, $cfg);
cmsCore::loadClass('blog');
$inBlog = cmsBlogs::getInstance();
$inBlog->owner = $cfg['owner'];
if($cfg['owner'] == 'club'){
cmsCore::loadModel('clubs');
$model = new cms_model_clubs();
$inDB->addSelect('b.user_id as bloglink');
} else {
cmsCore::loadModel('blogs');
$model = new cms_model_blogs();
}
// получаем аватары владельцев
$inDB->addSelect('up.imageurl, img.fileurl');
$inDB->addJoin('LEFT JOIN cms_user_profiles up ON up.user_id = u.id');
$inDB->addJoin(«LEFT JOIN cms_upload_images img ON img.target_id = p.id AND img.target = 'blog_post' AND img.component = 'blogs'»);
$inBlog->whereOnlyPublic();
if($cfg['minrate']){
$inBlog->ratingGreaterThan($cfg['minrate']);
}
if($cfg['blog_id']){
$inBlog->whereBlogIs($cfg['blog_id']);
}
$inDB->orderBy('p.'.$cfg['sort'], 'DESC')->groupBy('p.id');
$inDB->limit($cfg['shownum']);
$posts = $inBlog->getPosts(false, $model);
if(!$posts){ return false; }
cmsPage::initTemplate('modules', $cfg['tpl'])->
assign('posts', $posts)->
assign('cfg', $cfg)->
display($cfg['tpl']);
return true;
}
куда нужно вставить Ваш код
Спасибо за ответ… будем пробовать