В мультиязычной версии сайта на Друпал 8 ссылка с поля "Содержимое: Ссылка на Содержимое" на странице представления на иностранном языке ведет на содержимое на русском языке

Аватар пользователя primary

Добрый день!

Нужна помощи по следующему вопросу. На мультиязычном сайте на Друпал 8 сделал материал "Новости" и Представление к нему "Все новости" - в виде страница с анонсами, содержащими поля:

Содержимое: Заголовок;
Содержимое: Image;
Содержимое: Body;
Содержимое: Ссылка на Содержимое.

Поля Содержимое: Заголовок; и Содержимое: Image; настроил в представлении в виде ссылки на Содержимое.

На англоязычной странице данного представления ссылка с заголовка и изображения ведет, как и нужно, на английский вариант страницы с материалом:

sait.ru/en/node/42

А вот поле: Содержимое: Ссылка на Содержимое - не правильно - на русскоязычную страницу: sait.ru/ru/node/42.

Перепробовал все настройки и не могу найти причину не правильной ссылки. На данный момент остается вариант убрать ссылку "Подробнее" (поле Ссылка на Содержимое), но надо бы разобраться, в чем дело.

Тип материала:
Версия Drupal:
0 Thanks

Комментарии

Аватар пользователя marassa
marassa 4 дня назад

Воевал с чем-то похожим примерно год назад, не придумал ничего лучше как принудительно проставлять во всех внутренних ссылках на странице (кроме переключателя языков! ;) язык текущей страницы. Получился жуткий хак, но работает исправно:

/**
 * Implements hook_link_alter().
 */

function MYMODULE_link_alter(&$variables) {

  /**
   * The URL of the link.
   *
   * @var Url
   */

  $url = $variables['url'];

  // Return early where possible.
  if ($url->isExternal()) return;

  // Make sure all internal links from a page lead to the correct language versions of any linked page
  if ($variables['text'] != 'English' && $variables['text'] != "Русский") {
    $language = \Drupal::languageManager()->getCurrentLanguage();
    $variables['options']['language'] = $language;
  }
}

Аватар пользователя primary
primary 4 дня назад

Попробовал поставить патч #11 с предложенного решения https://www.drupal.org/project/drupal/issues/2883450 , но к сожалению он мне не подходит, так как у меня при выводе представления на странице и в блоках установлена фильтрация по выбранному для страницы языку. В тоже время, для работы патча, при создании материала, в настройке выбора языка нужно выбирать "Не указано". Такие материалы в имеющихся представлениях на русском и английском просто не выводятся.

Попробовал и второе решение. По нему хочу уточнить. Данный хак добавил в файл темы mythemename.theme, соответственно, заменив MYMODULE на название моей темы mythemename. Почистил кэш. Но Ссылка на Содержимое в английской версии по-прежнему ведет на русскую страницу материала. Может что-то нужно сделать еще?

Аватар пользователя marassa
marassa 4 дня назад
primary написал:
Данный хак добавил в файл темы mythemename.theme, соответственно, заменив MYMODULE на название моей темы mythemename. Почистил кэш. Но Ссылка на Содержимое в английской версии по-прежнему ведет на русскую страницу материала. Может что-то нужно сделать еще?

Я не уверен, что данный хук будет работать в теме - многие работают только в модуле. У меня сделано в модуле и работает. Возможно в этом дело.

Аватар пользователя primary
primary 4 дня назад

Подскажите пожалуйста подробнее, в какой модуль и какой файл модуля добавить хак. (или нужно создать модуль?). И что прописать вместо MYMODULE

Аватар пользователя marassa
marassa 4 дня назад
itcrowd72 написал:
http://xandeadx.ru/blog/drupal/256

По ссылке описание создания модуля для семерки, в восьмерке всё немножко не так, начиная с папки. Найдите где-нибудь описание того, как создать свой модуль для восьмерки - там ничего военного нет, я тоже долго боялся, а оказалось ничего страшного. Рано или поздно это всё равно придётся сделать при разработке мало-мальски приличного сайта. Да, и на всякий случай предупрежу - название модуля должно отличаться от названия темы!

Аватар пользователя primary
primary 3 дня назад

Спасибо за помощь! Создам модуль, а также есть еще одна идея, которую попробую реализовать.

Аватар пользователя gun_dose
gun_dose 3 дня назад

Попробуйте вместо ссылки на содержимое использовать "ссылка на сущность". Т.к сам плагин ссылки на содержимое немного глючный и с версии 8.5 вроде бы должен стать deprecated.