Source of file Seo.php
Size: 5,728 Bytes - Last Modified: 2021-12-23T10:11:23+00:00
/var/www/docs.ssmods.com/process/src/src/Seo.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | <?php namespace QuinnInteractive\Seo; use QuinnInteractive\Seo\Builders\FacebookMetaGenerator; use QuinnInteractive\Seo\Builders\TwitterMetaGenerator; use QuinnInteractive\Seo\Extensions\PageHealthExtension; use QuinnInteractive\Seo\Extensions\PageSeoExtension; use QuinnInteractive\Seo\Extensions\SiteConfigSettingsExtension; use SilverStripe\Control\Controller; use SilverStripe\Core\Config\Configurable; use SilverStripe\Core\Injector\Injectable; use SilverStripe\ORM\FieldType\DBDatetime; use SilverStripe\Security\Security; use SilverStripe\SiteConfig\SiteConfig; /** * Class Seo * @package QuinnInteractive\Seo */ class Seo { use Injectable, Configurable; /** * Collates all content fields from {@link seoContentFields()} into a single string. Which makes it very important * that the seoContentFields array is in the correct order as to which they display. * * @param \Page|PageHealthExtension $owner * * @return string */ public static function collateContentFields($owner) { $contentFields = $owner->seoContentFields(); $content = []; foreach ($contentFields as $field) { $content[] = $owner->relObject($field)->forTemplate(); } if ($owner->hasMethod('updateCollateContentFields')) { $content = $owner->updateCollateContentFields($content); } $content = implode(' ', $content); return strtolower(strip_tags($content)); } /** * Creates article:published_time and article:modified_time tags * * @param \Page|PageSeoExtension|Object $owner * * @return array */ public static function getArticleTags($owner) { /** @var DBDatetime $published */ $published = $owner->dbObject('Created'); /** @var DBDatetime $modified */ $modified = $owner->dbObject('LastEdited'); return [ sprintf('<meta property="article:published_time" content="%s" />', $published->Rfc3339()), sprintf('<meta property="article:modified_time" content="%s" />', $modified->Rfc3339()), ]; } /** * Gets the current action. Good for static routes like Security where the index is a 404 * @return string|null */ public static function getCurrentAction() { $action = null; if (Controller::curr() instanceof Security) { $action = Controller::curr()->getAction(); } return $action; } /** * Creates the canonical url link * * @param \Page|PageSeoExtension|Object $owner * * @return array */ public static function getCanonicalUrlLink($owner) { return [ sprintf('<link rel="canonical" href="%s"/>', $owner->AbsoluteLink(static::getCurrentAction())) ]; } /** * Creates the Facebook/OpenGraph meta tags * * @param \Page|PageSeoExtension|Object $owner * * @return array */ public static function getFacebookMetaTags($owner) { $imageWidth = $owner->FacebookPageImage()->exists() ? $owner->FacebookPageImage()->getWidth() : null; $imageHeight = $owner->FacebookPageImage()->exists() ? $owner->FacebookPageImage()->getHeight() : null; $generator = FacebookMetaGenerator::create(); $generator->setTitle($owner->FacebookPageTitle ?: $owner->Title); $generator->setDescription($owner->FacebookPageDescription ?: $owner->MetaDescription ?: $owner->Content); $generator->setImageUrl(($owner->FacebookPageImage()->exists()) ? $owner->FacebookPageImage()->AbsoluteLink() : null); $generator->setImageDimensions($imageWidth, $imageHeight); $generator->setType($owner->FacebookPageType ?: 'website'); $generator->setUrl($owner->AbsoluteLink(static::getCurrentAction())); return $generator->process(); } /** * @return array */ public static function getGoogleAnalytics() { /** @var SiteConfig|SiteConfigSettingsExtension $sc */ $sc = SiteConfig::current_site_config(); return ($sc->GoogleAnalytics) ? [$sc->GoogleAnalytics] : []; } /** * Get all PixelFields * @return array */ public static function getPixels() { $output = []; $siteConfig = SiteConfig::current_site_config(); $ours = array_keys(SiteConfigSettingsExtension::config()->get('db')); $db = SiteConfig::config()->get('db'); foreach ($db as $k => $v) { if (strstr($k, 'Pixel') && in_array($k, $ours)) { if (is_null($siteConfig->{$k})) { continue; } $output[] = $siteConfig->{$k}; } } return $output; } /** * Creates the twitter meta tags * * @param \Page|PageSeoExtension|Object $owner * * @return array */ public static function getTwitterMetaTags($owner) { $generator = TwitterMetaGenerator::create(); $generator->setTitle($owner->TwitterPageTitle ?: $owner->Title); $generator->setDescription($owner->TwitterPageDescription ?: $owner->MetaDescription ?: $owner->Content); $generator->setImageUrl(($owner->TwitterPageImage()->exists()) ? $owner->TwitterPageImage()->AbsoluteLink() : null); if (PageSeoExtension::config()->get('enable_creator_tag') && $owner->Creator()->exists() && $owner->Creator()->TwitterAccountName) { $generator->setCreator($owner->Creator()->TwitterAccountName); } return $generator->process(); } } |