Как вытянуть id youtube в DLE ?

MJ
На сайте с 29.12.2009
Offline
44
855

Здравствуйте ! Задался вопросом.

Есть доп. поле, куда вставляется ссылка на ролик youtube (доп. поле youtubeurl) вида:

https://www.youtube.com/watch?v=CzIO8cx7DA8

или

http://youtu.be/CzIO8cx7DA8

Как мне "выдырать" автоматически id ролика, т.е. CzIO8cx7DA8 и вставить его в доп. поле ? (доп.поле youtubescreen) ?

Нашел примерный код, но нужно подправить, навыков не хватает, пытался, но не получилось:

В addnews.php:

        // parse_media
$xfield_id = 'test_1'; // имя доп. поля для вставки ID из тега [media=
if( empty( $_POST['xfield'][$xfield_id] ) ) {
function parse_media( $url = '' ) {
global $parse, $xfield_id;

$url = $parse->clear_url( urldecode( $url ) );
if( $url == '' ) return false;

$pattern = "@(?:https?:)?//(?:w{3}\.)?youtu\.?be[^/]*?/(?:(?:watch\?v=|embed/)?([\w\d]{11})\b|.+&(?:amp;)?v=([\w\d]{11})\b)@";
preg_match($pattern, $url, $matches);

return isset($matches[1]) ? trim( $matches[1]) : false;
}

if( preg_match("#\[media=([^\]]+)\]#is", $_POST['short_story'], $media) ) { // $_POST['short_story'] для короткой, $_POST['full_story'] для полной
$_POST['xfield'][$xfield_id] = parse_media($media[0]);
}
}
// parse_media

Но мне нужно парсить с определённого доп. поля (если оно заполнено), в другое определённое доп. поле. При этом, ссылка не вида:

[media=http://www.youtube.com/watch?v=CzIO8cx7DA8]

а вида:

http://www.youtube.com/watch?v=CzIO8cx7DA8

Помогите пожалуйста !

siv1987
На сайте с 02.04.2009
Offline
427
#1


$xf_from = '';
$xf_to = '';
if( ! empty( $_POST['xfield'][$xf_from] ) AND empty( $_POST['xfield'][$xf_to] ) ){
if( preg_match('/(?:watch\?v=|youtu\.be\/)(\w+)/', $_POST['xfield'][$xf_from], $out ) ){
$_POST['xfield'][$xf_to] = $out[1];
}
}

$xf_from определенное дополнительное поле откуда копируем, $xf_to поле куда копируем ид.

MJ
На сайте с 29.12.2009
Offline
44
#2

Спасибо. Помучался, в итоге понял, вариант рабочий, но мучительный, т.к. при редактировании новости при смене ссылки тоже нужно будет манипуляции проводить.

Остановился на другом варианте реализации, мне нужно вывести id в shortstory.tpl, один человек поделился вариантом, но он не работает:

        function getYouTubeId($story) {

$pattern = "@(?:https?:)?//(?:w{3}\.)?youtu\.?be[^/]*?/(?:(?:watch\?v=|embed/)?([\w\d]{11})\b|.+&(?:amp;)?v=([\w\d]{11})\b)@";
preg_match($pattern, $story, $matches);

return isset($matches[1]) ? $matches[1] : false;
}

$my_id = getYouTubeId($full_story); // output ID

$tpl->set( '{video-id}', $my_id );

Дело в том, что у меня ссылка теперь вида [media=http://youtu.be/CzIO8cx7DA8] которая располагается в доп. поле под названием youtubeurl, как мне выдернуть это CzIO8cx7DA8 и вывести тегом в shortstory.tpl ?

Заранее очень благодарен !

bupy7
На сайте с 18.03.2014
Offline
30
#3

MusicJam, а какие варианты ссылки допускаются?

siv1987
На сайте с 02.04.2009
Offline
427
#4

В shortstory также доступна переменная дополнительных полей. Вместо $_POST используйте переменную полей.

MJ
На сайте с 29.12.2009
Offline
44
#5
siv1987:
В shortstory также доступна переменная дополнительных полей. Вместо $_POST используйте переменную полей.

Спасибо большое за ответы и что мне всегда помогаете ! Я не совсем владею PHP, хотя по-маленьку учусь. Скажите пожалуйста, как вызвать переменную полей ? Насколько я понял - $['xfield'][$xf_youtubeurl] ? (Заранее извините, если написал бред).

Мне нужно просто в shortstory вызвать тэгом (например {video-id} этот айди с ссылки ютуба, которая находится в доп поле и имеет вид [media=ссылка на ютуб]

Заранее спасибо.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий