Поддержать Проект

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

[MODX] Guru
  • Информация
  • Разработчикам
  • Дополнения
    • DocLister
    • DLMenu
    • DLCrumbs
    • DLBuildMenu
    • DLLastViews
    • DLSiblings
    • DLRequest
    • DLglossary
    • DLSitemap
    • DocInfo
    • FormLister
    • Wayfinder
    • phpthumb
    • LikeDislike
    • eForm
    • Ditto
    • multiTV
    • AjaxMegaSearch
    • AjaxSearch
    • WebLoginPE
    • Breadcrumbs
    • CodeMirror
    • AnythingRating
    • Easy Newsletter
    • FirstChildRedirect
    • OpenGraphTags
    • ddTypograph
    • TagSaver
    • BlackList
    • CfgTv
    • ModxAccount
    • Forgot Manager Login
    • GetField
    • if
    • Jot
    • ListChild
    • ListIndexer
    • ManagerManager
    • ddMMEditor
    • MaxiGallery
    • MemberCheck
    • ddGetMultipleField
    • MetaX
    • MODxBB и phpBB
    • Yams
    • Personalize
    • PHx
    • Reflect
    • tagLinks
    • TransAlias
    • TvTagCloud
    • UltimateParent
    • WebSignup
    • WebLogin
    • countViews
    • thumb
    • imageCaptor
    • optimizeJPG
    • Preview Next
    • Shopkeeper
    • SiteMap
    • Sass
    • Selector
    • SimpleGallery
    • SimpleTube
    • SimpleFiles
    • Star Rating
    • MinifyX
    • adminNav
    • SimplePolls
    • CResource
    • MODxAPI
    • customTables
    • HtmlInLine
    • HtmlMinModxEvo
    • SHKUserProfile
    • PickDocsInTree
    • evoSearch
    • editDocs
    • PageBuilder
    • HybridAuth
    • Compare
    • alterTitle
  • Виджеты
  • Уроки
  • Разработчики
  • Готовые примеры
  • Блог
  • Конфиги
  • HTML коды
© [MODX] Guru
  • Дополнения
  • avatar
    • Автор: Aharito
    • DLSiblings

OpenGraphTags: Вывод OG-тегов для статьи

  • Дополнения
  • OpenGraphTags
2714

OpenGraphTags: Вывод OG-тегов для статьи

Скачивать здесь: OpenGraphTags

Параметры:

tplList

список шаблонов через запятую, ОБЯЗАТЕЛЬНЫЙ!!

locale

string, по умолчанию "ru_RU"

site_name

string, по умолчанию [(site_name)]

flag

string, имя ТВ-параметра-флага (чекбокс, им можно включить/отключить вывод OG-тегов для статьи, даже если её шаблон в списке $tplList). По умолчанию 1 (вкл).

thumbSnippet

string - сниппет для превьюшек как в SG и FastImage. Например, "sgThumb" или "phpthumb". По умолчанию пусто.

thumbOptions

string - опции превьюшки, заданные как в SG или FastImageTV или phpthumb. По умолчанию пусто.

NOTE: Для работы сниппета должны быть созданы следующие ТВ-параметры:

  • og_on_off - ТВ-параметр-флаг (чекбокс, им можно включить/отключить вывод OG-тегов для статьи, даже если её шаблон есть в списке $tplList)
  • og_title - заголовок для соцсетей, если не задан, соцсети чаще всего берут Title.
  • og_description - описание для соцсетей, не более 137 символов по моим экспериментам
  • og_image - картинка для соцсетей, если не задана, соцсети ищут картинки в контенте

Пример вызова сниппета:

[[OpenGraphTags? &tplList=`31,32` &site_name=`[(cfg_company_brand_name)]` &thumbSnippet=`sgThumb` &thumbOptions=`840x420`]]

Код сниппета:

