Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Где находится код формирования тега [media=] ?

Где находится код формирования тега [media=] ?


     23.05.2020    [media=]    Все вопросы » Общие вопросы по PHP    162

вопрос
Вставляю видео с Ютуба через тег [media=], на сайте он имеет вид:
<!--dle_media_begin:https://youtu.be/oLY1rss9Jx8--><iframe width="600" height="338" src="https://www.youtube.com/embed/oLY1rss9Jx8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe><!--dle_media_end-->

нужно изменить с "src" на "data-src" для включения "ленивой" загрузки. В parse.class.php и в \engine\editor\jscripts\froala\editor.js ничего подходящего не нашел или плохо искал, подскажите ?

Ответил: леший


Нигде в DLE Вы этого
<iframe>
не найдёте, так как он берётся непосредственно с YouTube

18 комментариев

shadow6630
Юзер

shadow6630 - 23 мая 2020 13:09 -

Есть варианты как принудительно формировать <iframe>, подставляя лишь ссылку на видео ? Пробовал в новости вставлять <iframe>, но он вырезается при сохранении новости.

TeraMoune
Эксперт

TeraMoune - 23 мая 2020 13:26 -

Проще сделать вот так
Файл: parse.class.php
Найти
return '<!--dle_media_begin:'.$decode_url.'-->'.$html.'<!--dle_media_end-->';

Добавить выше
if( $config['image_lazy'] ) $html = str_replace( 'src=', 'data-src=', $html );


P.S.
Iframe создаются на стороне движка.

shadow6630
Юзер

shadow6630 - 23 мая 2020 14:34 -

Спасибо, очередной раз помогли )

dj-avtosh
PHP-developer

dj-avtosh - 23 мая 2020 14:47 -

лучше уж тогда

if( $config['image_lazy'] ) $html = str_replace( ' src=', ' data-src=', $html );

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

shadow6630
Юзер

shadow6630 - 23 мая 2020 14:50 -

пробел поставить и что это меняет ?

dj-avtosh
PHP-developer

dj-avtosh - 23 мая 2020 14:52 -

а то что не заменится какой-нибудь тег похожий на test-src, а сменится именно src

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

TeraMoune
Эксперт

TeraMoune - 23 мая 2020 20:53 -

dj-avtosh,
И всё же не нужно, так как никаких test-src в фрейме по умолчанию быть не может, любой html код в движке проходит проверку библиотеки (если конечно проходит через функции ParseFilter) http://htmlpurifier.org, а она как раз и описывает в файле parse.class.php допущенные теги, аттрибуты и их значения, даже какие css правила допущены. Чтобы добавить test-src нужно его разрешить.

Более того если использовать визуальный редактор то и в нём нужно найти и разрешить подобные аттрибуты, так как Froala вот вырезает всё нестандартное. И если попытаться вставить видео, то редактор сам предварительно почистит html, а затем уже на серверной стороне дочистит htmlpurifier.

dj-avtosh
PHP-developer

dj-avtosh - 23 мая 2020 21:37 -

В программировании нельзя рассматривать частные случаи, особенно в плане регулярных выражений и автозамен. На то она и автоматизация.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

TeraMoune
Эксперт

TeraMoune - 23 мая 2020 23:04 -

Ну в случае с тегом media и с тем, что iframe всегда един можно и без пробела сделать. Если бы iframe появлялся из как раз таки embed ссылки то да, но тут склёпанный iframe библиотекой которая уж точно не будет добавлять постороннего.

dj-avtosh
PHP-developer

dj-avtosh - 24 мая 2020 00:05 -

окей окей ;)

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

shadow6630
Юзер

shadow6630 - 25 мая 2020 01:07 -

Вот и проблемы появились, добавляю Интсаграмм через тег [media=] и такой код выходит
<script async="" data-src="//www.instagram.com/embed.js"></script><!--dle_media_end-->
, в таком виде уже не работает вывод Инсты, нужно что бы только к iframe применялась замена src

TeraMoune
Эксперт

TeraMoune - 25 мая 2020 08:37 -

Тогда нужно подумать, но и пробел не поможет, скорей всего уже регуляркой заменять, а не простым реплейсом. А дайте ссылку на видео из инсты любую, а то не натыкаюсь я на неё, дают ссылку на страницу.

New-dev.ru
Юзер

New-dev.ru - 25 мая 2020 09:09 -

Попробуйте так
if( $config['image_lazy'] ) {
	if ( strpos($html, '<iframe ') !== false and strpos($html, 'youtu') !== false ) {
		$html = str_replace( ' src=', ' data-src=', $html );
	}
}

TeraMoune
Эксперт

TeraMoune - 25 мая 2020 09:56 -

New-dev.ru, А для других отложка не нужна только для ютуба ?)

P.S.
Среди всех допущенных ссылок есть не только видео, а некоторые сервисы встраивают iframe самостоятельно добавляя лишь js и пару html элементов куда будут добавлять контент.

тогда можно вот так сделать,
if( $config['image_lazy'] ) $html = preg_replace( '/<iframe(.*)src=/i', '<iframe$1data-src=', $html );

, если есть iframe в $html то замена произойдёт, для остального же ничего будет всё как прежде.


Более лучше это стоит наверное сесть и проверить все хостинги и узнать какой код создаёт тег для каждого и сделать уже зная это всё, но я смотрел лишь парочку.

New-dev.ru
Юзер

New-dev.ru - 25 мая 2020 18:44 -

В вопросе указано "Вставляю видео с Ютуба через тег".

shadow6630
Юзер

shadow6630 - 25 мая 2020 18:49 -

В принцепе пока использую только Ютуб, но нужно смотреть в сторону максимальной универсальности

TeraMoune
Эксперт

TeraMoune - 26 мая 2020 07:23 -

Ну и что, что из ютуба только автор вставляет. Другие ведь не только из ютуба будут вставлять, а Вы будите каждый ответ отвечать под каждый хостинг или же всё же лучше один раз сделать чтобы уже ни у кого вопросов не возникало ?)

shadow6630
Юзер

shadow6630 - 25 мая 2020 10:51 -

Дело в том что через тег [media=] не только вставляется видео, вот тут например я вставлял посты с Инсты, вот пример https://demo.in-rap.ru/biographi/57-ms-senechka.html В общем код
if( $config['image_lazy'] ) $html = preg_replace( '/<iframe(.*)src=/i', '<iframe$1data-src=', $html );
пока работает корректно, буду тестить дальше.

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

Похожие вопросы

наверх