getEarliestRevTime()); $getDateModified = DateTime::createFromFormat('YmdHis', MW_EXT_Kernel::getTitle()->getTouched()); $getFirstRevision = MW_EXT_Kernel::getTitle()->getFirstRevision(); $getImage = key($out->getFileSearchOptions()); $getImageObject = wfFindFile($getImage); $getRevision = MW_EXT_Kernel::getWikiPage()->getRevision(); $getHeadline = MW_EXT_Kernel::outClear(MW_EXT_Kernel::getTitle()->getText()); $getAltHeadline = $getHeadline; $getKeywords = MW_EXT_Kernel::outClear(str_replace('Категория:', '', implode(', ', array_keys(MW_EXT_Kernel::getTitle()->getParentCategories())))); $getWordCount = MW_EXT_Kernel::getTitle()->getLength(); $getArticleURL = $getSiteURL . '/' . '?curid=' . MW_EXT_Kernel::getTitle()->getArticleID(); $getArticleID = $getSiteURL . '/' . '?curid=' . MW_EXT_Kernel::getTitle()->getArticleID(); $getExtDescription = $parserOutput->getPageProperty('description'); // Set by "Description2" extension. if ($getExtDescription !== false) { $getDescription = $getExtDescription; } else { $getDescription = ''; }; // Get article text. if ($getRevision) { $getContent = $getRevision->getContent(Revision::FOR_PUBLIC); $getContentText = Content::getText($getContent); $getArticleText = trim(preg_replace('/\s+/', ' ', strip_tags($getContentText))); } else { $getArticleText = ''; } $getArticleBody = MW_EXT_Kernel::outClear($getArticleText); // Get article created date. $getDateCreated = $getDateCreated ? $getDateCreated->format('c') : '0'; // Get article modified date. $getDateModified = $getDateModified ? $getDateModified->format('c') : '0'; // Get article author. if ($getFirstRevision) { $getUser = User::newFromId($getFirstRevision->getUser()); $getUserName = $getFirstRevision->getUserText(); $getUserGroups = $getUser->getGroups(); $getAuthorName = MW_EXT_Kernel::outClear($getUserName); $getAuthorURL = $getUser->getUserPage()->getFullURL(); $getAuthorJobTitle = MW_EXT_Kernel::outClear(implode(', ', array_values($getUserGroups))); } else { $getAuthorName = MW_EXT_Kernel::getConfig('EXT_SEO_AuthorName'); $getAuthorJobTitle = ''; $getAuthorURL = ''; } // Get article image. if ($getImage && $getImageObject) { $getImageURL = $getImageObject->getFullURL(); $getImageWidth = $getImageObject->getWidth(); $getImageHeight = $getImageObject->getHeight(); } else { $getImageURL = $getSiteURL . $getSiteLogo; $getImageWidth = getimagesize($getImageURL)[0]; $getImageHeight = getimagesize($getImageURL)[1]; } // ----------------------------------------------------------------------------------------------------------------- // Init JSON-LD. // ----------------------------------------------------------------------------------------------------------------- $json = []; // Loading JSON-LD. $json['@context'] = 'http://schema.org'; $json['@type'] = 'Article'; $json['headline'] = $getHeadline; $json['alternativeHeadline'] = $getAltHeadline; $json['description'] = $getDescription; $json['keywords'] = $getKeywords; $json['dateCreated'] = $getDateCreated; $json['datePublished'] = $getDateCreated; $json['dateModified'] = $getDateModified; $json['wordCount'] = $getWordCount; $json['url'] = $getArticleURL; // $json['articleBody'] = $getArticleBody; $json['mainEntityOfPage'] = [ '@type' => 'WebPage', '@id' => $getArticleID, ]; $json['author'] = [ '@type' => 'Person', 'name' => $getSiteName, //'jobTitle' => $getAuthorJobTitle, 'url' => $getSiteURL, ]; $json['image'] = [ '@type' => 'ImageObject', 'url' => $getImageURL, 'height' => $getImageWidth, 'width' => $getImageHeight, ]; $json['publisher'] = [ '@type' => 'Organization', 'name' => $getSiteName, 'url' => $getSiteURL, 'logo' => [ '@type' => 'ImageObject', 'url' => $getPublisherLogo, 'height' => 60, 'width' => 600, ], 'address' => [ '@type' => 'PostalAddress', 'streetAddress' => $getStreetAddress, 'addressLocality' => $getAddressLocality, 'addressRegion' => $getAddressRegion, 'postalCode' => $getPostalCode, 'addressCountry' => $getAddressCountry, ], 'contactPoint' => [ '@type' => 'ContactPoint', 'contactType' => $getContactType, 'telephone' => $getSitePhone, 'email' => $getSiteEmail, 'url' => $getSiteURL, ], 'sameAs' => [ $getURL_Vk, $getURL_Facebook, $getURL_Twitter, $getURL_Discord, ] ]; // Render JSON-LD. $json_encode = json_encode($json, JSON_UNESCAPED_UNICODE); $out->addHeadItem('mw-seo-json', ''); // ----------------------------------------------------------------------------------------------------------------- // HTTP-EQUIV. // ----------------------------------------------------------------------------------------------------------------- // Render HTTP-EQUIV. $out->addHeadItem('mw-seo-http', Html::element('meta', [ 'http-equiv' => 'X-UA-Compatible', 'content' => 'IE=edge', ])); // ----------------------------------------------------------------------------------------------------------------- // DNS prefetch. // ----------------------------------------------------------------------------------------------------------------- $dns = [ '//cdn.jsdelivr.net', '//fonts.googleapis.com', '//use.fontawesome.com', ]; // Render dns. foreach ($dns as $key => $value) { if ($value) { //$out->addHeadItem( 'mw-seo-dns-' . $key, '' ); } } // ----------------------------------------------------------------------------------------------------------------- // Favicon. // ----------------------------------------------------------------------------------------------------------------- $out->addHeadItem('mw-seo-favicon', ''); // ----------------------------------------------------------------------------------------------------------------- // Meta. // ----------------------------------------------------------------------------------------------------------------- $meta = []; // Loading Meta. $meta['viewport'] = 'width=device-width, initial-scale=1, maximum-scale=1'; $meta['keywords'] = $getKeywords; $meta['author'] = $getSiteName; $meta['designer'] = $getSiteName; $meta['publisher'] = $getSiteName; $meta['distribution'] = 'web'; $meta['rating'] = 'general'; $meta['reply-to'] = $getSiteEmail; $meta['copyright'] = $getSiteName; $meta['referrer'] = 'strict-origin'; $meta['theme-color'] = $getThemeColor; $meta['msapplication-TileColor'] = $getMSTileColor; // Render META. foreach ($meta as $name => $value) { if ($value) { $out->addHeadItem('mw-seo-meta' . $name, Html::element('meta', [ 'name' => $name, 'content' => $value, ])); } } // ----------------------------------------------------------------------------------------------------------------- // Link. // ----------------------------------------------------------------------------------------------------------------- $link = []; $link['publisher'] = $getPublisher; $link['manifest'] = $getManifest; // Render link. foreach ($link as $rel => $value) { if ($value) { $out->addHeadItem('mw-seo-rel' . $rel, Html::element('link', [ 'rel' => $rel, 'href' => $value, ])); } } // ----------------------------------------------------------------------------------------------------------------- // Open Graph. // ----------------------------------------------------------------------------------------------------------------- // OG type. $getType = MW_EXT_Kernel::getTitle()->isMainPage() ? 'website' : 'article'; $og = []; // Loading Open Graph. $og['og:type'] = $getType; $og['og:site_name'] = $getSiteName; $og['og:title'] = $getHeadline; $og['og:description'] = $getDescription; $og['og:image'] = $getImageURL; //$og['og:image:width'] = $getImageWidth; //$og['og:image:height'] = $getImageHeight; $og['og:url'] = $getArticleURL; $og['article:published_time'] = $getDateCreated; $og['article:modified_time'] = $getDateModified; $og['article:author'] = $getSiteName; $og['article:publisher'] = $getArticlePublisher; $og['article:tag'] = $getKeywords; $og['fb:app_id'] = ''; // Render Open Graph. foreach ($og as $property => $value) { if ($value) { $out->addHeadItem('mw-seo-og' . $property, Html::element('meta', [ 'property' => $property, 'content' => $value, ])); } } // ----------------------------------------------------------------------------------------------------------------- // Twitter. // ----------------------------------------------------------------------------------------------------------------- $twitter = []; // Loading Twitter Card. $twitter['twitter:card'] = 'summary'; $twitter['twitter:title'] = $getHeadline; $twitter['twitter:description'] = $getDescription; $twitter['twitter:image'] = $getImageURL; $twitter['twitter:site'] = '@' . $getTwitter_Site; $twitter['twitter:creator'] = '@' . $getTwitter_Creator; // Render Twitter Card. foreach ($twitter as $name => $value) { if ($value) { $out->addHeadItem('mw-seo-twitter' . $name, Html::element('meta', [ 'name' => $name, 'content' => $value, ])); } } // ----------------------------------------------------------------------------------------------------------------- // DC. // ----------------------------------------------------------------------------------------------------------------- $dc = []; $dc['DC.Title'] = $getHeadline; $dc['DC.Date.Issued'] = $getDateCreated; $dc['DC.Date.Created'] = $getDateCreated; // Render DC. foreach ($dc as $name => $value) { if ($value) { $out->addHeadItem('mw-seo-dc' . $name, '' . Html::element('meta', [ 'name' => $name, 'content' => $value, ])); } } } /** * Load function. * * @param OutputPage $out * @param ParserOutput $parserOutput * * @return void|null * @throws ConfigException * @throws MWException */ public static function onOutputPageParserOutput(OutputPage $out, ParserOutput $parserOutput) { if (!MW_EXT_Kernel::getTitle() || !MW_EXT_Kernel::getTitle()->isContentPage() || !MW_EXT_Kernel::getWikiPage()) { return null; } self::onRenderSEO($out, $parserOutput); } }