Jump to content
  • Получаем изображения из поста или парсинг DOM структуры в Invision Community




    В процессе написания дополнительных возможности для Invision Community, либо модификации уже существующей, может возникнуть необходимость получения первого/последнего изображения/видеоролика из контента, например из записи блога или сообщения на форуме.

    Из самых не замысловатых способов это сделать:

    1. Составить регулярное выражение.
    2. Подключить PHP библиотеку.

    Мы вкратце рассмотрим оба этих варианта.

    Регулярное выражение

    Для поиска изображения или видео в контенте будем использовать стандартную функцию preg_match. Попробуем вытащить первое изображение, например из записи блога:

    Шаблон blog > front > browse > rows

    Мы будем оперировать с объектом последней записи в блоге:

    	{{$pattern = '/\<img([^<>\/]+?)src="([^\"]+?)"(.*?)\>/';}}
    	{{$matches = array();}}
    	{{if \preg_match($pattern, $blog->latestEntry()->content(), $matches, PREG_OFFSET_CAPTURE) }}
    	{{$result['img'] = $matches[2][0];}}  
    	{{endif}}

    Теперь ссылка на изображение будет расположена в массиве $result.

    Пример с видеороликом YouTube:

    	{{$pattern = '/\<iframe([^<>\/]+?)src="([^\"]+?)"(.*?)\>/'; }}
    	{{$matches = array();}}
    	{{if \preg_match($pattern, $blog->latestEntry()->content(), $matches, PREG_OFFSET_CAPTURE) }}
        {{$addr =  $matches[2][0];}}
        {{$bname = basename($addr);}}
        {{$result['img'] = "http://img.youtube.com/vi/$bname/hqdefault.jpg";}}   

    Соответственно данные примеры можно использовать абсолютно для любого контента, существующего в рамках Invision Community.

    Подключение PHP библиотеки

    Кроме регулярного выражения, мы можем подключить стороннюю PHP библиотеку PHP Simple HTML DOM Parser. С её помощью мы можем строить DOM структуру сайтов по ссылке. Как рассказывает нам Wikipedia, DOM это:

    Цитата

    DOM (от англ. Document Object Model — «объектная модель документа») — это не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML-, XHTML- и XML-документов, а также изменять содержимое, структуру и оформление таких документов.

    Загрузить к себе библиотеку можно по адресу https://sourceforge.net/projects/simplehtmldom/files/. Распакуйте архив к себе на сервер и подключите её в шаблонах, где это необходимо. 

    Для примера рассмотрим опять же записи в блогах:

    {{require_once $_SERVER['DOCUMENT_ROOT']."/simplehtmldom/simple_html_dom.php";}} <!-- Подключаем библиотеку -->
    {{$html = \str_get_html( $blog->latestEntry()->content() );}} <!-- Формируем DOM структуру -->
    {{$images = $html->find('img');}} <!-- нахдим первый тег img -->
    {{$photo = $images[0]->src;}} <!-- Записываем ссылку в переменную -->

    Точно так же с видеороликом YouTube. В данном примере мы получаем миниатюру первого найденного в контенте видеоролка:

    {{$youtube = $html->find('iframe');}}
    {{$youtubeSrc = pathinfo($youtube[0]->src);}}
    {{if \strpos($youtubeSrc['dirname'], 'youtube') !== false}}
        {{$youtubeScreen = "http://img.youtube.com/vi/".$youtubeSrc['basename']."/hqdefault.jpg";}}
    {{endif}}

     





      Report запись


    User Feedback


    There are no comments to display.



    Join the conversation

    You can post now and register later. If you have an account, sign in now to post with your account.
    Note: Your post will require moderator approval before it will be visible.

    Guest
    Add a comment...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

    Loading...

×
×
  • Create New...

Important Information

By using our site you agree to our Privacy Policy