CartiX
Screenshots are coming soon.
A detailed description is on its way.
Тема «Базовая» (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.
The selected orders are always visible
In the «Several orders» dialog the ticks survive paging and filter changes — that is how a batch is put together. But as soon as the status was changed, the ticked orders left the screen: more was printed than could be seen.
The selected orders are now shown in a row above the list. Each one is removed with a click, with «Clear all» next to them.
Order picking for add-ons
The «Several orders» dialog the shop uses to print forms in batches can now be opened by add-ons too. An add-on button inside an order asks which orders to work with: the order it was pressed from is ticked straight away and the rest are added to it. Such buttons also appeared in the order list header, next to form printing.
The first to use this is the «Price tags and labels» add-on: stickers for the day shipment print as a single batch. Only the orders the member of staff is allowed to see appear in the picker.
Product barcode and the groundwork for label printing
Every product variant now has a «Barcode» field — until now there was nowhere to keep the code from the package. The product is found by it in search just like by its SKU: holding a scanner to the package is enough.
The groundwork for printing tags and labels is now in place: the catalogue and the product page can show add-on buttons. The printing itself arrives with the «Price tags and labels» add-on, installed separately from the marketplace.
Variants are labelled the way the shop named them
When a product has several SKUs without buy options, the variant switcher is now labelled with their names (“black”, “white”) — the way the shop owner named them. Previously, if a numeric per-SKU feature was set up, the labels were silently replaced by its values (“275 g”, “290 g”). The feature is only used when the SKUs have no names.
Per-SKU features and variant choice on the product page
A feature can now be set not only on the product but on each SKU — a number, text, date or yes/no. Previously the «set values for SKUs» switch only worked for list-based features: a numeric one was saved but there was nowhere to fill it in.
A product whose SKUs are not told apart by buy options now lets the shopper choose: the switcher is built from the SKU’s numeric feature (“10 pills” / “30 pills”), or from SKU names when there is none. Before that there was no choice at all and the product always sold as its default SKU. Per-SKU features are shown on the product page and follow the selected variant.
Points are visible where people look for them
The order card now has a «Paid with points» line — before, a manager saw the total and could not tell how it added up. The customer card now shows the account: balance, movement history with links to orders and expiry dates, plus adding or taking points by hand — for a delay, for a review, as an apology. Every such move is signed by the employee.
Checkout
Typing an amount of points now recalculates the order immediately, not only the «All» button. Both fixes came from live testing: the field accepted a number while the total stayed the same.
Customer bonus points
Shoppers now have a bonus account: they see the balance and history in their account and pay for part of an order with points right at checkout. What was spent is shown as its own line in the totals, and a cancelled order returns the points.
How much to earn and how much may be spent is set by the «Bonus points and loyalty» add-on. The shop itself makes sure points cannot exceed the balance and that the order total adds up to the last cent.
Small things
The order log no longer signs a shopper action with an employee name.
Browser notifications and the shop on a phone
Your shop gets a free communication channel: a shopper allows notifications once and hears about their order, restocked items and discounts even with the site closed. Notifications sit next to email and SMS — same events, same texts, same log — and the same channel sends broadcasts.
The same add-on turns your storefront into an app: shoppers add it to the phone home screen.
Broadcasts no longer claim false success
A broadcast whose channel is unavailable now stops with a clear explanation. Previously it was marked as sent without delivering a single message. Installing an add-on also restarts the task worker, so a new channel works right away.
An assistant answers common questions
You set the shopper's words and a ready answer — the shop replies by itself, shows matching products or calls a manager. The conversation shows the answer was automatic, so your manager never repeats it.
An order straight from the conversation
A shopper lists product codes, the shop recognises them with quantities and offers to add everything at once, while the manager gets an order form already filled in.
You can see what the shopper already picked
The card now shows what is in their cart — together with the question itself, not after it. Half of all chat questions are about exactly that.
You can see who you are talking to
Every question now comes with a card about the person: a known shopper with their phone and purchases, a guest with the page, device and where they came from. A plain message is enough to reply — no need to use «reply».
Website questions arrive in Telegram
A shopper's chat message is forwarded to whoever answers in Telegram, and their reply goes back to the shopper. You can answer from your phone without opening the shop.
Admin sections now look the same
Section headers, buttons, panels and tabs now look and behave the same everywhere. Previously every screen was laid out on its own, and sections slowly drifted apart.
Add-on sections — «Callback requests», «Back-in-stock notifications», «Short links» — were brought to the same look: content sits in the section card, and filtering by state moved to the left panel with counters.
Product search in the admin works like the storefront
The product picker in an order used to search its own way — strict name matching. A manager could not find what a customer found on the storefront.
Now everywhere you pick a product — order contents, accessories, product lists, gifts, discounts, promotions, campaigns — the same search and the same settings apply as for customers: synonyms, wrong keyboard layout, latin and cyrillic, ranking by importance. Suggestions now show product photos. An exact article code is always found.
The order editor was rewritten
- Editing has its own address: you can share the link, and «back» returns to viewing.
- «Edit» from the workspace opens editing straight away — before you had to press the button a second time.
- Customer on the left, order contents on the right, delivery and payment below.
- A line item takes one row: quantity, price and sum on the right.
- The shipping method is picked from a list, and carrier fields load after the choice.
Small things you notice
- Dropdowns no longer sit empty with no hint — across the whole admin.
- The «Shop name» field now explains where customers see it.
- The product list code hint is written in plain language.
Repeat an order
Your manager opens a new order pre-filled from the previous one, with prices and stock checked again.
Gifts with an order
The shop can hand out a product as a gift: its price is not touched by discounts and stays at zero all the way to checkout.
Order items grouped by warehouse
Order lines are sorted the way they are picked: by warehouse.
A notification for any order status
An email or message to the shopper can be tied to any status, including the ones you created.
Product columns in your own order
The column order in the product table stays exactly as you arranged it.
Orders remember the customer fields you need
The fields you set up at checkout are stored in the order and shown to your manager.
Install and reset never leave you without a storefront
After installation and after a reset the shop stays usable: storefront, theme and settings are in place.
One customer, one card. Phone numbers are stored in international format everywhere, so a local number and its +380 form are no longer two different people, and the phone field no longer accepts arbitrary text. A guest whose number already has an account is asked to sign in instead of getting a third card. Registration and social sign-in pick up the card of someone who previously ordered as a guest, and editing a card in the admin now carries the phone and email over to their account. Existing duplicates are cleaned up with the Find duplicates button in Contacts: orders, conversations and field values move to the card you keep.
Order status names are now translated into the shop languages. Customers see the status in their own language in the account and in emails, and the name for each language is set in Localization → Order statuses. Existing names are kept as the shop main language.
Print several orders at once
Select orders on your desk and print waybills or forms as a batch instead of one by one.
Scheduled catalog promotions start and end on their own again: the task responsible for it failed on every run, so an expired promotion kept discounting.
The password recovery e-mail moved into the Notifications section — its wording, language and channel are now configured like every other customer letter.
The E-mail channel got a «Do not verify the server certificate» switch, for a mail server of your own with a self-issued certificate.
The mail check in diagnostics now reads the shop settings instead of a configuration file and shows your mail server.
Fixed the test message in the channel settings: the recipient address was lost while saving.
Links to your shop look tidy
A section gets its own social image and a page its own description, so a shared link shows exactly what it should.
Make the shop look like yours
The browser tab icon is uploaded right in the settings instead of being pasted as a URL. You compose the admin menu yourself: your own set of items, separate menus for the shop and articles, a single-row top menu.
Исправлено: ссылка на заказ в личном кабинете покупателя вела на пустую страницу. Тема «Промо»: выровнено оформление — единый вид кнопок, одинаковая высота карточек товара, на телефоне ленты товаров листаются и видно, что их можно листать, заработала кнопка «Каталог» в нижней панели.
Seller details are now sets: if your storefronts trade under different legal entities, each prints documents with its own data, and at print time you can choose whose name the invoice goes out under. They live under the Company details tab of Print forms; anything filled in earlier moves across on its own. Order numbers: the shop stores the number itself, while a prefix such as «#100» is added when it is shown — so transferred orders carry it too, and the format can be changed at any time. After a move, new orders continue the old shop numbering. The badge next to Orders counts the statuses you pick in the order settings.
Fixed category transfer: in the previous version categories did not move at all. The connection check no longer confuses an unreachable database with someone else\x27s — the reason now comes from the database server itself and stays on screen. Attribute values and the names of categories and products arrive filled in for every language of the shop, even when the old shop translated only some of them. The orders workspace now has print forms and add-on buttons, which used to live only on the full order page.
Moving from another platform no longer depends on the scheduler: the transfer runs from the shop window, batch by batch, and two batches no longer step on each other — that is what used to lose individual products. Attribute values now arrive filled in for every language of the shop, even when the old shop translated only the names. Orders can be printed: an invoice and a delivery note, with layouts edited under Print forms. Add-ons can now put their own buttons and blocks right on the order page.
Orders can now be printed: an invoice and a delivery note. The layouts are edited to suit your bookkeeping under Settings → Print forms, with a preview on a real order and a way back to the factory look. Seller details live under Settings → Company details. Linking directories during a move is clearer: blocks are collapsed, you can see what will be linked, and matching names can be linked in one click. Product types in an attribute are picked from a list.
The Installer section brings the add-on and theme store, everything you have installed, updates and file installs together in one place. An update now starts the moment you press the button instead of waiting for a schedule. Before it runs you can see whether the server is ready, what might stop working and whether there is a recent backup. Settings for installed plugins moved to their own Plugins section.
Обновление начинается сразу по кнопке, а не по расписанию, и показывает честный ход установки. Названия статусов старого магазина при переезде.
Две темы оформления со светлым и тёмным видом. Варианты покупки прямо в каталоге: покупатель выбирает цвет или объём памяти на карточке, меняются фото, цена и наличие. Доп-услуги товара доходят до корзины. Раздел «Акции»: страница акции со сроком и скидкой на подборку. Темы ставятся из маркетплейса. Исправлен переезд с Webasyst напрямую из базы.
Order migration no longer stops at the ten-thousandth order and no longer passes itself off as finished.
For some numbers the old shop answers incorrectly and invents the record count; about 15% of orders actually arrived. Orders are now walked by record count, every batch is verified, and on failure the migration stops with a reason.
Option names are now translatable. Products, categories and features had translations while the purchase option («40 W», «Blue», «XL») did not, leaving half a card untranslated in a multilingual shop.
Purchase totals are recalculated by the shop itself: if the task queue stalled, the Customers section could show zeros for everyone.
Database backups work on hosting that forbids starting helper programs.
Diagnostics shows your hosting limits and explains what each one changes for your shop.
The button that opens access to photos explains what to do instead of showing a technical error.
Migrating a shop from another platform in the background no longer stalls. It was not making a single step: the counter froze while the migration still counted as running.
Migrating customers is noticeably faster. Looking up people you already have scanned the whole contact list for every single person, so each thousand made the migration slower.
The Stop button now works: previously the migration resumed by itself after three minutes. And a migration stopped by a real problem is no longer revived endlessly — it stops and shows the reason.
Database backups work on hosting that forbids starting helper programs. On such hosting a backup could previously neither be made nor restored at all, and the owner saw a technical error.
Diagnostics now shows your hosting limits and explains what each one changes for your shop — before something breaks, not after.
The task queue no longer reports work it did not do: customer emails, exports and updates run to completion. Tasks also run during maintenance mode — previously the very update that switched the mode on could not finish.
The button that opens access to photos explains what to do instead of showing a technical error.
The queue is now processed on hosts where pcntl functions are disabled: previously the worker crashed, so no emails were sent, no updates applied and background migration stood still.
The schedule now works on hosts where proc_open and pcntl are disabled: previously not a single task ran — no emails, no queue, no migration — while cron reported success.
Diagnostics no longer claims the scheduler is dead while cron is running. Background migration resumes by itself after a broken chain, and the on-screen counter stops freezing.
Key fix: the scheduler crashed on hosts where pcntl functions are disabled, so neither the queue nor background migration ran even though cron was fine. An unfinished migration now reopens by itself after a page reload. Migrated customers appear in the section right away.
Fixed: a single interrupted task run muted the whole schedule for a day, and diagnostics reported a dead scheduler while cron was fine. Added a «Release scheduler locks» button.
The update now says what it is doing: queued, downloading, verifying, replacing files. All labels and the changelog arrive in the language of your admin panel.
Shop migration now runs on the server: you can close the tab. Continue picks up where it stopped instead of starting over. Purchase totals are recalculated after the migration.
В карточке покупателя появились покупки: итоги и история заказов. Категории покупателей пересчитываются ночью — условие «покупал за последние N дней» теперь срабатывает само.
Раздел «Покупатели»: шапка встала вровень с остальными разделами, у числовых полей появились подсказки.
Режим обслуживания: сотрудник теперь видит полосу «магазин закрыт», а страницы, открытые сотрудником, больше не попадают в общий кеш витрины. В архив добавлена инструкция по настройке сервера.
Появился раздел «Покупатели»: кто покупает, сколько принёс, история заказов, категории покупателей со своими названиями и автоназначением по покупкам. Фотографии больше не нарезаются все сразу при загрузке — перенос ускорился в сотни раз. Мастер установки открывает доступ к фотографиям сам и показывает, что нужно настроить на сервере.
Скидка в корзине теперь объяснена: прежняя цена зачёркнута, рядом название акции, в итогах — «Ваша выгода». Акция на категорию применяется сразу при сохранении, а не через минуту. Переключатель языков остаётся на том же домене. Один знак валюты на всём экране.
Названия и описания плагинов теперь на языке админки — и у установленных, и в списке доступных к установке. Ссылка на скачивание обновления живёт сутки вместо получаса.
Появилась кнопка «Сбросить магазин»: возвращает копию к состоянию после установки, сохраняя плагины, лицензию и сотрудников. Витрина и язык интерфейса берутся из того, что указали при установке. Перенос с другой платформы больше не спотыкается на длинных ключевых словах, не замирает на фотографиях, а о непрошедших записях сообщает понятным текстом.
Отозванная лицензия теперь распознаётся магазином, а не остаётся активной навсегда. В диагностике видно, работает ли планировщик и когда он отработал. Маркетплейс разбит по категориям целиком. Мастер установки задаёт языком магазина тот язык, на котором его проходили.
Фоновые задачи наконец выполняются: письма покупателям, выгрузки и обновления больше не копятся молча. Неактивированная копия не получает платные разделы. Переезд с другой платформы работает без настройки сервера и показывает ход работы.
Установка на чистом сервере проверена целиком: исправлен посев данных на нескольких языках, мастер больше не закрывается на шаге администратора, копия ставится в рабочем режиме, а не в отладочном.
Установка в базу, где остались таблицы от прошлой попытки, объясняется словами, а не ошибкой SQL, и базу можно очистить прямо из мастера. Исправлено имя индекса, из-за которого установка обрывалась посреди миграций. В мастере появился фирменный знак.
Установка на чистом сервере доводится до конца: мастер больше не спотыкается на переходе к настроенной базе. Сам мастер теперь на трёх языках — открывается на украинском, переключается на русский и английский.
Первый релиз CartiX: каталог, заказы, доставка и оплата, админка, витрина.