Skip to content

Instantly share code, notes, and snippets.

@andronex
Last active August 29, 2015 14:17
Show Gist options
  • Save andronex/8572cd79ee92aaf97512 to your computer and use it in GitHub Desktop.
Save andronex/8572cd79ee92aaf97512 to your computer and use it in GitHub Desktop.
Плагин для вывода части микроразметки типа OpenGraph. Выводит в HTML код мета поле с корректным URL картнки.
<?php
/**
* Плагин для вывода части микроразметки типа OpenGraph
* Выводит в HTML код мета поле с корректным URL картнки.
* Принцип работы: если в content текущего ресурса находит хоть одну картинку,
* то автоматически выводит её в meta property="og:image"
* Если картинки не найдены в тексте, то прицепляет к ресурсу любую жёстко
* заданную картинку. Нужен для корректного вывода поста в соц.сетях - с нужной картинкой.
*/
$eventName = $modx->event->name;
switch($eventName) {
case 'OnWebPagePrerender':
if ($cont = &$modx->resource->content && ($modx->resource->id) != 1) {
preg_match_all('/<img[^>]*?src=\"(.*)\"/iU', $cont, $result);//ищем все URL с картинками в данном ресурсе
$output = &$modx->resource->_output;//доступ к буферу вывода по ссылке
if ($result[1][0]) {//если хотя бы одна картинка есть
$output = str_replace('</head>','
<meta property="og:image" content="'.MODX_URL_SCHEME.MODX_HTTP_HOST.$result[1][0].'">
</head>',$output);//добавляем перед </head> meta тег разметки OpenGraph с картинкой
}
else $output = str_replace('</head>','
<meta property="og:image" content="'.MODX_URL_SCHEME.MODX_HTTP_HOST.'/assets/img/example.png">
</head>',$output);//иначе добавляем перед </head> meta тег разметки OpenGraph с жёстко заданной картинкой
}
break;
}
В HTML коде шапки OpenGraph выглядит так (с учётом других тегов и нужен сниппет summary):
<meta name="keywords" content="[[*introtext:htmlent]]">
<meta name="description" content="[[*description:htmlent]]">
<meta property="og:title" content="[[*pagetitle:htmlent]][[*longtitle:!empty=` | [[*longtitle:htmlent]]`]][[!titlePagination]]">
[[*description:ne=``:then=`<meta property="og:description" content="[[*description:htmlent]]">`:else=`<meta property="og:description" content="[[chisto:default=`Описание по дефолту, трам-пам-пам...`?input=`[[summary?len=`250` &dotted=`1` &text=`[[*content]]`]]`]]">`]]
<meta property="og:url" content="[[~[[*id]]?scheme=`full`]]">
[[*id:is=`1`:then=`<meta property="og:image" content="http://domain.ru/assets/img/example.png">`]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment