lamapixel
0%
E-commerce · 7 min читання

Коли шаблони виходять з-під контролю: 323 шаблони на 193 структури

Тема після чотирьох років правок: 323 шаблони на 193 структури, 723 вимкнені секції і мертвий код. Як це розпізнати і що робити замість цього.

Коли шаблони виходять з-під контролю: 323 шаблони на 193 структури

Ми розібрали тему Online Store 2.0 одного магазину, який давно ведемо, після чотирьох років правок кількома підрядниками. На диску вона займала 807 файлів і 18 МБ. Цікавіша, втім, інша пара чисел: 323 шаблони у форматі JSON описували лише 193 різні структури (власний розбір локальної копії теми, 27.08.2026).

Ці сто тридцять зайвих шаблонів з'явилися не помилково. Вони з'явилися тому, що разову справу раз по раз вирішували постійним способом - і це хвороба, яку можна виміряти раніше, ніж вона проявиться в ціні кожної наступної правки.

Структура, а не файл: як це рахується

Структура шаблону - це набір типів секцій, увімкнених у шаблоні. Два шаблони з однаковою структурою роблять те саме і відрізняються лише налаштуваннями: зображенням, заголовком, кольором.

Коли структур приблизно стільки ж, скільки файлів, тема в порядку - кожен шаблон описує свій тип сторінки. Коли структур помітно менше, це сигнал, що контент складають у шаблони замість даних.

Найясніший випадок із розбору: 67 шаблонів категорій мали абсолютно однакову трійку секцій і відрізнялися чотирма значеннями - зображенням для десктопа, зображенням для мобільного, заголовком і його кольором.

Банер зробили шаблоном замість поля в адмінці

У цих 67 файлів одна причина, і це рішення, а не недбалість. Комусь знадобилася інша шапка на одній категорії, найшвидше було скопіювати шаблон, і це спрацювало. Удруге теж. Після шістдесяти семи повторень виникла система, якої ніхто не проєктував.

Правильне рішення - один шаблон і чотири метаполя на колекції. Контент тоді належить колекції, де його може змінювати персонал магазину, а не файлу, для якого потрібен розробник.

Різниця в експлуатації конкретна. Зміна розкладки банерів у першому випадку робиться в одному файлі, у другому - у шістдесяти семи, а шістдесят сім ручних правок означають, що про три з них забудуть.

Тема після чотирьох років: що в ній насправді

Елемент теми Кількість З них мертвих
Секції 149 34
Сніпети 102 31
Шаблони 341 -
Файли в assets/ 138 15 (312 КБ)
Файли локалізацій 52 -
Theme blocks 19 -

Мертвий означає, що ім'я файлу не трапляється більше ніде в темі: секцію не викликає жоден шаблон і жоден {% section %}, сніпет - жоден render і жоден include. Це не оцінка, це пошук рядка по всій папці.

Майже кожна четверта секція і майже кожен третій сніпет були ні до чого. Плата за них береться не швидкістю - на сторінку вони не потрапляють, - а часом. Розробник, якому треба знайти місце для нової функції, проходить і ці 65 файлів.

723 вимкнені секції брешуть про те, що на сторінці

У JSON-шаблонах лишаються й секції з "disabled": true. Вони мають вигляд частини сторінки, але не відмальовуються. У розібраній темі їх було 723 з 3 192 вставлених секцій, тобто 22,6 %.

Одна знахідка з цієї групи варта окремого абзацу. Секція main-page, та сама, яка виводить текст сторінки, заданий в адмінці, була вимкнена у 136 шаблонах сторінок зі 137.

Практично це означає, що скарга «виправив текст в адмінці, а на сайті не змінилося» була не помилкою кешу і не помилкою перекладів. Це був наслідок. Перш ніж шукати причину в кеші, перевірте, чи не вимкнена секція, яка цей контент виводить.

Не перекладено 50 %? Половина цього числа ніколи не вийде у світ

Це пастка, у яку потрапляє кожен, хто рахує локалізації гуртом. Тема мала 52 файли перекладів, і грубий розрахунок давав від 50 до 58 % неперекладених рядків.

Після поділу результат має інший вигляд. У 24 файлів було рівно однакове число відсутніх ключів - 264 з 564: це відбиток локалізації, якої ніхто ніколи не чіпав, тобто мов, які магазин не публікує. У п'яти реально використовуваних мов бракувало від 8 до 12 %.

Різниця між «половина теми не перекладена» і «живим мовам бракує десятої частини» - це різниця між двома різними комерційними пропозиціями. Ніколи не надсилайте клієнтові грубе число, доки не поділите локалізації на опубліковані та складські.

