В процессе написания дополнительных возможности для 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}}
Report запись
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.