Редактор шаблонів

Редагування коду шаблонів

Редактор шаблонів дає змогу редагувати файли шаблонів вітрини, написані мовою 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 використовує механізм підміни шаблону під час рендерингу:

  1. Під час запиту сторінки система визначає, який файл шаблону потрібно відобразити (наприклад, catalog/view/theme/default/template/product/product.twig). Якщо в активній темі немає потрібного файлу, використовується файл із теми default.
  2. Перед рендерингом система шукає в таблиці theme запис, що відповідає поточному магазину, темі та шляху шаблону.
  3. Якщо такий запис є, замість вмісту файлу використовується збережений код.
  4. Якщо запису немає, відображається оригінальний файл шаблону.

Окремого перемикача «увімкнено/вимкнено» для перевизначення в 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. Створення перевизначення шаблону#

  1. Перейдіть до Дизайн → Редактор шаблонів.
  2. У списку Магазин оберіть магазин («За замовчуванням» або інший).
  3. У блоці Шаблон відкрийте потрібну папку та клацніть файл .twig.
  4. Внесіть зміни в код у редакторі.
  5. Натисніть Зберегти.

Швидке завантаження: під час вибору файлу редактор автоматично завантажує поточний код шаблону — збережене перевизначення, якщо воно є, або оригінальний файл.

Крок 2. Редагування наявного перевизначення#

  1. У таблиці Історія шаблону натисніть кнопку Редагувати навпроти потрібного запису.
  2. Змініть код.
  3. Натисніть Зберегти.
Обережно

Збереження змін одразу впливає на робочу вітрину. Якщо хочете протестувати зміни окремо, робіть це на тестовій копії магазину.

Крок 3. Тимчасове скасування перевизначення#

Окремого перемикача статусу в ocStore 3 немає. Щоб тимчасово повернути оригінальний шаблон:

  1. Скопіюйте код перевизначення в безпечне місце (наприклад, у текстовий файл).
  2. У таблиці Історія шаблону натисніть Видалити навпроти запису.
  3. Щоб повернути зміни, відкрийте файл знову, вставте збережений код і натисніть Зберегти.

Крок 4. Повернення до оригінального шаблону#

  1. У таблиці Історія шаблону знайдіть потрібний запис.
  2. Натисніть Видалити — після цього вітрина знову використовуватиме оригінальний файл.
  3. Або відкрийте файл, натисніть Очистити, щоб завантажити оригінальний код із диска, і натисніть Зберегти.

Попередження та обмеження#

Критичні попередження
  • Лише в базі даних: перевизначення зберігаються в базі даних. Під час перенесення магазину переконайтеся, що таблиця theme потрапила до резервної копії.
  • Немає блокування файлів: кілька адміністраторів можуть редагувати той самий шаблон одночасно; зберігається версія, збережена останньою. Узгоджуйте роботу з командою.
  • Оновлення теми та модулів: перевизначення зберігає повну копію коду шаблону. Після оновлення теми чи модуля збережений код може застаріти й перестати працювати з новою версією — переглядайте перевизначення після оновлень.
  • Зміна теми: перевизначення прив'язане до теми; якщо призначити магазину іншу тему, перевизначення старої теми перестануть діяти.
  • Синтаксичні помилки Twig: помилка в коді може спричинити білий екран або зламану верстку. Для діагностики ввімкніть Показувати помилки (Система → Налаштування, вкладка Сервер).
  • Кеш: якщо ввімкнено кешування шаблонів, зміни можуть з'явитися не одразу. Після збереження очистіть кеш.

Усунення несправностей#

Зміни шаблону не видно

Проблема: перевизначення збережено, але вітрина показує оригінальний шаблон

Кроки діагностики:

  1. Запис в історії: переконайтеся, що перевизначення є в таблиці Історія шаблону для потрібного магазину.
  2. Кеш: очистіть кеш у Налаштуваннях розробника — кнопка із шестернею на Панелі стану адмін-панелі.
  3. Кеш браузера: примусово оновіть сторінку вітрини (Ctrl+F5). Якщо сайт працює через CDN (наприклад, Cloudflare), очистіть і його кеш.
  4. Відповідність шляху: переконайтеся, що Шлях перевизначення точно відповідає шаблону, який відображається, а тема — активній темі магазину.

Швидкі рішення:

  • Збережіть перевизначення ще раз.
  • Тимчасово вимкніть кешування шаблонів у Налаштуваннях розробника.
  • Перевірте консоль браузера на помилки JavaScript.
Синтаксичні помилки Twig

Проблема: білий екран або повідомлення про помилку після збереження

Кроки діагностики:

  1. Виведення помилок: увімкніть Показувати помилки в Система → Налаштування, вкладка Сервер, щоб побачити докладне повідомлення. Також перевірте Система → Обслуговування → Журнал помилок.
  2. Перевірка синтаксису: шукайте відсутні {% endfor %}, {% endif %} або незакриті {{ }}.
  3. Імена змінних: переконайтеся, що імена змінних збігаються з тими, що передає контролер.

Швидкі рішення:

  • Видаліть перевизначення з історії, щоб повернути оригінальний шаблон, і вносьте зміни меншими частинами.
  • Перевірте синтаксис за допомогою онлайн-валідатора Twig.

Після діагностики на робочому сайті знову вимкніть Показувати помилки.

Зламана верстка після змін

Проблема: верстка вітрини спотворена

Можливі причини:

  • Відсутні HTML-теги (наприклад, незакритий <div>).
  • Неправильні CSS-класи.
  • Конфлікти JavaScript.
  • Код перевизначення видаляє важливу розмітку.

Рішення:

  1. Порівняйте з оригіналом: відкрийте оригінальний файл .twig (кнопка Очистити в редакторі) і порівняйте зі своїм кодом.
  2. Інструменти розробника: скористайтеся інспектором браузера, щоб знайти відсутні або зламані елементи.
  3. Поступове повернення: прибирайте частини свого коду, доки верстка не відновиться, і так знайдіть проблемний фрагмент.
Проблеми з перевизначеннями в кількох магазинах

Проблема: перевизначення працює в одному магазині, але не працює в іншому

Кроки діагностики:

  1. Вибір магазину: переконайтеся, що перевизначення збережено для потрібного магазину (колонка Магазин в історії).
  2. Тема магазину: перевизначення прив'язане до теми. Якщо магазини використовують різні теми, перевизначення однієї теми не діє для іншої.
  3. Наявність шаблону: переконайтеся, що файл шаблону існує в темі цього магазину.

Швидкі рішення:

  • Створіть окреме перевизначення для кожного магазину, якому потрібні зміни.
Розширена розробка тем

Для складних змін, що виходять за межі простих перевизначень:

  • Створіть повноцінну власну тему в catalog/view/theme/yourtheme/
  • Вносьте зміни на рівні файлів теми
  • Використовуйте модифікатори (OCMOD) або розробіть власні модулі з власними шаблонами
Сторінку перекладено й адаптовано для ocStore з офіційної документації OpenCart. Ліцензія — GNU GPL v3.