Для отображения на странице материала ссылки на файл я использую поле Файл (не Media). Для D7 есть отличный модуль FileField Target позволяющий настроить открытие этого файла в новой вкладке.
Подскажите решение для открытия файла со страницы материала в новой вкладке браузера.
Комментарии
https://www.drupal.org/forum/support/module-development-and-code-questio...
Я попробовал применить этот код.
<?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" в ссылке появился, но текст ссылки отображается крокозяброй.
Как исправить проблему с кодировкой?
Хм, а можно текст опубликовать из чего генериться?
В смысле текст ссылки? Или что?
Если текст ссылки кракозябрами, то да.
Описание может использоваться как текст ссылки на файл
ОпиÑание может иÑпользоватьÑÑ ÐºÐ°Ðº текÑÑ‚ ÑÑылки на файл
Используйте наследование от core/modules/file/file.module -> function template_preprocess_file_link
Зы.. возможна вообще одна строка
Как применить эту строчку кода?
Когда я пишу так
if($variables['link'] && $variables['link'] instanceof \Drupal\Core\GeneratedLink){
$variables['link'] = str_replace('<a ', '<a target="_blank" ', $variables['link']);
}
}
весь тег A выводится как текст. С атрибутом target="_blank" конечно, но как текст, а хочется, чтобы это была ссылка.
Так то же самое
$variables['link'] = str_replace('<a ', '<a target="_blank" ', $variables['link']);
}
Если нужно как объект, то обрабатывайте выше. но потом всё рано надо отрендерить в ссылку, в прототипе есть код для работы с объектов.
Мне нужно как проще.
Я это не понимаю.
Пожалуйста, помогите кодом.
По ссылке в комментах предлагается пара хаков как заставить php воспринимать фрагмент HTML без явно указанной кодировки как UTF-8.
https://www.php.net/manual/en/domdocument.loadhtml.php
Ну или поискать хук получше/пораньше, который не требует всей этой порнографии с load/saveHTML. Навскидку не подскажу какой.
На указанной вами странице много всего.
И я не понял, какой именно код имеется ввиду.
Да и как его применить мне непонятно.
Пожалуйста, приведите конкретный готовый код.