Warning: fopen(/var/www/admin/data/www/artsss-web.ru/engine/cache/system/category.php): failed to open stream: No such file or directory in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 316 Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 317 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 318 Warning: fopen(/var/www/admin/data/www/artsss-web.ru/engine/cache/system/usergroup.php): failed to open stream: No such file or directory in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 316 Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 317 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 318 Warning: fopen(/var/www/admin/data/www/artsss-web.ru/engine/cache/system/informers.php): failed to open stream: No such file or directory in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 316 Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 317 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 318 Warning: fopen(/var/www/admin/data/www/artsss-web.ru/engine/cache/related_a5bfc9e07964f8dddeb95fc584cd965d.tmp): failed to open stream: Permission denied in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 374 Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 375 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 376 Warning: fopen(/var/www/admin/data/www/artsss-web.ru/engine/cache/system/banners.php): failed to open stream: No such file or directory in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 316 Warning: fwrite(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 317 Warning: fclose(): supplied argument is not a valid stream resource in /var/www/admin/data/www/artsss-web.ru/engine/modules/functions.php on line 318 DataLife Engine > Версия для печати > Добавление видео с "вконтаке" в новость
DataLife Engine > Хаки DLE > Добавление видео с "вконтаке" в новость

Добавление видео с "вконтаке" в новость


12-07-2010, 00:49. Разместил: Пряник
Думаю, многие знают, что если в 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.

Вернуться назад