Skip to content
  1. Компоненты
  2. Localizator
  3. Атрибут hreflang

Атрибут hreflang для мультиязычных сайтов

Для корректной работы адрес в настройках локализации в параметре HTTP HOST должен указан с / на конце. Для примера:

  • ua: modx.pro/ua/
  • ru: modx.pro/

1. Создаем сниппет hreflang и вставляем следующий код

php
<?php
$output = "";
$default = "ua"; // Указываем язык по умолчанию
$id = $modx->resource->get('id');
$start = $modx->getOption('site_start');
$protocol = $modx->getOption('server_protocol') . '://';

$resources = $modx->runSnippet('pdoResources', [
  'loadModels' => 'localizator',
  'class' => 'localizatorLanguage',
  'sortby' => 'id',
  'limit' => '0',
  'sortdir' => 'asc',
  'where' => ['active' => 1],
  'return' => 'json',
]);

if ($resources) {
  $resources = json_decode($resources);

  foreach ($resources as $resource) {
    $key = $resource->key;
    if ($id != $start) {
      $url = $resource->http_host.$modx->makeUrl($id);
    } else {
      $url = $resource->http_host;
    }
    if ($key == $default) {
      $output .= "<link rel='alternate' hreflang='x-default' href='{$protocol}{$url}' />";
    }
    $output .= "<link rel='alternate' hreflang='{$key}' href='{$protocol}{$url}'>";
  }
}

return $output;

2. Вызываем сниппет в head

fenom
{'!hreflangs' | snippet}

Результат

html
<link rel="alternate" hreflang="ru" href="https://site.com/ru/">
<link rel="alternate" hreflang="uk" href="https://site.com/">
<link rel="alternate" hreflang="en" href="https://site.com/en/">
<link rel="alternate" hreflang="x-default" href="https://site.com/">