В процессе написания дополнительных возможности для Invision Community, либо модификации уже существующей, может возникнуть необходимость получения первого/последнего изображения/видеоролика из контента, например из записи блога или сообщения на форуме.
Из самых не замысловатых способов это сделать:
- Составить регулярное выражение.
- Подключить 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}}
Комментариев нет
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.