Розгалужені шаблони повернуться на другому ринку

Поки в магазину одна вітрина, надлишок шаблонів дратує, але терпимий. На другій вітрині він перетворюється на витрату, якої ніхто не заклав у бюджет.

На живій парі вітрин ми заміряли, що 255 із 264 спільних шаблонів між ринками розійшлися (порівняння експортів обох тем, 26.07.2026). Сто тридцять зайвих шаблонів - це сто тридцять місць, де два магазини можуть відрізнятися, і вони відрізняються, бо кожну правку хтось має зробити двічі.

Зведення до метаполів вирішує цю проблему не лише заднім числом, а насамперед наперед: що не шаблон, те не може розійтися.

П'ять питань, за якими видно, що ви на цьому шляху

Відповідь «так» на два і більше з них означає, що тема вийшла з-під контролю і прибирання окупиться раніше, ніж наступна функція.

  1. Чи з'являється новий шаблон, коли треба змінити зображення або заголовок?
  2. Чи в templates/ файлів більше, ніж у sections/ і snippets/ разом?
  3. Чи доводиться персоналу кликати розробника через текст на категорії?
  4. Чи боїться хтось видалити файл, бо не ясно, що його викликає?
  5. Чи робиться та сама правка у двох вітринах окремо?

Найшвидший спосіб перевірити це в завантаженій копії теми:

ls templates/*.json | wc -l                 # скільки шаблонів
rg -c '"disabled": true' templates/*.json   # скільки секцій вимкнено
rg -o '"type": "[^"]+"' templates/*.json | sort -u | wc -l   # типи секцій

Якщо третє число вийде помітно меншим за перше, ви маєте справу саме з тим, про що вся ця стаття.

Що робити замість шаблонів

Порядок із чотирьох кроків, і він навмисно не закінчується видаленням. Спочатку треба з'ясувати, що живе.

  1. Виміряйте структуру, а не кількість файлів. Згрупуйте шаблони за набором типів секцій. Групи більш ніж із п'яти файлів - кандидати на об'єднання.
  2. Відділіть змінне від структурного. Зображення, заголовок, колір і посилання - у метаполя колекції або товару. У шаблон іде лише те, що змінює розкладку.
  3. Об'єднані шаблони викочуйте групами і після кожної групи перевіряйте категорії на сайті. Об'єднання сімдесяти шаблонів за раз перевірити неможливо.
  4. Мертвий код видаляйте в останню чергу, з пошуком імені по всій темі і з резервною копією. Секцію, яку ніхто не викликає, може викликати застосунок.

Theme blocks вирішують цю проблему напряму: розкладка збирається в редакторі, замість того щоб під кожен варіант заводити файл. У розібраній темі їх було 19 - тобто інструмент був доступний, просто ним не користувалися.

Чим платять за прибирання

Чесно сказати вголос. Прибирання теми не видно. Воно не додасть функції, не змінить дизайн, на скриншотах до і після те саме. Воно погано продається і саме тому відкладається, доки кожна правка не стане вдвічі дорожчою.

Воно повернеться на наступному замовленні, коли робота зробиться швидше, бо зрозуміло, що живе. Це окупність у місяцях, а не в днях, і якщо вам обіцяють інакше - рахують інший проєкт.

Друга сторона компромісу: об'єднання шаблонів забирає в персоналу можливість наклацати виняток без розробника. Метаполя - це лад, але й обмежувач, і комусь цей обмежувач заважатиме.

Ми приймаємо теми після інших підрядників

Надішліть нам адресу магазину або експорт теми. Повернемо число шаблонів проти числа структур, список мертвих секцій і сніпетів та оцінку, скільки з цього можна об'єднати без втручання у зовнішній вигляд.

Що ми на Shopify будуємо і що перевіряємо під час приймання магазину, описано на сторінці розробки інтернет-магазину. Якщо вас більше хвилює швидкість, почніть зі статті про те, чому швидкий Shopify гальмує, і з аудиту застосунків.

Напишіть на info@lamapixel.com або зателефонуйте +420 775 599 009.

Потрібна допомога?

Напишіть нам - разом знайдемо рішення.

Призначити консультацію →
Unikátní šance

Ještě váháte?

Napište nám - konzultace a kalkulace jsou zcela zdarma a k ničemu vás nezavazují.

A když se ozvete teď, přibalíme bonus až 10 000 Kč na rozjezd vašeho projektu.
Nabídka vyprší za:
10:00
Nezapomeňte uvést kód:
LAMA10
Asistentka
Zeptat se na cokoliv →
Odpovídáme do 24 hodin. Bez spamu, bez otravných callů.