Перейти к содержанию
Сайт в скором времени будет закрыт, спасибо что были с нами! ×
  • Получаем изображения из поста или парсинг 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}}

     





    Обратная связь


    Комментариев нет



    Присоединяйтесь к обсуждению

    Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
    Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

    Гость
    Добавить комментарий...

    ×   Вставлено с форматированием.   Вставить как обычный текст

      Разрешено использовать не более 75 эмодзи.

    ×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

    ×   Ваш предыдущий контент был восстановлен.   Очистить редактор

    ×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

    Загрузка...

×
×
  • Создать...

Важная информация

Используя наш сайт вы соглашаетесь с нашей Политикой конфиденциальности