/
Hreflang.hooks.php
74 lines (68 loc) · 1.99 KB
/
Hreflang.hooks.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
<?php
/**
* Hooks for Hreflang extension
*
* @file
* @ingroup Extensions
*/
class HreflangHooks {
public static function onBeforePageDisplay( OutputPage $out, SkinTemplate $sk ) {
$config = $out->getConfig();
if ( self::canOutputHreflang( $config ) ) {
# Generate hreflang tags
$languageLinks = $out->getLanguageLinks();
if ( empty($languageLinks) ) {
// shortcut - if we don't have any language links, don't bother
return;
}
$addedLink = false;
$pages = $config->get("HreflangPages");
if( !$pages ) {
$pages = array();
$foundPage = true;
} else {
$pages = array_flip( $pages );
$pageName = $out->getLanguage()->getHtmlCode() . ":" . $out->getTitle()->getBaseText();
$foundPage = isset( $pages[$pageName] );
}
foreach ( $languageLinks as $languageLinkText ) {
$languageLinkTitle = Title::newFromText( $languageLinkText );
if ( !$languageLinkTitle ) {
continue;
}
$ilInterwikiCode = $languageLinkTitle->getInterwiki();
if ( !Language::isKnownLanguageTag( $ilInterwikiCode ) ) {
continue;
}
$foundPage = $foundPage || isset( $pages[$languageLinkText] );
$tags[] = Html::element( 'link', array(
'rel' => 'alternate',
'hreflang' => wfBCP47( $ilInterwikiCode ),
'href' => $languageLinkTitle->getFullURL()
) );
$addedLink = true;
}
// Only add current language link if we had any other links
if ( $addedLink ) {
$tags[] = Html::element( 'link', array(
'rel' => 'alternate',
'hreflang' => $out->getLanguage()->getHtmlCode(),
'href' => $out->getTitle()->getFullURL()
) );
}
}
if ( $foundPage && $tags ) {
$out->addHeadItem("hreflang:tags", join("\n", $tags));
}
}
/**
* Are we supposed to output hreflang headers?
* @param Config $config
* @return boolean
*/
protected static function canOutputHreflang( Config $config ) {
return $config->get( 'HreflangGenerate' ) !== false
;
// && $this->getProperty( 'enableHreflangLinks' ) !== false;
}
}