Как добавить протокол в filter_protocols
В 8ке - любую ссылку не соорудить.
Например, если нужно добавить ссылку на чатик телеграм (или viber, или watsup, или любой другой с нестандартным протоколом):
<a href="tg://join?invite=invite_link">Join Group</a>
<a href="viber://add?number=phone_number">
<a href="whatsapp://send?text=message">
Такие ссылки Drupal нам сделать не даст.
Все дело в том, что производится дополнительная проверка протоколов, и допускаются только те что в "белом списке".
Дефолтный список находится в /core/core.services.yml, секция parameters, свойство filter_protocols.
Вот все что "из коробки":
- http
- https
- ftp
- news
- nntp
- tel
- telnet
- mailto
- irc
- ssh
- sftp
- webcal
- rtsp
В принципе, не плохо, но нам не хватит )))
Внести дополнительные протоколы можно 2мя способами:
1. Внести нужные значения в дефолтные сервисы (файл файл должен находится в /sites/default/services.yml, или его мультисайтовые аналоги). Если у Вас еще нет такого файла - скопируйте файл /sites/default/default.services.yml.
2. И второй вариант - программно подправить список фильтров:
// Получаем список доступных протоколов
$allowedProtocols = UrlHelper::getAllowedProtocols();
// Проверяем его, и если нужного нет ..
if (!in_array($settingType, $allowedProtocols)) {
// .. добавляем
$allowedProtocols[] = $settingType;
UrlHelper::setAllowedProtocols($allowedProtocols);
}
ЗЫ - не забываем заюзать UrlHelper:
use Drupal\Component\Utility\UrlHelper;
Вот так, не хитро, можно добавить нужный фильтр протоколов в Drupal 8+.
Успехов!
Комментарии
Увы, но этот способ не работает.
При попытке сохранить текст с новым протоколом, белый экран смерти "Непредвиденная ошибка".
Во-первых, вы не указали, что для включения services.yml нужно прописать строчку в settings.php
$settings['container_yamls'][] = __DIR__ . '/services.yml';
Во-вторых, лог ошибок ничего особого не даёт
Drupal\Component\Plugin\Exception\PluginNotFoundException: The "" entity type does not exist. in Drupal\Core\Entity\EntityTypeManager->getDefinition() (line 133 of /home/c/cs59319/public_html/core/lib/Drupal/Core/Entity/EntityTypeManager.php).
Drupal\Core\Entity\EntityStorageException: The "" entity type does not exist. in Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (line 783 of /home/c/cs59319/public_html/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php).
Во-первых, это очевидно.
Во-вторых, ошибки не относятся к протоколам.
<blockquote>Во-первых, это очевидно.</blockquote>
Нет.
Ошибки не относятся к протоколам, однако после попытки сохранить ноду с свеже-включёнными протоколами, вылезают именно они.