Теми
Формат пакета теми: 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> на сервері магазину), ще раз перевіряє підпис і архів і додає її до тем магазину неактивною. Далі власник переглядає її, налаштовує токени й активує.