Перейти до змісту
EN — Switch to English Спробувати безкоштовно

← До огляду для розробників

Теми

Формат пакета теми: theme.json, дизайн-токени, скриншоти, збірка й обмеження.

Тема змінює вигляд магазину: кольори, шрифти й відступи, а також картку-прев’ю та скриншоти в каталозі. Вона містить лише дані. Магазин має власні шаблони вітрини й відмальовує їх дизайн-токенами теми, тому тема ніколи не містить PHP, Blade, HTML, CSS, JavaScript, SVG чи шрифтів — такий пакет не пройде перевірку, навіть якщо він підписаний.

my-theme/
  theme.json              # маніфест (поля нижче)
  README.md               # необов’язково: README.md, LICENSE, LICENSE.md, LICENSE.txt, CHANGELOG.md
  screenshots/home.png    # необов’язково: до 8 зображень PNG, JPEG або WebP, перелічених у theme.json

theme.json може містити лише ці поля:

  • schema_version — 1; package_type — "theme".
  • package_code — 2–120 символів a–z, 0–9, «.», «_», «-», починається з літери, напр. acme.theme.aurora.
  • version — SemVer теми; name і publisher — до 180 символів; description — необов’язково, до 500 символів.
  • laracart_compatibility — сумісні версії Tobto.shop у вигляді ^MAJOR.MINOR, напр. ^1.0; має збігатися з полем «Сумісність» у поданні.
  • default_tokens — рівно три групи: colors, typography, spacing; у кожній 1–32 ключі на кшталт primary чи accent.
  • colors — #rrggbb або var(--name), primary обов’язковий; typography — назви шрифтів (літери, цифри, пробіли, «,», «.», «_», «-»), body обов’язковий; spacing — число з px, rem або em, md обов’язковий.
  • preview — необов’язковий ескіз для картки в каталозі: header, logo, nav, page, hero у форматі #rrggbb і columns від 1 до 4.
  • screenshots — необов’язковий список до 8 шляхів screenshots/<name>.png|jpg|jpeg|webp; має точно збігатися з файлами в архіві.

Збирайте й підписуйте пакувальником тем (PHP 8.2+ із sodium і zlib) тією самою парою ключів, що й інші пакети:

php scripts/package_theme.php build ./my-theme dist ./private-key.pem my-key-id
php scripts/package_theme.php verify dist/<code>-<version>.zip dist/<code>-<version>.manifest.json ./public-key.pem
  • Робочий приклад — еталонна тема в laracart-extensions/themes/skeleton.
  • Пакувальник збирає детермінований ZIP і відмовляє на будь-якому файлі поза списком вище, а не пропускає його мовчки.
  • Результат: <code>-<version>.zip, .checksum і .manifest.json — theme.json плюс package_checksum і signature, тобто JSON публікації для подання.
  • ZIP до 16 МБ, до 64 файлів, кожен до 4 МБ; theme.json до 256 КБ; скриншоти перевіряються на справжній формат зображення.

Після покупки магазин завантажує тему за своєю ліцензією (поки що командою php artisan themes:install <code> <version> на сервері магазину), ще раз перевіряє підпис і архів і додає її до тем магазину неактивною. Далі власник переглядає її, налаштовує токени й активує.

Документація розробника