Доброго времени суток. Думаю, многие знают, что если в DLE при
создании новости в описание вставить код видео из соц. сети вконтакте,
он полностью обрежется чекером движка и соответственно роликом в новости
и пахнуть не будет.. (Как получить код видно на изображении ниже).
В сети нашел только одно решение, связано оно было с добавлением
xfields, изменением шаблона, вырезанием вручную из кода видео непонятно
какого куска и т.п. Так вот, как же сделать, чтобы видео успешно
добавилось без всяких "танцев"? Для этого нам нужно подредактировать
два файла, отвечающие за загрузку новости на сайт.(Один
административный, другой - для пользователей). Конечно, можно было бы
изменить класс фильтрации данных, но это было бы дольше и не хотелось
заморачиваться, разбираться в его коде, а сделать нужно было как можно
быстрее. Итак, начнем. Для начала открываем файл engine/modules/addnews.php
и находим в нем следующий код(у меня он на 92 строке
начинается):
if
($config['allow_site_wysiwyg'] == "yes"){
$full_story =
$db->safesql($parse->BB_Parse($parse->process($_POST['full_story']))); $short_story
=
$db->safesql($parse->BB_Parse($parse->process($_POST['short_story']))); $allow_br
= 0;
} else {
$full_story =
$db->safesql($parse->BB_Parse($parse->process($_POST['full_story']),
false)); $short_story =
$db->safesql($parse->BB_Parse($parse->process($_POST['short_story']),
false)); $allow_br = 1;
}
Заменяем
его на следующий:
if
($config['allow_site_wysiwyg'] == "yes") { preg_match('/\<iframe
src=\\\"http\:\/\/vkontakte\.ru\/video_ext.php\?oid=.*?&id=.*?&hash=.*?\\\"
width=\\\".*?\\\" height=\\\".*?\\\"
frameborder=\\\".*?\\\"\>\<\/iframe\>/si',
$_POST['full_story'], $vk_match); $vk_match[1] =
str_replace('\\', '', $vk_match[0]); $full_story =
str_replace($vk_match[0], "{vk_video}", $_POST['full_story']); $full_story
=
$db->safesql($parse->BB_Parse($parse->process($full_story))); $full_story
= str_replace("{vk_video}", $vk_match[1], $full_story); preg_match('/\<iframe
src=\\\"http\:\/\/vkontakte\.ru\/video_ext.php\?oid=.*?&id=.*?&hash=.*?\\\"
width=\\\".*?\\\" height=\\\".*?\\\"
frameborder=\\\".*?\\\"\>\<\/iframe\>/si',
$_POST['full_story'], $vk_match); $vk_match[1] =
str_replace('\\', '', $vk_match[0]); $short_story =
str_replace($vk_match[0], "{vk_video}", $_POST['short_story']); $short_story
=
$db->safesql($parse->BB_Parse($parse->process($short_story))); $short_story
= str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $short_story); $allow_br
= 0;
} else { preg_match('/\<iframe
src=\\\"http\:\/\/vkontakte\.ru\/video_ext.php\?oid=.*?&id=.*?&hash=.*?\\\"
width=\\\".*?\\\" height=\\\".*?\\\"
frameborder=\\\".*?\\\"\>\<\/iframe\>/si',
$_POST['full_story'], $vk_match); $vk_match[1] =
str_replace('\\', '', $vk_match[0]); $full_story =
str_replace($vk_match[0], "{vk_video}", $_POST['full_story']); $full_story
= $db->safesql($parse->BB_Parse($parse->process($full_story),
false)); $full_story = str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $full_story); preg_match('/\<iframe
src=\\\"http\:\/\/vkontakte\.ru\/video_ext.php\?oid=.*?&id=.*?&hash=.*?\\\"
width=\\\".*?\\\" height=\\\".*?\\\"
frameborder=\\\".*?\\\"\>\<\/iframe\>/si',
$_POST['full_story'], $vk_match); $vk_match[1] =
str_replace('\\', '', $vk_match[0]); $short_story =
str_replace($vk_match[0], "{vk_video}", $_POST['short_story']); $short_story
= $db->safesql($parse->BB_Parse($parse->process($short_story),
false)); $short_story = str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $short_story); $allow_br
= 1;
}
Далее
отредактируем файл админ-панели(engine/inc/addnews.php). Ищем
в нем код(у меня на 401 строке начался:
$full_story =
$parse->process($_POST['full_story']); $short_story =
$parse->process($_POST['short_story']); $title =
$parse->process($_POST['title']);
if
($config['allow_admin_wysiwyg'] == "yes" OR $allow_br != '1'){
$full_story
= $db->safesql($parse->BB_Parse($full_story)); $short_story
= $db->safesql($parse->BB_Parse($short_story));
} else
{
$full_story =
$db->safesql($parse->BB_Parse($full_story, false)); $short_story
= $db->safesql($parse->BB_Parse($short_story, false)); }
Заменяем
его на:
preg_match('/\<iframe
src=\\\"http\:\/\/vkontakte\.ru\/video_ext.php\?oid=.*?&id=.*?&hash=.*?\\\"
width=\\\".*?\\\" height=\\\".*?\\\"
frameborder=\\\".*?\\\"\>\<\/iframe\>/si',
$_POST['full_story'], $vk_match); $vk_match[1] =
str_replace('\\', '', $vk_match[0]); $full_story =
str_replace($vk_match[0], "{vk_video}", $_POST['full_story']); $full_story
= $parse->process($_POST['full_story']); preg_match('/\<iframe
src=\\\"http\:\/\/vkontakte\.ru\/video_ext.php\?oid=.*?&id=.*?&hash=.*?\\\"
width=\\\".*?\\\" height=\\\".*?\\\"
frameborder=\\\".*?\\\"\>\<\/iframe\>/si',
$_POST['full_story'], $vk_match); $vk_match[1] =
str_replace('\\', '', $vk_match[0]); $short_story =
str_replace($vk_match[0], "{vk_video}", $_POST['short_story']); $short_story
= $parse->process($_POST['short_story']); $title =
$parse->process($_POST['title']);
if
($config['allow_admin_wysiwyg'] == "yes" OR $allow_br != '1'){
$full_story
= $db->safesql($parse->BB_Parse($full_story)); $full_story
= str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $full_story); $short_story
= $db->safesql($parse->BB_Parse($short_story)); $short_story
= str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $short_story);
}
else {
$full_story =
$db->safesql($parse->BB_Parse($full_story, false)); $full_story
= str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $full_story); $short_story
= $db->safesql($parse->BB_Parse($short_story, false)); $short_story
= str_replace("{vk_video}",
"<center>".$vk_match[1]."</center>", $short_story); }
Все,
готово. Тестил на версии 7.2, но, уверен, будет работать и на других.
От Автора: P.S.:
этот хак будет обрабатывать только первое видео с "вконтакте" в
краткой и полной новости. Т.е. второе и последующие так же вырежутся
чекером. Думаю, для рядового программиста не составит труда переделать
под все видеоссылки за 5 минут. Я не делал, т.к. не нужно, если кому
надо - пишите, сделаю, как будет время. P.P.S.:В самом начале была
идея сделать, чтобы видео добавлялось через тег [video], путем
добавления в него ссылки на страницу с видео, но вконтакте нужен еще
некий восьмибитный хеш, который из чего сделан - мне непонятно. Автор
- Emissar. Источник - 4dle.ru
|
-------------- Комментарий --------------