template = $template;
$this->setUrl($url, $query);
$this->pagesCanonical = bff::config('seo.pages.canonical', true, TYPE_BOOL);
}
/**
* @param string $url
* @param array $query
*/
public function setUrl(string $url, array $query = [])
{
$this->url = $url;
$this->query = $query;
}
/**
* @param array $query
* @param string $url
* @return string
*/
public function queryToString(array $query, string $url): string
{
if (empty($query)) {
return '';
}
# Skip first 'page' and 'total' pages counter
foreach ($query as $key => $value) {
if (empty($value) || ($key == 'page' && $value < 2) || $key === 'total') {
unset($query[$key]);
}
}
# Exclude 'page' from canonical url
if (! $this->pagesCanonical) {
unset($query['page']);
}
return Url::query($query, [], (strpos($url, '?') === false ? '?' : '&'));
}
/**
* Get final meta tags
* @param string $language
* @param bool|array $landing active landing page or false
* @return array
*/
public function getMeta(string $language, $landing): array
{
if ($this->meta) {
return $this->meta;
}
# Use landing uri
if ($landing !== false) {
$url = $landing['landing_uri'];
if (Lang::getLanguageUrlPrefix() !== '/') {
# {sitehost}/(lang1|lang2|...)/.* => {sitehost}/
$url = preg_replace(
'/' . preg_quote(Url::HOST_PLACEHOLDER) . '\/(' . join('|', Lang::getLanguages()) . ')\/.*/U',
Url::HOST_PLACEHOLDER . '/',
$url
);
}
if (empty($landing['joined'])) {
$this->template->index();
}
} else {
$url = $this->url;
}
# Noindex => no meta
if (! $this->template->index) {
return $this->meta;
}
# Add query
$url .= $this->queryToString($this->query, $url);
# Dynamic url => final url
if (Url::isDynamic($url)) {
$scheme = (bff::config('https.canonical', false) ? 'https' : false);
$languages = Lang::getLanguages(true, Lang::getHiddenLocalesList());
if (sizeof($languages) > 1) {
foreach ($languages as $lng) {
# alternate meta
$tag = [
'rel' => 'alternate',
'hreflang' => $lng,
'href' => Url::dynamic($url, [], ['lang' => $lng, 'scheme' => $scheme]),
];
$this->meta['link-alternate-' . $lng] = array_merge($tag, [
'tag' => 'link',
'html' => '',
]);
}
}
$url = Url::dynamic($url, [], ['lang' => $language, 'scheme' => $scheme]);
}
# canonical meta
$tag = [
'rel' => 'canonical',
'href' => $url,
];
$this->meta['link-canonical'] = array_merge($tag, [
'tag' => 'link',
'html' => '',
]);
return $this->meta;
}
}