Рейтинг:-1

Вставьте фрагменты PHP в контент

флаг in

Drupal 9 не имеет модуля PHP Filter в ядре. Мне нужно вставить фрагменты PHP в редактор контента (например, переменную Twig).

Есть ли способ вставить фрагменты PHP в контент Drupal?

флаг ru
Нет, нельзя, это будет *ОГРОМНАЯ* проблема с безопасностью. Вместо этого используйте [Token filter](https://www.drupal.org/project/token_filter), этот модуль позволяет использовать такие вещи, как ``
Kevin avatar
флаг in
Сделайте это с помощью токенов. Это исключительно плохая практика.
Рейтинг:1
флаг us

Модуль 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, всегда есть шанс, что введенный код вызовет проблемы.

Alfred Armstrong avatar
флаг cn
Да, даже если вы действительно доверяете пользователям, имеющим разрешение на вставку PHP, ваш сайт может быть полностью сломан из-за синтаксической ошибки.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.