Как разрешить скрипты в TinyMCE на CMS-страницах Prestashop 9
При редактировании контента в админке Prestashop 9 пользователи часто сталкиваются с проблемой: редактор TinyMCE вырезает или блокирует вставку JavaScript, CSS и других скриптов. Это связано с обновлённой системой безопасности и новым API редактора, который в версии 9 значительно отличается от Prestashop 1.5. В этой статье мы разберём несколько способов отключить фильтрацию кода и разрешить загрузку скриптов в CMS-страницах.
Почему TinyMCE блокирует скрипты в Prestashop 9
Начиная с версии 8.x, Prestashop использует обновлённую версию TinyMCE, которая по умолчанию применяет строгую валидацию входящего HTML. Редактор удаляет теги script, style, iframe и атрибуты on* для предотвращения XSS-атак. В Prestashop 9 эта защита усилена, поэтому старые методы отключения фильтрации (через конфиги или модули) перестали работать. Чтобы обойти ограничение, нужно изменить настройки редактора на уровне ядра или через переопределение.
Способ 1: Отключение валидации в конфигурации TinyMCE
Первый и самый безопасный метод - отключить проверку кода непосредственно в параметрах редактора. Для этого откройте файл /admin/themes/default/template/controllers/cms_content/helpers/form/form.tpl (путь может отличаться в зависимости от темы админки). Найдите строку, где инициализируется TinyMCE, и добавьте параметр valid_elements: '*[*]', который разрешает все теги и атрибуты. Пример:
tinyMCE.init({
selector: 'textarea.rte',
valid_elements: '*[*]',
extended_valid_elements: 'script[src|type|async|defer],iframe[src|width|height|frameborder]'
});После внесения правок обязательно очистите кэш Prestashop в разделе «Настройки → Производительность» и кэш браузера.
Способ 2: Изменение параметров через модуль переопределения
Если вы не хотите редактировать файлы ядра, создайте собственный модуль или используйте хуки. В Prestashop 9 доступен хук actionAdminControllerSetMedia, через который можно добавить свой JavaScript, переопределяющий настройки TinyMCE. Пример кода для вставки в модуль:
public function hookActionAdminControllerSetMedia() {
$this->context->controller->addJS($this->_path.'views/js/tinymce_custom.js');
}В файле tinymce_custom.js пропишите параметры, аналогичные первому способу, но с дополнительной проверкой на существование редактора. Этот метод сохраняет изменения при обновлении CMS.
Способ 3: Отключение проверки кода через базу данных
В Prestashop 9 часть настроек редактора хранится в таблице ps_configuration. Найдите запись с именем PS_TINYMCE_CONFIG и измените её значение, добавив параметры valid_elements и extended_valid_elements. Учтите, что после обновления CMS эта запись может быть перезаписана, поэтому рекомендуется комбинировать этот способ с переопределением через модуль.
Особенности для разных версий Prestashop
В Prestashop 1.5-1.6 достаточно было отключить опцию «Использовать HTMLPurifier» в настройках. В версии 9 такой опции нет - фильтрация встроена в сам редактор. Если вы обновлялись с 8.x до 9, проверьте, не остались ли старые модули, которые могли конфликтовать с TinyMCE. Рекомендуется отключить все сторонние редакторы и использовать только встроенный.
Как проверить, что скрипты работают
После внесения изменений создайте новую CMS-страницу в админке (например, «О нас»), переключитесь в режим исходного кода (кнопка «Source code») и вставьте тестовый скрипт, например <script>alert('test')</script>. Сохраните страницу и откройте её на фронтенде. Если скрипт выполнился - настройка прошла успешно. Если нет - проверьте кэш и права на файлы.
Безопасность при включении скриптов
Разрешая скрипты на CMS-страницах, вы снижаете защиту от XSS-атак. Убедитесь, что доступ к редактированию контента есть только у доверенных администраторов. Используйте Content Security Policy (CSP) на уровне сервера, чтобы ограничить выполнение скриптов только с проверенных источников. В Prestashop 9 можно добавить CSP через файл .htaccess или конфигурацию веб-сервера.