<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* MaxSite CMS
* (c) https://max-3000.com/
*
* https://github.com/maxsite/cms/issues/171
* http://ruogp.me/
* https://habrahabr.ru/post/278459/
*
*/
# функция автоподключения плагина
function open_graph_autoload()
{
mso_hook_add('html_attr', 'open_graph_html_attr'); # хук на атрибуты <HTML>
mso_hook_add('head', 'open_graph_head'); # хук на <HEAD>
}
# функция выполняется при активации (вкл) плагина
function open_graph_activate($args = [])
{
mso_create_allow('open_graph_edit', t('Админ-доступ к настройкам open_graph'));
return $args;
}
# функция выполняется при деинсталяции плагина
function open_graph_uninstall($args = [])
{
mso_delete_option('plugin_open_graph', 'plugins'); // удалим созданные опции
mso_remove_allow('open_graph_edit'); // удалим созданные разрешения
return $args;
}
# атрибуты HTML
# отдавать результат по return
function open_graph_html_attr($arg = '')
{
// если уже есть подключение og, то ничего не делаем
if (strpos($arg, 'prefix="og: http://ogp.me/ns#"') === false)
$arg .= ' prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#"';
return $arg;
}
# функция отрабатывающая миниопции плагина (function плагин_mso_options)
# если не нужна, удалите целиком
function open_graph_mso_options()
{
if (!mso_check_allow('open_graph_edit')) {
echo t('Доступ запрещен');
return;
}
# ключ, тип, ключи массива
mso_admin_plugin_options(
'plugin_open_graph1',
'plugins',
[
'image_width' => [
'type' => 'text',
'name' => t('Ширина изображения'),
'description' => t('Используется для формирования миниатюры записи'),
'default' => '900'
],
'image_height' => [
'type' => 'text',
'name' => t('Высота изображения'),
'description' => t('Используется для формирования миниатюры записи'),
'default' => '600'
],
'image_type_resize' => [
'type' => 'select',
'name' => t('Способ формирования изображения'),
'description' => t(''),
'values' => 'resize_full_crop_center # resize_full_crop_top_left # resize_full_crop_top_center # resize_crop # resize_crop_center # resize_h_crop_center # crop # crop_center # resize # resize_w # resize_h',
'default' => 'resize_full_crop_center'
],
'locale' => [
'type' => 'text',
'name' => t('Язык локали'),
'description' => t('Например <code>ru_RU</code> или <code>en_US</code>'),
'default' => 'ru_RU'
],
'twitter_site' => [
'type' => 'text',
'name' => t('Имя в Twitter'),
'description' => t('Указывайте с <code>@</code>'),
'default' => ''
],
],
t('Настройки плагина Open Graph'), // титул
t('Протокол Open Graph позволяет странице стать полноценным объектом в социальных сетях.') // инфо
);
}
# meta-данные
# выводятся через echo
function open_graph_head($arg = '')
{
$o = mso_get_option('plugin_open_graph1', 'plugins', array());
$locale = isset($o['locale']) ? $o['locale'] : 'ru_RU';
$twitter_site = isset($o['twitter_site']) ? $o['twitter_site'] : '';
// http://ruogp.me/#types
if (is_type('home'))
_meta_content('og:type', 'website');
else
_meta_content('og:type', 'article');
$description = mso_head_meta('description');
$title = mso_head_meta('title');
// $url = mso_link_rel('canonical', '', true);
$url = mso_current_url(true);
_meta_content('og:title', $title);
_meta_content('og:description', $description);
_meta_content('og:url', $url);
_meta_content('og:locale', $locale);
_meta_content('og:site_name', getinfo('name_site'));
_meta_content('twitter:title', $title);
_meta_content('twitter:description', $description);
_meta_content('twitter:url', $url);
_meta_content('twitter:domain', getinfo('siteurl'));
_meta_content('twitter:site', $twitter_site);
_meta_content('twitter:creator', $twitter_site);
if (is_type('page')) {
// получаем текущую запись — они задаются в type-файле
if ($pageData = mso_get_val('mso_pages', 0, true)) {
if (isset($pageData['page_meta']['image_for_page'][0]) and $pageData['page_meta']['image_for_page'][0]) {
$image_width = isset($o['image_width']) ? $o['image_width'] : 900;
$image_height = isset($o['image_height']) ? $o['image_height'] : 600;
$image_type_resize = isset($o['image_type_resize']) ? $o['image_type_resize'] : 'resize_full_crop_center';
if ($image_type_resize !== 'resize_full_crop_center') {
$postfix = '-' . $image_width . '-' . $image_height . '-' . $image_type_resize;
} else {
$postfix = '-' . $image_width . '-' . $image_height;
}
if ($image_url = thumb_generate(
$pageData['page_meta']['image_for_page'][0], // адрес
$image_width, //ширина
$image_height, //высота
false,
$image_type_resize, // тип создания
false,
'mini',
$postfix,
mso_get_option('upload_resize_images_quality', 'general', 90)
)) {
_meta_content('og:image', $image_url);
_meta_content('og:image:width', $image_width);
_meta_content('og:image:height', $image_height);
_meta_content('twitter:image', $image_url);
_meta_content('twitter:card', 'summary_large_image');
}
}
}
}
return $arg;
}
# вспомогательная для формирования <meta property="" content="">
function _meta_content($meta = '', $content = '', $echo = true)
{
if ($echo)
echo '<meta property="' . $meta . '" content="' . $content . '">' . NR;
else
return '<meta property="' . $meta . '" content="' . $content . '">';
}
# end of file