<?php
/**
 * OpenGraphTags
 * Выводит OG-теги только для указанных шаблонов.
 * 
 * @category snippet
 * Это должны быть только шаблоны статей (og_type - жестко прописан как article)!!!
 * Выводит непустые значения тегов OpenGraph, указанные в админке для поста
 *
 * @param $tplList - список шаблонов через запятую, ОБЯЗАТЕЛЬНЫЙ!!
 * @param $locale, string, по умолчанию "ru_RU"
 * @param $site_name, string, по умолчанию [(site_name)]
 * @param $flag, string, имя ТВ-параметра-флага (чекбокс, им можно включить/отключить вывод OG-тегов для статьи, даже если её шаблон в списке $tplList). По умолчанию 1 (вкл).
 *
 * @param &thumbSnippet, string - сниппет для превьюшек как в SG и FastImage. Например, "sgThumb" или "phpthumb". По умолчанию пусто.
 * @param &thumbOptions, string - опции превьюшки, заданные как в SG или FastImageTV или phpthumb. По умолчанию пусто.
 *
 * @NOTE: Для работы сниппета должны быть созданы следующие ТВ-параметры:
 * og_on_off - ТВ-параметр-флаг (чекбокс, им можно включить/отключить вывод OG-тегов для статьи, даже если её шаблон есть в списке $tplList)
 * og_title - заголовок для соцсетей, если не задан, соцсети чаще всего берут Title.
 * og_description - описание для соцсетей, не более 137 символов по моим экспериментам
 * og_image - картинка для соцсетей, если не задана, соцсети ищут картинки в контенте
 * 
 *
 * @internal @category SMO
 *
 * @version 0.2
 * @author Aharito http://aharito.ru
 * 
 * 
 * @example [[OpenGraphTags? &tplList=`31,32` &site_name=`[(cfg_company_brand_name)]` &thumbSnippet=`sgThumb` &thumbOptions=`840x420`]]
**/

$out = '';

$tplList = str_replace(" ", "", $tplList); //Убираем возможные лишние пробелы между ID шаблонов в списке
$_tplList = explode(",", $tplList);

$docObject = $modx->documentObject;

if ( in_array($docObject['template'], $_tplList) && $docObject['og_on_off'][1] ) { // Если шаблон в списке $tplList, и если флаг "включен"

	// Эти параметры заданы единожды при вызове сниппета OpenGraphTags
	$site_name = isset($site_name) ? $site_name : $modx->getConfig('site_name');
	$locale = isset($locale) ? $locale : "ru_RU";
	
	// Эти параметры задаются при редактировании каждой статьи
	// Если они не заданы, то для них 100% есть дефолтные значения, они и выводятся
	$title = !empty($docObject["og_title"][1]) ? $docObject["og_title"][1] : $docObject["pagetitle"];
	$url = $modx->makeUrl($docObject["id"], '', '', 'full'); // Была возможность редактировать УРЛ, но я убрал за ненужностью
	
	// Эти параметры задаются при редактировании каждой статьи
	// Для них нет 100% дефолтных значений, поэтому если они не заданы, то вообще не выводим соответствующий метатег
	$desc = !empty($docObject["og_description"][1]) ? $docObject["og_description"][1] : $modx->runSnippet('summary', array('text' => $docObject['content'], 'len' => '50'));
	$descTPL = !empty($desc) ? '<meta property="og:description" content="' .$desc. '">' : '';
	
	$imgTPL = !empty($docObject["og_image"][1]) ? '<meta property="og:image" content="' .(isset($thumbSnippet) ? $modx->runSnippet($thumbSnippet, array("input" => $docObject["og_image"][1], "options"=>$thumbOptions)) : $docObject["og_image"][1]). '">' : '';

	$out .=  '';
	$out .= PHP_EOL."\t".'';
	$out .= PHP_EOL."\t".'';
	$out .= PHP_EOL."\t".'';
	$out .= $descTPL ? PHP_EOL."\t".$descTPL : '';
	$out .= $imgTPL ? PHP_EOL."\t".$imgTPL : '';
	$out .= PHP_EOL."\t".'';
}

return $out;