Модуль PHP Filter был удален из ядра Drupal, так как неправильное его использование может привести к проблемам с безопасностью. Проблемы безопасности были смягчены тем фактом, что только пользователи с использовать PHP для настроек разрешение может использовать входной фильтр, но это не очищает код, введенный редакторами. Если бы тогда разрешение было безоговорочно дано каждому редактору, то такого разрешения как бы не существовало.
Основной модуль Drupal теперь доступен как PHP модуль, но я бы не стал его использовать.
Я предпочел бы сделать то, что Худри предложил, и используйте Фильтр токенов модуль. С помощью этого модуля и добавления его входного фильтра к формату ввода, используемому для узлов, пользователь может ввести токен, который будет заменен его значением. Вместо фрагментов PHP я бы реализовал пользовательские токены, которые заменяются значением, возвращаемым из кода PHP, выполненного в крюк_токены ()
, один из хуков, необходимых модулям, которые хотят реализовать пользовательские токены.
функция mymodule_token_info() {
$ тип = [
'name' => t('Пользовательские токены'),
'description' => t('Пользовательские токены для использования в поле тела узла.'),
];
// Пользовательские глобальные токены.
$ обычай ['обычай01'] = [
'имя' => т ("Пользовательский 01"),
];
$ обычай ['обычай02'] = [
'имя' => т ("Пользовательский 02"),
];
возвращаться [
'типы' => [
'Пользовательский' => $ тип,
],
'токены' => [
'обычай' => $ обычай,
],
];
}
function mymodule_tokens($type, $tokens, массив $data, массив $options, BubbleableMetadata $bubbleable_metadata) {
$ замены = [];
если ($ type == 'пользовательский') {
foreach (токены $ as $name => $original) {
если ($ имя == 'custom01') {
$replacements[$original] = // Установить значение токена custom01.
}
elseif ($name == 'custom02') {
$replacements[$original] = // Установите значение токена custom02.
}
}
}
вернуть $ замены;
}
крюк_токены ()
также может возвращать HTML-разметку, используемую для поля тела узла. $bubbleable_metadata
можно использовать для добавления зависимостей кеша.
Этот метод более безопасен, поскольку не позволяет пользователям вводить произвольный PHP-код, который потенциально также может изменить пароль для любой учетной записи пользователя, удалить все содержимое сайта или отправить информацию о пользователях на внешние сайты.
Даже если только доверенным пользователям разрешено использовать входной фильтр PHP, всегда есть шанс, что введенный код вызовет проблемы.