CartiX
Знімки екрана скоро з’являться.
Докладний опис ще готується.
Тема «Базовая» (default)
Референс-структура темы витрины CartiX (Smarty 5, шаблоны .html).
Структура
themes/default/
├── theme.json # манифест: имя, версия, СХЕМА настроек
├── theme.png # превью для галереи тем
├── templates/ # Smarty-шаблоны страниц
│ ├── layout.html # каркас (наследуется всеми через {extends})
│ ├── home.html # главная
│ ├── category.html # листинг категории
│ ├── product.html # карточка товара
│ ├── list.html # страница списка товаров (is_page)
│ ├── brand.html # страница бренда
│ ├── tag.html # страница тега
│ ├── page.html # CMS-страница
│ ├── search.html # результаты поиска
│ ├── cart.html # корзина (этап 3)
│ ├── checkout.html # чекаут (этап 3)
│ ├── partials/ # переиспользуемые куски
│ │ ├── header.html footer.html product-card.html
│ │ ├── breadcrumbs.html pagination.html filters.html
│ │ └── (sort-bar, sku-options, services, product-features …)
│ └── blocks/ # контент-блоки
│ ├── hero.html
│ └── product-list.html # вывод подборки (getList)
├── assets/ # статика темы
│ ├── css/theme.css
│ ├── js/theme.js
│ ├── images/
│ └── fonts/
└── locale/ # переводы строк темы
├── ru.json uk.json en.json
Ключевые механизмы
- Клонирование: тема копируется целиком в новую папку (полная независимая копия, без наследования). Правки клона ни на что не влияют; обновления базовой темы в клон не переносятся — это самостоятельная тема.
- Настройки (schema-driven): описаны в
theme.json → settings.groups, редактор строит форму автоматически. Значения хранятся per-витрина, попадают в шаблоны как$theme.*. - Функции тем:
{url},{trans},{money}(готовы),{getList}(вывод подборок),{hook}(точки расширения для плагинов — работают нативно на Smarty). - Данные: контроллер витрины собирает контекст (товар/категория/список/фильтры) и передаёт в шаблон. Логику в шаблонах не пишем — только вывод.
- Безопасность: песочница Smarty (без
{php}, автоэкранирование HTML).
Точки расширения (hooks)
storefront.head, storefront.body.start/end, header.end, footer.*,
home.after.lists, product.after.buy, product.bottom, product.card.footer,
catalog.filters.end, checkout.fields. Плагин подписывается — вставляет свой HTML.
Вибрані замовлення видно завжди
У вікні «На кілька замовлень» позначки переживають гортання та зміну фільтра — так і збирають пачку. Але варто було змінити статус, і позначені замовлення зникали з екрана: друкувалося більше, ніж було видно.
Тепер вибрані замовлення показані рядком над списком. Кожне прибирається натисканням, поруч — «Зняти всі».
Вибір замовлень для доповнень
Вікно «На кілька замовлень», яким магазин друкує бланки пачкою, тепер можуть відкривати й доповнення. Кнопка доповнення в замовленні запитує, за якими замовленнями працювати: те замовлення, з якого її натиснули, позначене одразу, до нього додаються решта. Такі кнопки зʼявилися й у шапці списку замовлень, поруч із друком бланків.
Першим цим користується доповнення «Цінники та етикетки»: наклейки на денне відвантаження друкуються однією пачкою. У виборі видно лише ті замовлення, які співробітнику доступні.
Штрихкод товару та основа для друку етикеток
У кожного варіанта товару зʼявилося поле «Штрихкод» — раніше код з упаковки не було де зберігати. За ним товар знаходиться пошуком нарівні з артикулом: досить піднести сканер.
У магазин закладено основу для друку ярликів та етикеток: каталог і картка товару тепер уміють показувати кнопки доповнень. Сам друк зʼявляється разом із доповненням «Цінники та етикетки» — воно встановлюється окремо з маркетплейсу.
Варіант товару підписано так, як його назвав магазин
Якщо у товару кілька артикулів без опцій покупки, перемикач варіантів тепер підписано їхніми назвами («чорний», «білий») — так, як їх назвав власник магазину. Раніше за наявності числової характеристики артикула підписи мовчки замінювалися на її значення («275 г», «290 г»). Характеристика підставляється лише там, де назв в артикулів немає.
Характеристики артикула та вибір варіанта в картці
Характеристику тепер можна задати не лише товару, а й кожному артикулу — число, текст, дату або «так/ні». Раніше прапорець «задати значення для артикулів» працював тільки для характеристик зі списком значень: числову з ним магазин зберігав, але задати її артикулу не було де.
Товар із кількома артикулами, які не різняться опціями покупки, тепер дає покупцеві вибір: перемикач збирається за числовою характеристикою артикула («10 таблеток» / «30 таблеток»), а якщо її немає — за назвами артикулів. Раніше вибору не було зовсім і товар завжди продавався основним артикулом. Власні характеристики артикула видно в картці, і вони змінюються разом із обраним варіантом.
Бали видно там, де на них дивляться
У картці замовлення з’явився рядок «Оплачено балами» — раніше менеджер бачив підсумок і не розумів, з чого він склався. У картці покупця тепер є рахунок: залишок, історія рухів із посиланнями на замовлення та термінами згорання, а також нарахування й списання вручну — за затримку, за відгук, як вибачення. Кожен такий рух підписано співробітником.
Оформлення замовлення
Набрана покупцем сума балів одразу перераховує замовлення, а не лише кнопка «Усі». Обидві правки — з живої перевірки: поле приймало число, а сума лишалася попередньою.
Бонусні бали покупців
У покупця з’явився бонусний рахунок: він бачить залишок та історію в кабінеті й оплачує балами частину замовлення просто в оформленні. Списане показано окремим рядком у підсумках, а скасоване замовлення повертає бали назад.
Скільки нараховувати й скільки дозволяти витрачати — задає доповнення «Бонуси та лояльність». Магазин же стежить за тим, щоб балами не можна було заплатити більше, ніж їх є, і щоб сума замовлення сходилася до копійки.
Дрібниці
Журнал замовлення більше не підписує співробітником дію покупця.
Сповіщення у браузері та магазин на телефоні
Магазин отримав безкоштовний канал зв’язку: покупець один раз дозволяє сповіщення й дізнається про замовлення, надходження товару та знижку навіть із закритим сайтом. Сповіщення стають поруч із поштою та SMS — ті самі події, ті самі тексти, той самий журнал — і ними ж можна зробити розсилку.
Тим самим доповненням вітрина стає застосунком: покупець ставить магазин на головний екран телефона.
Розсилка більше не бреше про успіх
Розсилка, у якої канал недоступний, чесно зупиняється з поясненням. Раніше вона позначалася надісланою, не надіславши жодного повідомлення. Встановлення доповнення тепер саме перезапускає обробник задач — новий канал працює одразу, а не після перезапуску сервера.
Помічник відповідає на часті запитання
Ви задаєте слова покупця й готову відповідь — магазин відповідає сам, показує відповідні товари або кличе менеджера. У листуванні видно, що відповідала не людина, тож менеджер не повторює те саме.
Замовлення просто з листування
Покупець перелічує коди товарів — магазин розпізнає їх із кількостями та пропонує покласти все одразу, а менеджеру відкриває форму замовлення з готовим складом.
Видно, що покупець уже обрав
У картці співрозмовника показано вміст його кошика — разом із самим запитанням, а не після нього. Половина запитань у чаті саме про те, що людина вже поклала.
Видно, з ким говориш
Разом із запитанням приходить картка співрозмовника: впізнаний покупець — із телефоном і покупками, гість — зі сторінкою, пристроєм і тим, звідки прийшов. Відповідати можна звичайним повідомленням, «відповісти» більше не потрібне.
Запитання з сайту приходить у Telegram
Повідомлення покупця з чату на сайті дублюється відповідальному в Telegram, а його відповідь повертається покупцеві. Відповідати можна з телефона, не заходячи в магазин.
Розділи адмінки стали однаковими
Шапка розділу, кнопки, панелі та вкладки тепер виглядають і працюють однаково всюди. Раніше кожен екран верстався окремо, і розділи потроху розходилися між собою.
Розділи доповнень — «Заявки на дзвінок», «Сповіщення про надходження», «Короткі посилання» — приведено до того ж вигляду: вміст лежить у картці розділу, добір за станом переїхав у ліву панель із лічильниками.
Пошук товарів в адмінці шукає як на вітрині
Раніше добір товару в замовленні шукав по-своєму — строго за збігом назви. Менеджер не знаходив того, що покупець на вітрині знаходив.
Тепер скрізь, де обирають товар — склад замовлення, аксесуари, добірки, подарунки, знижки, акції, розсилки — працює той самий пошук і ті самі налаштування, що й у покупця: синоніми, неправильна розкладка, латиниця та кирилиця, порядок за важливістю. У підказках зʼявилися фотографії товару. Точний артикул знаходиться завжди.
Правку замовлення переписано
- У правки зʼявилася власна адреса: посилання можна дати колезі, «назад» повертає до перегляду.
- З робочого столу «Редагувати» відкриває правку одразу — раніше доводилося натискати кнопку вдруге вже в картці.
- Ліворуч покупець, праворуч склад замовлення, під ним доставка й оплата.
- Позиція займає один рядок: кількість, ціна та сума праворуч.
- Спосіб доставки обирається списком, поля перевізника завантажуються після вибору.
Дрібниці, які помітні
- Поля вибору більше не стоять порожніми без підказки — по всій адмінці.
- У поля «Назва магазину» зʼявилося пояснення, де покупець її побачить.
- Підказку до імені списку товарів написано людською мовою.
Повтор замовлення
Менеджер відкриває нове замовлення з готовим складом попереднього — ціни й наявність перевіряються заново.
Подарунки до замовлення
Магазин уміє віддавати товар подарунком: його ціна не перераховується знижками й лишається нульовою до самого оформлення.
Товари в замовленні — за складом
Позиції замовлення сортуються так, як зручно збирати: за складом.
Сповіщення на будь-який статус замовлення
Лист або повідомлення покупцеві можна прив’язати до будь-якого статусу, включно з вашими власними.
Колонки товарів у вашому порядку
Порядок колонок у таблиці товарів лишається таким, яким ви його задали.
Замовлення пам’ятає потрібні вам поля покупця
Поля, які ви налаштували в оформленні, зберігаються в замовленні й показуються менеджеру.
Встановлення та скидання не лишають магазин без вітрини
Після встановлення й після скидання магазин лишається робочим: вітрина, тема та налаштування на місці.
Один покупець — одна картка. Телефон усюди зберігається в міжнародному вигляді, тому «0671234567» і «+380671234567» більше не вважаються різними людьми, а в полі телефону не можна залишити будь-що. Гостю з номером, на який уже є особистий кабінет, магазин пропонує увійти, а не заводить ще одну картку. Реєстрація та вхід через соцмережу підхоплюють картку людини, яка раніше купувала гостем, а правка картки в адмінці переносить телефон і пошту до її кабінету. Накопичені дублі розбираються кнопкою «Знайти дублі» в контактах: замовлення, листування та значення полів переїжджають до обраної картки.
Назви статусів замовлення тепер перекладаються мовами магазину. Покупець бачить статус в особистому кабінеті та в листах своєю мовою, а назви для кожної мови задаються в розділі «Локалізація → Статуси замовлень». Наявні назви зберігаються як основна мова магазину.
Друк одразу на кілька замовлень
Виділили замовлення на робочому столі — і друкуєте накладні чи бланки пачкою, а не по одному.
Акції з термінами знову вмикаються і вимикаються самі: завдання, яке за це відповідає, падало при кожному запуску, і завершена акція продовжувала діяти.
Лист про відновлення пароля переїхав до розділу «Сповіщення» — його текст, мова і канал тепер налаштовуються як в решти листів покупцеві.
У налаштуваннях каналу «E-mail» зʼявився перемикач «Не перевіряти сертифікат сервера»: він потрібен, якщо поштовий сервер ваш власний і сертифікат виписаний ним самим.
Перевірка пошти в діагностиці дивиться на налаштування магазину, а не на файл конфігурації, і показує ваш поштовий сервер.
Виправлено надсилання перевірочного листа з налаштувань каналу: адреса отримувача губилася під час збереження.
Посилання на магазин має охайний вигляд
У розділу своя картинка для соцмереж, у сторінки — свій опис: посилання, яким поділилися, показує те, що потрібно.
Оформлення магазину під себе
Значок вкладки завантажується просто в налаштуваннях, а не вписується адресою. Меню адмінки збирає власник: свій склад пунктів, окремі меню магазину та статей, верхнє меню в один рядок.
Исправлено: ссылка на заказ в личном кабинете покупателя вела на пустую страницу. Тема «Промо»: выровнено оформление — единый вид кнопок, одинаковая высота карточек товара, на телефоне ленты товаров листаются и видно, что их можно листать, заработала кнопка «Каталог» в нижней панели.
Реквізити продавця стали профілями: якщо вітрини торгують від різних юросіб, кожна друкує документи зі своїми даними, а під час друку можна обрати, від чийого імені виставити рахунок. Живуть вони тепер у вкладці «Реквізити» розділу «Друковані форми»; заповнене раніше переїжджає само. Номер замовлення: у магазині зберігається сам номер, а приставка на кшталт «#100» додається під час показу — тому перенесені замовлення теж із нею, а формат можна змінити будь-коли. Після переїзду нові замовлення продовжують нумерацію старого магазину. Лічильник біля пункту «Замовлення» рахує ті статуси, які ви оберете в налаштуваннях замовлень.
Виправлено перенесення категорій: у попередній версії вони не переносилися взагалі. Перевірка зв’язку з базою старого магазину більше не плутає недоступну базу з чужою — причина відмови приходить від самого сервера бази й лишається на екрані. Значення характеристик і назви категорій та товарів приїжджають заповненими всіма мовами магазину, навіть якщо старий магазин переклав не все. У робочому столі замовлень з’явилися друковані форми та кнопки доповнень — раніше вони були лише в повній картці замовлення.
Переїзд з іншої платформи більше не залежить від планувальника: перенесення йде з вікна магазину, порція за порцією, і дві порції більше не наступають одна одній на п’яти — через це раніше губилися окремі товари. Значення характеристик приїжджають заповненими всіма мовами магазину, навіть якщо старий магазин переклав лише назви. Замовлення тепер можна надрукувати: рахунок на оплату та видаткова накладна, бланки правляться в розділі «Друковані форми». Доповнення навчилися додавати свої кнопки та блоки прямо до картки замовлення.
Замовлення тепер можна надрукувати: рахунок на оплату та видаткова накладна. Бланки правляться під вашу бухгалтерію в розділі «Налаштування → Друковані форми» — з попереднім переглядом на справжньому замовленні та поверненням до заводського вигляду. Реквізити продавця задаються в «Налаштування → Реквізити». Звязування довідників під час переїзду стало зрозумілішим: блоки згорнуті, видно, що з чим звяжеться, є пошук і звязування збігів одним натисканням. Типи товарів у характеристиці позначаються списком.
Розділ «Інсталер»: магазин доповнень і тем, усе встановлене, оновлення та встановлення з файлу — тепер в одному місці. Оновлення починається одразу після натискання кнопки й більше не чекає на розклад. Перед оновленням видно, чи готовий до нього сервер, що зі встановленого може перестати працювати та чи є свіжа резервна копія. Налаштування встановлених плагінів переїхали до власного розділу «Плагіни».
Обновление начинается сразу по кнопке, а не по расписанию, и показывает честный ход установки. Названия статусов старого магазина при переезде.
Две темы оформления со светлым и тёмным видом. Варианты покупки прямо в каталоге: покупатель выбирает цвет или объём памяти на карточке, меняются фото, цена и наличие. Доп-услуги товара доходят до корзины. Раздел «Акции»: страница акции со сроком и скидкой на подборку. Темы ставятся из маркетплейса. Исправлен переезд с Webasyst напрямую из базы.
Перенесення замовлень більше не зупиняється на десятитисячному й не видає себе за завершене.
Старий магазин на частині номерів відповідає неправильно: на «замовлення після 10000» віддає замовлення з початку, а кількість записів вигадує. Тепер замовлення забираються за лічбою записів, кожна порція звіряється, а в разі невдачі перенесення зупиняється з причиною.
Назви варіантів покупки тепер перекладаються. Раніше в товару, категорії та характеристики переклад був, а у варіанта («40 Вт», «Синій», «XL») — ні.
Підсумки покупок магазин дораховує сам: якщо черга завдань спинялася, розділ «Покупці» міг показати нулі в усіх.
Резервні копії бази даних працюють на хостингах, які забороняють запуск допоміжних програм.
Діагностика показує обмеження вашого хостингу та пояснює, що кожне з них змінює для магазину.
Кнопка «Відкрити доступ до фотографій» пояснює, що робити, замість технічної помилки.
Перенесення магазину з іншої платформи, передане серверу, більше не зупиняється. Воно не робило жодного кроку: лічильник завмирав, а перенесення вважалося таким, що триває.
Перенесення покупців іде помітно швидше. Пошук уже заведених людей перебирав усю базу контактів на кожну людину, і з кожною тисячею перенесення сповільнювалося.
Кнопка «Зупинити» тепер працює: раніше перенесення саме продовжувалося за три хвилини. А перенесення, що спинилося зі справжньої причини, більше не піднімається нескінченно — воно зупиняється й показує причину.
Резервні копії бази даних працюють на хостингах, які забороняють запуск допоміжних програм. Раніше на таких хостингах копія не створювалася і не відновлювалася зовсім, а власник бачив технічну помилку.
Діагностика показує обмеження вашого хостингу та пояснює, що кожне з них змінює для магазину, — до того, як щось зламається, а не після.
Черга завдань більше не звітує про роботу, якої не робила: листи покупцям, вивантаження та оновлення доходять до кінця. У режимі обслуговування завдання теж виконуються — раніше оновлення, яке цей режим увімкнуло, не могло завершитися.
Кнопка «Відкрити доступ до фотографій» пояснює, що робити, замість технічної помилки.
Черга завдань тепер розбирається і на хостингах, де заборонені функції pcntl: раніше її обробник падав, і не надсилалися листи, не застосовувалися оновлення, стояло фонове перенесення.
Розклад тепер працює на хостингах, де заборонені proc_open і pcntl: раніше через них не виконувалося ЖОДНЕ завдання — не надсилалися листи, не розбиралася черга, стояло перенесення, а cron рапортував про успіх.
Діагностика більше не каже «планувальник не запускається» при робочому cron. Фонове перенесення саме продовжується, якщо ланцюжок обірвався, і лічильник на екрані більше не завмирає.
Головне: планувальник падав на хостингах, де заборонені функції pcntl — через це не працювали ні черга, ні фонове перенесення, хоча cron відпрацьовував. Незавершене перенесення тепер відкривається саме після перезавантаження сторінки. Перенесені покупці видно в розділі одразу, не чекаючи замовлень.
Виправлено: один обірваний запуск завдання глушив розклад на добу, і діагностика казала «планувальник не запускається» при робочому cron. Додано кнопку «Зняти замки планувальника».
Оновлення тепер розповідає, що робить: «у черзі», «завантажуємо пакет», «перевіряємо підпис», «замінюємо файли». Усі підписи та опис оновлення приходять мовою адмінки.
Перенесення магазину тепер відбувається на сервері: вкладку можна закрити. Продовження триває з місця зупинки, а не починається наново. Після переїзду перераховуються підсумки покупок.
В карточке покупателя появились покупки: итоги и история заказов. Категории покупателей пересчитываются ночью — условие «покупал за последние N дней» теперь срабатывает само.
Раздел «Покупатели»: шапка встала вровень с остальными разделами, у числовых полей появились подсказки.
Режим обслуживания: сотрудник теперь видит полосу «магазин закрыт», а страницы, открытые сотрудником, больше не попадают в общий кеш витрины. В архив добавлена инструкция по настройке сервера.
Появился раздел «Покупатели»: кто покупает, сколько принёс, история заказов, категории покупателей со своими названиями и автоназначением по покупкам. Фотографии больше не нарезаются все сразу при загрузке — перенос ускорился в сотни раз. Мастер установки открывает доступ к фотографиям сам и показывает, что нужно настроить на сервере.
Скидка в корзине теперь объяснена: прежняя цена зачёркнута, рядом название акции, в итогах — «Ваша выгода». Акция на категорию применяется сразу при сохранении, а не через минуту. Переключатель языков остаётся на том же домене. Один знак валюты на всём экране.
Названия и описания плагинов теперь на языке админки — и у установленных, и в списке доступных к установке. Ссылка на скачивание обновления живёт сутки вместо получаса.
Появилась кнопка «Сбросить магазин»: возвращает копию к состоянию после установки, сохраняя плагины, лицензию и сотрудников. Витрина и язык интерфейса берутся из того, что указали при установке. Перенос с другой платформы больше не спотыкается на длинных ключевых словах, не замирает на фотографиях, а о непрошедших записях сообщает понятным текстом.
Отозванная лицензия теперь распознаётся магазином, а не остаётся активной навсегда. В диагностике видно, работает ли планировщик и когда он отработал. Маркетплейс разбит по категориям целиком. Мастер установки задаёт языком магазина тот язык, на котором его проходили.
Фоновые задачи наконец выполняются: письма покупателям, выгрузки и обновления больше не копятся молча. Неактивированная копия не получает платные разделы. Переезд с другой платформы работает без настройки сервера и показывает ход работы.
Установка на чистом сервере проверена целиком: исправлен посев данных на нескольких языках, мастер больше не закрывается на шаге администратора, копия ставится в рабочем режиме, а не в отладочном.
Установка в базу, где остались таблицы от прошлой попытки, объясняется словами, а не ошибкой SQL, и базу можно очистить прямо из мастера. Исправлено имя индекса, из-за которого установка обрывалась посреди миграций. В мастере появился фирменный знак.
Установка на чистом сервере доводится до конца: мастер больше не спотыкается на переходе к настроенной базе. Сам мастер теперь на трёх языках — открывается на украинском, переключается на русский и английский.
Первый релиз CartiX: каталог, заказы, доставка и оплата, админка, витрина.