Редактор шаблонів
Редактор шаблонів дає змогу редагувати файли шаблонів вітрини, написані мовою Twig, прямо з адмін-панелі — без FTP і без доступу до файлів сервера.
Відеоурок#
Відео (англійською, OpenCart 4): https://www.youtube.com/watch?v=68Irl6ecdMQ
Вступ#
Редактор шаблонів (Дизайн → Редактор шаблонів) — це веб-інтерфейс для редагування файлів шаблонів магазину з адмін-панелі ocStore. Він працює з шаблонами Twig і дає змогу змінювати HTML-структуру, додавати власний код і налаштовувати зовнішній вигляд магазину без FTP-доступу. Змінений код не записується у файли на диску, а зберігається в базі даних (таблиця theme), тому оригінальні файли залишаються недоторканими.
Інтерфейс редактора#

Сторінка редактора складається з трьох частин:
- Магазин (ліворуч угорі) — випадний список для вибору магазину: «За замовчуванням» або інший магазин у конфігурації з кількома магазинами. Для кожного магазину використовується шаблон (тема), призначений йому в налаштуваннях.
- Шаблон (ліворуч) — дерево папок і файлів
.twigактивного шаблону магазину. Клацніть папку, щоб відкрити її, або файл — щоб завантажити його в редактор. Кнопка Назад повертає на рівень вище. - Історія шаблону (праворуч) — таблиця всіх змінених файлів, збережених у базі даних. Коли відкрито файл, на цьому місці з'являється редактор коду; кожен відкритий файл відкривається в окремій вкладці.
Таблиця Історія шаблону містить колонки:
- Магазин — магазин, до якого застосовується зміна
- Шлях — шлях до шаблону (наприклад,
common/header,product/product) - Шаблон — тема, для якої збережено зміну (наприклад,
default) - Дата додавання — коли зміну збережено
- Дія — кнопки Редагувати (відкрити збережений код у редакторі) та Видалити (видалити зміну з бази даних)
Зміни, зроблені в редакторі шаблонів, зберігаються в базі даних, а не у файлах .twig. Оригінальний файл шаблону на диску залишається без змін, тому експериментувати безпечно: щоб повернутися до оригіналу, достатньо видалити запис з історії.
Редагування файлу#
Коли ви відкриваєте файл, у вкладці з'являється редактор коду (CodeMirror) з підсвічуванням синтаксису, нумерацією рядків і темою оформлення Monokai. Під редактором є дві кнопки:
- Зберегти — зберегти поточний код як перевизначення цього шаблону для обраного магазину
- Очистити — завантажити в редактор оригінальний вміст файлу з диска (збережене перевизначення при цьому не видаляється, доки ви не натиснете Зберегти)
Зберігати можна лише файли з розширенням .twig.
Як працюють перевизначення шаблонів#
ocStore використовує механізм підміни шаблону під час рендерингу:
- Під час запиту сторінки система визначає, який файл шаблону потрібно відобразити (наприклад,
catalog/view/theme/default/template/product/product.twig). Якщо в активній темі немає потрібного файлу, використовується файл із темиdefault. - Перед рендерингом система шукає в таблиці
themeзапис, що відповідає поточному магазину, темі та шляху шаблону. - Якщо такий запис є, замість вмісту файлу використовується збережений код.
- Якщо запису немає, відображається оригінальний файл шаблону.
Окремого перемикача «увімкнено/вимкнено» для перевизначення в ocStore 3 немає: перевизначення діє, доки існує запис в історії.
Цей механізм дає змогу змінювати будь-який шаблон вітрини, не торкаючись файлів, тож зміни легко скасувати.
Структура шаблонів#
| Тип шаблонів | Розташування | Опис |
|---|---|---|
| Шаблони вітрини | catalog/view/theme/<тема>/template/ |
Шаблони магазину для покупців (тема default та встановлені теми) |
| Шаблони адмін-панелі | admin/view/template/ |
Шаблони адміністративної панелі |
Редактор шаблонів працює лише з шаблонами вітрини активної теми магазину (з резервним переходом на тему default). Шаблони адмін-панелі в ньому редагувати не можна. Шаблони модулів вітрини розташовані в тій самій теці теми (template/extension/...), тож їх теж можна змінювати.
Основи мови шаблонів Twig#
ocStore 3 використовує Twig як шаблонізатор. Нижче — основні поняття, потрібні для редагування шаблонів.
Змінні та виведення
{# Display a variable #}
<h1>{{ heading_title }}</h1>
<p>{{ description }}</p>
{# Display with filters #}
<p>{{ text|upper }}</p>
<p>{{ price|number_format(2) }}</p>
Поширені змінні:
{{ heading_title }}– заголовок сторінки{{ description }}– опис сторінки{{ products }}– масив товарів{{ currency }}– інформація про валюту
Набір доступних змінних залежить від контролера, який відображає шаблон.
Керуючі конструкції
{# If statement #}
{% if products %}
<ul>
{% for product in products %}
<li>{{ product.name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No products found.</p>
{% endif %}
{# For loops #}
{% for category in categories %}
<a href="{{ category.href }}">{{ category.name }}</a>
{% endfor %}Підключення та наслідування
{# Include another template #}
{% include 'common/header.twig' %}
{# Extend a base template #}
{% extends 'common/base.twig' %}
{# Override blocks #}
{% block content %}
Custom content here
{% endblock %}
Примітка: стандартні шаблони ocStore 3 не використовують наслідування (extends): шапка, футер і колонки передаються контролером як готові змінні ({{ header }}, {{ footer }}, {{ column_left }} тощо).
Найкращі практики#
Стратегія редагування шаблонів
Порядок роботи
1. Спочатку тестуйте на копії. Завжди перевіряйте зміни на тестовому або staging-магазині, перш ніж застосовувати їх на робочому сайті.
2. Вносьте невеликі зміни поступово. Редагуйте один шаблон за раз і перевіряйте, що кожна зміна працює як слід.
3. Документуйте зміни. Записуйте, які шаблони ви змінили, що саме і навіщо. Це допоможе під час пошуку несправностей та оновлення.
4. Використовуйте контроль версій. Якщо змін багато, зберігайте копії коду перевизначень, наприклад у Git.
5. Робіть резервні копії. Перед і після значних змін робіть резервну копію перевизначень (експортуйте таблицю theme).
Безпека
Безпечне редагування шаблонів
1. Екрануйте дані користувачів. Завжди екрануйте вміст, створений користувачами, фільтром Twig |escape, щоб запобігти XSS-атакам.
2. Не вставляйте PHP-код. Шаблони Twig не призначені для PHP-коду. Використовуйте вбудовані функції та фільтри Twig.
3. Обмежте доступ. Надавайте доступ до редактора шаблонів (design/theme) лише довіреним адміністраторам через Система → Користувачі → Групи користувачів.
4. Перевіряйте код. Переглядайте зміни шаблонів на предмет вразливостей, особливо коли додаєте власний JavaScript або обробку форм.
Попередження: уникайте {{ variable|raw }}, якщо ви не повністю довіряєте джерелу змінної. Це може зробити магазин вразливим до міжсайтового скриптингу (XSS).
Кілька магазинів і мов
Перевизначення для різних магазинів
Окремі перевизначення для магазинів. У конфігурації з кількома магазинами для кожного магазину можна створити власні перевизначення: просто оберіть потрібний магазин у списку Магазин перед редагуванням.
Мови. Перевизначення шаблонів не залежать від мови: вони змінюють структуру шаблону, а не тексти. Щоб змінити тексти, скористайтеся Редактором перекладу (Дизайн → Редактор перекладу).
Поведінка за відсутності перевизначення. Перевизначення діє лише для того магазину, для якого його збережено. Якщо для магазину перевизначення немає, використовується оригінальний файл шаблону — перевизначення магазину «За замовчуванням» на інші магазини не поширюються.
Типові завдання#
Крок 1. Створення перевизначення шаблону#
- Перейдіть до Дизайн → Редактор шаблонів.
- У списку Магазин оберіть магазин («За замовчуванням» або інший).
- У блоці Шаблон відкрийте потрібну папку та клацніть файл
.twig. - Внесіть зміни в код у редакторі.
- Натисніть Зберегти.
Швидке завантаження: під час вибору файлу редактор автоматично завантажує поточний код шаблону — збережене перевизначення, якщо воно є, або оригінальний файл.
Крок 2. Редагування наявного перевизначення#
- У таблиці Історія шаблону натисніть кнопку Редагувати навпроти потрібного запису.
- Змініть код.
- Натисніть Зберегти.
Збереження змін одразу впливає на робочу вітрину. Якщо хочете протестувати зміни окремо, робіть це на тестовій копії магазину.
Крок 3. Тимчасове скасування перевизначення#
Окремого перемикача статусу в ocStore 3 немає. Щоб тимчасово повернути оригінальний шаблон:
- Скопіюйте код перевизначення в безпечне місце (наприклад, у текстовий файл).
- У таблиці Історія шаблону натисніть Видалити навпроти запису.
- Щоб повернути зміни, відкрийте файл знову, вставте збережений код і натисніть Зберегти.
Крок 4. Повернення до оригінального шаблону#
- У таблиці Історія шаблону знайдіть потрібний запис.
- Натисніть Видалити — після цього вітрина знову використовуватиме оригінальний файл.
- Або відкрийте файл, натисніть Очистити, щоб завантажити оригінальний код із диска, і натисніть Зберегти.
Попередження та обмеження#
- Лише в базі даних: перевизначення зберігаються в базі даних. Під час перенесення магазину переконайтеся, що таблиця
themeпотрапила до резервної копії. - Немає блокування файлів: кілька адміністраторів можуть редагувати той самий шаблон одночасно; зберігається версія, збережена останньою. Узгоджуйте роботу з командою.
- Оновлення теми та модулів: перевизначення зберігає повну копію коду шаблону. Після оновлення теми чи модуля збережений код може застаріти й перестати працювати з новою версією — переглядайте перевизначення після оновлень.
- Зміна теми: перевизначення прив'язане до теми; якщо призначити магазину іншу тему, перевизначення старої теми перестануть діяти.
- Синтаксичні помилки Twig: помилка в коді може спричинити білий екран або зламану верстку. Для діагностики ввімкніть Показувати помилки (Система → Налаштування, вкладка Сервер).
- Кеш: якщо ввімкнено кешування шаблонів, зміни можуть з'явитися не одразу. Після збереження очистіть кеш.
Усунення несправностей#
Зміни шаблону не видно
Проблема: перевизначення збережено, але вітрина показує оригінальний шаблон
Кроки діагностики:
- Запис в історії: переконайтеся, що перевизначення є в таблиці Історія шаблону для потрібного магазину.
- Кеш: очистіть кеш у Налаштуваннях розробника — кнопка із шестернею на Панелі стану адмін-панелі.
- Кеш браузера: примусово оновіть сторінку вітрини (Ctrl+F5). Якщо сайт працює через CDN (наприклад, Cloudflare), очистіть і його кеш.
- Відповідність шляху: переконайтеся, що Шлях перевизначення точно відповідає шаблону, який відображається, а тема — активній темі магазину.
Швидкі рішення:
- Збережіть перевизначення ще раз.
- Тимчасово вимкніть кешування шаблонів у Налаштуваннях розробника.
- Перевірте консоль браузера на помилки JavaScript.
Синтаксичні помилки Twig
Проблема: білий екран або повідомлення про помилку після збереження
Кроки діагностики:
- Виведення помилок: увімкніть Показувати помилки в Система → Налаштування, вкладка Сервер, щоб побачити докладне повідомлення. Також перевірте Система → Обслуговування → Журнал помилок.
- Перевірка синтаксису: шукайте відсутні
{% endfor %},{% endif %}або незакриті{{ }}. - Імена змінних: переконайтеся, що імена змінних збігаються з тими, що передає контролер.
Швидкі рішення:
- Видаліть перевизначення з історії, щоб повернути оригінальний шаблон, і вносьте зміни меншими частинами.
- Перевірте синтаксис за допомогою онлайн-валідатора Twig.
Після діагностики на робочому сайті знову вимкніть Показувати помилки.
Зламана верстка після змін
Проблема: верстка вітрини спотворена
Можливі причини:
- Відсутні HTML-теги (наприклад, незакритий
<div>). - Неправильні CSS-класи.
- Конфлікти JavaScript.
- Код перевизначення видаляє важливу розмітку.
Рішення:
- Порівняйте з оригіналом: відкрийте оригінальний файл
.twig(кнопка Очистити в редакторі) і порівняйте зі своїм кодом. - Інструменти розробника: скористайтеся інспектором браузера, щоб знайти відсутні або зламані елементи.
- Поступове повернення: прибирайте частини свого коду, доки верстка не відновиться, і так знайдіть проблемний фрагмент.
Проблеми з перевизначеннями в кількох магазинах
Проблема: перевизначення працює в одному магазині, але не працює в іншому
Кроки діагностики:
- Вибір магазину: переконайтеся, що перевизначення збережено для потрібного магазину (колонка Магазин в історії).
- Тема магазину: перевизначення прив'язане до теми. Якщо магазини використовують різні теми, перевизначення однієї теми не діє для іншої.
- Наявність шаблону: переконайтеся, що файл шаблону існує в темі цього магазину.
Швидкі рішення:
- Створіть окреме перевизначення для кожного магазину, якому потрібні зміни.
Для складних змін, що виходять за межі простих перевизначень:
- Створіть повноцінну власну тему в
catalog/view/theme/yourtheme/ - Вносьте зміни на рівні файлів теми
- Використовуйте модифікатори (OCMOD) або розробіть власні модулі з власними шаблонами