DEV · техническая спецификация · Revolution 5.x
Эта версия описывает контракт данных и подтверждённый маршрут значений от формы Revolution до витрины OpenCart 3.x.
| Поле UI | Имя элемента формы | Тип UI | Значения / формат | Значение по умолчанию |
|---|---|---|---|---|
| Стили | revtheme_footer_user_set[styles] | textarea, rows="20" | Строка с чистым CSS, без <style> | Пустая строка |
| Выравнивание карточек | revtheme_footer_user_set[max_height] | Два radio | Строка 1 или 0 в POST; после загрузки конфигурации трактуется как truthy/falsy | 0 / «Авто (js)» |
| Скрипты | revtheme_footer_user_set[scripts] | textarea, rows="20" | HTML-фрагмент; исполняемый JS требует <script> | Пустая строка |
Оба редактора занимают Bootstrap-колонку col-sm-11; подпись — col-sm-1. Атрибуты maxlength, pattern, required и клиентский редактор кода в исходной Twig-разметке отсутствуют.
Граница проверки валидации
Основной PHP-контроллер настроек поставляется в закодированном виде. В открытой Twig-разметке и доступном генераторе CSS отдельная проверка синтаксиса, длины или допустимых тегов не обнаружена. Это означает «валидация не подтверждена», а не гарантированное отсутствие серверной проверки.
Поля отправляются одной вложенной группой revtheme_footer_user_set. В рантайме группа читается стандартным вызовом OpenCart:
$setting_footer_user_set = $this->config->get('revtheme_footer_user_set');Контракт группы:
[
'styles' => string,
'max_height' => '0' | '1',
'scripts' => string,
]Физическое имя таблицы зависит от префикса БД OpenCart, поэтому в интеграциях нельзя жёстко использовать oc_setting. Работать следует через модель настроек OpenCart или определять активный префикс из конфигурации.
POST revtheme_footer_user_set[styles]
→ admin/controller/revolution/revstylesheet.php
→ html_entity_decode(..., ENT_QUOTES, 'UTF-8')
→ добавление в конец $tcss
→ catalog/view/theme/revolution/stylesheet/stylesheet_change.css
→ подключение на витринеПодтверждённая обработка:
$user_styles = html_entity_decode(
$revtheme_footer_user_set['styles'],
ENT_QUOTES,
'UTF-8'
);
if ($user_styles) {
$tcss .= $user_styles . "\n";
}Следствия:
stylesheet_change.css не является устойчивым: следующая генерация может перезаписать файл;При truthy-значении max_height генератор добавляет Flexbox-правила для контейнеров категорий, .product-layout.product-grid, .product-thumb, .caption и .description_options.
Проверка в генераторе выполнена как:
if ($this->request->post['revtheme_footer_user_set']['max_height']) {
$tcss .= '/* flex rules */' . "\n";
}Для POST-контракта безопасны только значения 0 и 1. Не передавайте произвольные truthy-строки: PHP также воспримет их как включённое состояние.
revtheme_footer_user_set[scripts]
→ $this->config->get('revtheme_footer_user_set')
→ html_entity_decode(..., ENT_QUOTES, 'UTF-8')
→ $data['user_scripts']
→ catalog/view/theme/revolution/template/common/footer.twig
→ сырой HTML-фрагмент в нижней части страницыOCMOD добавляет в контроллер подвала:
$setting_footer_user_set = $this->config->get('revtheme_footer_user_set');
$data['user_scripts'] = html_entity_decode(
$setting_footer_user_set['scripts'],
ENT_QUOTES,
'UTF-8'
);Twig выводит значение без собственной <script>-обёртки:
{% if (user_scripts) %}
{{ user_scripts }}
{% endif %}Поэтому значение является HTML-фрагментом, а не строкой «чистого JavaScript». Для исполнения кода теги <script> обязательны. Доверять ввод этого поля можно только администраторам с правом изменять настройки темы: поле по назначению допускает выполнение произвольного клиентского кода на всей витрине.
Пользовательский фрагмент расположен в common/footer.twig после крупного блока штатной логики подвала и до части последующей разметки Revolution. На момент исполнения обычно доступны jQuery и основные скрипты темы, но интеграция не должна полагаться на неявный порядок сторонних OCMOD-модификаций.
Рекомендуемый шаблон:
<script>
(function ($, window, document) {
'use strict';
$(function () {
// Инициализация после готовности DOM.
});
})(jQuery, window, document);
</script>Для повторной инициализации и AJAX-контента применяйте именованные события и идемпотентные операции.
В OCMOD Revolution файл stylesheet_change.css входит в список источников для создания stylesheet_min.css. Минифицированный файл формируется, только если его ещё нет. Следовательно, после изменения CSS при включённой минификации устаревший stylesheet_min.css может потребовать удаления штатным механизмом очистки кеша.
Пользовательское поле scripts выводится как HTML в подвале и не входит в найденный список файлов, из которых собирается js_min.js. Однако HTML страницы и модификаторы OpenCart могут иметь собственный кеш, а браузер — кешировать связанные внешние ресурсы.
| Изменение | Минимальная проверка |
|---|---|
styles без минификации | Время изменения и содержимое stylesheet_change.css, кеш браузера |
styles с минификацией | Перегенерация stylesheet_change.css, затем stylesheet_min.css |
max_height: 1 | Наличие Flexbox-правил в итоговом CSS |
max_height: 0 | Отсутствие генерируемого Flexbox-блока; выполнение max_height_div() в нужных представлениях |
scripts | Исходный HTML страницы, консоль и сетевые ошибки |
| Назначение | Путь | Проверенные места в 5.x |
|---|---|---|
| Форма админки | admin/view/template/revolution/revtheme.twig | 9328–9357 |
| Генератор CSS | admin/controller/revolution/revstylesheet.php | 293–295, 314–320 |
| Передача скриптов в подвал | system/revolution.ocmod.xml | 6090–6091 |
| Вывод пользовательских скриптов | catalog/view/theme/revolution/template/common/footer.twig | 775–777 |
| Итоговый CSS | catalog/view/theme/revolution/stylesheet/stylesheet_change.css | генерируемый файл |
| Минифицированный CSS | catalog/view/theme/revolution/stylesheet/stylesheet_min.css | кешируемый результат сборки |
Номера строк относятся к дистрибутиву Revolution 5.x для OpenCart 3.x и могут измениться в другой версии.
styles имеет глобальную область действия и способен менять административно не связанные компоненты витрины.scripts — намеренная точка выполнения произвольного HTML/JS; ошибки и XSS здесь являются следствием доверенного административного ввода.user_scripts или версионировать URL CSS.revtheme_footer_user_set.max_height=0 и max_height=1 на категориях и слайдерах.