Достать видео ID с помощью php или сделать lazy load iframe Есть решение

Необходимо из ссылки видео на ютуб, которая заложена в {$video.url} достать ее часть, а именно ID. Что я делаю не так и как это реализовать? Делаю одним из способов, которые представлены здесь https://coderoad.ru/2936467/pa...

ПС Мне это необходимо для реализации lazy load айфрейма с видео этим способом https://github.com/paulirish/l... , если есть другие способы - буду рад выслушать 

<iframe 
src="<?php   
$subject="{$video.url}";
$url = parse_url($subject);
parse_str($url['query'], $query);
var_dump($query);
?>	
width="{$video.width}" height="{$video.height}" allowfullscreen></iframe>

2 ответа

  • 2
    replicant 4 июня 2021 06:57 # Решение

    Если речь о видео к товару, то URL находится в переменной {$product.video_url} и напрямую доступен в шаблоне. Есть ещё другие варианты типа

    {$video = $product->video}
    {$video.url}

    Но по факту сам URL на выходе одинаков. {$video} нужен, чтобы вытащить ширину, высоту и нулевой кадр заставку, а URL можно взять и просто из массива $product без этих выкрутасов.


    Так же надо учесть тот факт, что движок Магазина преобразует ссылку на Ютуб к виду

    http://youtu.be/gZZRFf2v5wQ

    Т.е. даже, если в товаре вы запостите URL вида

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

    то в {$product.video_url} в БД все равно ляжет упрощенная версия youtu.be без https://

    Далее в шаблоне вытаскиваете так

    <p>{$product.video_url}</p> - оригинальная ссылка
    
    <p>{$product.video_url|replace:"http://youtu.be/":""}</p> - только ID видео

    Можно усложнить и сделать даже так

    <p>{$product.video_url|regex_replace:"/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/":'$1'}</p>

    Но эффект такой же как от простого replace парой строк выше, поэтому не стоит оно того.

    Если вы хотите реализовать что-то иное, кроме товарного видео или сделать это вне приложения Магазин, то решения могут быть уже другие.


Добавить ответ

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