Подскажите решение для открытия файла со страницы материала в новой вкладке браузера

Аватар пользователя DD 85 DD 85 6 октября в 0:54

Для отображения на странице материала ссылки на файл я использую поле Файл (не Media). Для D7 есть отличный модуль FileField Target позволяющий настроить открытие этого файла в новой вкладке.
Подскажите решение для открытия файла со страницы материала в новой вкладке браузера.

0 Thanks

Комментарии

Аватар пользователя DD 85 DD 85 6 октября в 22:43

Я попробовал применить этот код.

<?php
function hook_preprocess_file_link(&$variables) {
  if(
$variables['link'] && $variables['link'] instanceof \Drupal\Core\GeneratedLink){
    
$doc = new DOMDocument();
    
$doc->loadHTML($variables['link']->getGeneratedLink());
    
$node $doc->getElementsByTagName('a')[0];
    
$node->setAttribute('target''_blank');
    
$variables['link']->setGeneratedLink($doc->saveHTML());
  }
}
?>

Добавил его в файл .theme, заменил hook на название темы.
Атрибут target="_blank" в ссылке появился, но текст ссылки отображается крокозяброй.

Как исправить проблему с кодировкой?

Аватар пользователя DD 85 DD 85 7 октября в 18:15

Описание может использоваться как текст ссылки на файл
Описание может использоваться как текст ссылки на файл


Аватар пользователя sas@drupal.org sas@drupal.org 8 октября в 10:50

Используйте наследование от core/modules/file/file.module -> function template_preprocess_file_link

Зы.. возможна вообще одна строка

$variables['link'] = str_replace('<a ', '<a target="_blank" ', $variables['link']);
Аватар пользователя DD 85 DD 85 8 октября в 18:42

Как применить эту строчку кода?
Когда я пишу так

function hook_preprocess_file_link(&$variables) {
  if($variables['link'] && $variables['link'] instanceof \Drupal\Core\GeneratedLink){
    $variables['link'] = str_replace(', ', $variables['link']);
  }
}


весь тег A выводится как текст. С атрибутом target="_blank" конечно, но как текст, а хочется, чтобы это была ссылка.
Так то же самое

function hook_preprocess_file_link(&$variables) {
 $variables['link'] = str_replace(', ', $variables['link']);
}
Аватар пользователя sas@drupal.org sas@drupal.org 9 октября в 9:50

Если нужно как объект, то обрабатывайте выше. но потом всё рано надо отрендерить в ссылку, в прототипе есть код для работы с объектов.

Аватар пользователя marassa marassa 7 октября в 7:12

По ссылке в комментах предлагается пара хаков как заставить php воспринимать фрагмент HTML без явно указанной кодировки как UTF-8.
https://www.php.net/manual/en/domdocument.loadhtml.php
Ну или поискать хук получше/пораньше, который не требует всей этой порнографии с load/saveHTML. Навскидку не подскажу какой.

Аватар пользователя DD 85 DD 85 7 октября в 8:36

На указанной вами странице много всего.
И я не понял, какой именно код имеется ввиду.
Да и как его применить мне непонятно.
Пожалуйста, приведите конкретный готовый код.