Aero — готовый адаптивный магазин для любой ниши на OpenCart 3: фильтр, блог, истории, отзывы, PWA и продающая карточка.

Цена: 7 000 ₽ 8 000 ₽


В корзину
Автор: KompMAN Написать автору
Покупок: 1 (Средняя оценка 0 на основании 0 отзывов)
Нужна платная помощь? Написать техподдержке сайта
Совместимость:
LiveStore 3.*OCStore 3.*OpenCart 3.*

AERO — ГОТОВЫЙ МАГАЗИН НА OPENCART 3
Не заготовка, а магазин целиком: фильтр, блог, истории, отзывы, PWA и продающая карточка уже внутри.

» ПОЛНОЕ ОПИСАНИЕ СО СКРИНШОТАМИ «
вся витрина и вся админка, раздел за разделом

» ЖИВОЕ ДЕМО ВИТРИНЫ «

Демо админки: https://aero.100300.ru/admin/
Логин: demo    Пароль: demo

═══════════════════════════════════════

ОДИН ПРОДУКТ ВМЕСТО ДЕСЯТКА МОДУЛЕЙ

Обычно после покупки шаблона магазин докупает фильтр, быстрый заказ, блог, отзывы, генератор SEO. Каждый модуль — от своего автора, со своей вёрсткой и своей поддержкой. Их приходится стыковать между собой, а после каждого обновления проверять заново.

Aero устроен иначе: всё это — части одного шаблона, написанные одним автором и связанные между собой. Единая вёрстка, единые цвета, единые обновления. Ничего не нужно докупать и «чинить» после апдейтов.

• 240+ настроек в одной панели — без единой строчки кода
• 3 вида списка товаров: сетка, список и таблица
• 5 готовых тем-витрин под нишу — в один клик
• Тёмная тема из коробки
• PWA — магазин ставится на телефон как приложение
• 2 модуля в подарок — фильтр и конструктор меню
• Полностью адаптивный — отдельный мобильный интерфейс

═══════════════════════════════════════

ЧЕГО НЕТ В ОБЫЧНОМ OPENCART 3
Всё перечисленное ниже — часть шаблона, а не отдельные покупки.

■ Оформление без кода

• Панель настроек — 240+ параметров в 30 группах: цвета, шрифты, скругления, тени, форма кнопок и полей. Магазин перестаёт быть похожим на соседний с тем же шаблоном.
• Тёмная тема — по системе, переключателем в шапке или принудительно; для неё своя палитра.
• 5 тем-витрин — электроника, одежда, мебель, продукты, автозапчасти: своя палитра, шрифты, шапка и подвал.
• Панель демонстрации — посетитель сам переключает оформление прямо на витрине (удобно для показа).
• Конструктор шапки и подвала — три строки, блоки в любой позиции, свои ссылки на страницы.
• 46 встроенных значков или своя картинка для любого элемента.

■ Каталог для любого ассортимента

• Три вида списка — сетка, список и таблица; выбор покупателя запоминается.
• Табличный вид — артикул, характеристики колонками, наличие, цена и «в корзину» прямо из строки: заказ из десятков позиций без единой карточки.
• Печать прайса — весь раздел одной таблицей в PDF, с учётом наложенного фильтра.
• Выбор варианта в списке — цвет и размер выбираются в карточке каталога, без захода в товар.
• Быстрый просмотр — карточка товара во всплывающем окне.
• Стикеры «Хит», «Новинка», «−%» — с условиями показа и своим оформлением.
• Живой поиск — подсказки с картинками и ценой по мере ввода.
• Мегаменю — разделы, бренды и картинки каталога собираются автоматически.

■ Продающая карточка товара

• Варианты с ценой — цвет и модификации с доплатой прямо у цены.
• Набор «купить вместе» — сопутствующие товары одной кнопкой.
• Вкладки — описание, характеристики, отзывы, вопросы и ответы.
• Расчёт доставки в регион и бонусные баллы.

■ Контент, который удерживает

• Блог — с обложками, метками, авторами, комментариями, отложенной публикацией и связью статей с товарами.
• Истории (Stories) — лента кружков, как в соцсетях, с полноэкранным просмотром.
• Отзывы о магазине — отдельный раздел со сводкой оценок, фильтром, ответами магазина и модерацией (не путать со стоковыми отзывами о товаре).
• Вопросы о товарах — покупатель спрашивает, ответ магазина появляется в карточке.

■ Мобайл и удержание

• PWA — установка на телефон, работа без сети, свой значок и заставка; отдельного приложения писать не нужно.
• Push-уведомления — приходят на телефон даже при закрытом сайте.
• Рассылки push — с предпросмотром, сегментами и статистикой доставки и переходов.
• Уведомление о смене статуса заказа — автоматически.
• Липкая нижняя навигация на телефоне — каталог, поиск, избранное, корзина, кабинет.

■ Скорость, SEO и аналитика

• Панель скорости — Core Web Vitals (LCP, CLS, INP), собранные у живых посетителей, с разбивкой по страницам.
• Отложенный jQuery, WebP, адаптивные размеры изображений.
• Микроразметка — товар с ценой и отзывами, категории, хлебные крошки, статьи блога.
• OpenGraph, канонические адреса, образцы мета-тегов на весь каталог, карта сайта sitemap.xml.
• Цели аналитики — 21 событие витрины (корзина, заказ, звонок, поиск, избранное…) одним полем уходят и в Яндекс.Метрику, и в GA4; электронная коммерция в dataLayer.
• Указатели базы данных — ускоряют бренды, сортировки и поиск по артикулу на больших каталогах.

■ Кабинет, письма и право

• 21 экран личного кабинета — в оформлении темы, а не стоковый OpenCart.
• Письма в оформлении магазина — заказ, смена статуса, восстановление пароля, приветствие (в стоке свёрстано только подтверждение заказа).
• Плавающая кнопка мессенджеров и обратного звонка.
• 152-ФЗ — согласия под каждой формой, уведомление о cookie, ссылка на политику.
• Единое оформление админки — все разделы шаблона выглядят как одна панель, а не разнобой.

═══════════════════════════════════════

БАЗОВЫЕ ФУНКЦИИ, КОТОРЫЕ ОБЫЧНО СТАВЯТ ОТДЕЛЬНЫМИ МОДУЛЯМИ
В Aero они уже встроены и связаны с каталогом и корзиной.

• Кратность и упаковки с калькулятором — товар продаётся коробками по 12 или упаковками по 2,5 м²; покупатель вводит площадь с запасом на подрезку — шаблон сам считает число упаковок и подставляет количество. Шаг проверяется и на сервере.
• Оптовые цены лестницей — скидки от количества показываются диапазонами с подсветкой текущей ступени и подсказкой «добавьте ещё N — станет дешевле». Свои цены для групп покупателей.
• Быстрый заказ / купить в 1 клик — покупка в одно поле мимо оформления, из каталога и карточки.
• «Узнать цену» — заявка по товарам без цены.
• Обратный звонок — форма и плавающая кнопка с часами приёма.
• «Сообщить о поступлении» — подписка на товар не в наличии.
• «Сообщить о снижении цены» — подписка на цену.
• «Нашли дешевле» — заявка на снижение цены.
• Предзаказ — приём заказов на товары до поступления.
• Таблицы размеров — одна таблица на раздел, вставка сетки прямо из Excel.
• Минимальное количество и цены только после авторизации — со внятным приглашением войти.

Все заявки (звонок, узнать цену, поступление, снижение цены, предзаказ) сохраняются в отдельном разделе админки — независимо от почты.

═══════════════════════════════════════

ФИЛЬТР И МЕНЮ — В ПОДАРОК

В поставку входят два самостоятельных продукта, которые обычно покупают отдельно. Здесь они работают по лицензии шаблона — второй ключ покупать не нужно.

• FilterTAP — быстрый фильтр по опциям, атрибутам и цене, со счётчиками, посадочными страницами и SEO; ускорение для больших каталогов.
• NavMenu — конструктор меню: свои пункты, расписание показа, разные меню для групп покупателей.

═══════════════════════════════════════

НАДЁЖНО И БЕЗ СЮРПРИЗОВ

• OpenCart 3.0.x, PHP 7.4–8.3, MySQL 5.7+ / MariaDB 10.3+.
• Без правок ядра — вся интеграция на системе событий OpenCart, совместимо со сторонними модулями OC3.
• Обновления не трогают ваши настройки, статьи, отзывы и раскладку.
• Открытый код — twig, CSS и JS обычными файлами; свои правки выносятся в отдельные файлы и переживают обновление.

═══════════════════════════════════════

» ОТКРЫТЬ ПОЛНОЕ ОПИСАНИЕ СО СКРИНШОТАМИ «

Живое демо  •  Админка: aero.100300.ru/admin/ (demo / demo)
Демо-сайт:
https://aero.100300.ru/
Админка демо-сайта:
https://aero.100300.ru/admin Логин: demo, пароль: demo
Презентация шаблона:
https://aero.100300.ru/aero-presentation
1.4.1
Вход по номеру без SMS

  • Номер вместо почты, пароль вместо кода. Магазину без договора с оператором слать коды нечем, а номер как имя входа всё равно удобнее почты: его помнят, её — через раз. В настройках появился выбор, чем подтверждать номер: кодом из SMS или обычным паролем. Незнакомый номер и здесь не уводит на отдельную страницу — форма сама дописывает имя и повтор пароля.
  • Повтор пароля спрашивается именно потому, что почты у покупателя может не быть: опечатка осталась бы без единого способа её исправить. Поэтому же рядом стоит напоминание включить необязательное поле почты — иначе восстанавливать пароль будет нечем.
  • Счётчик неудачных попыток тот же, что у входа по почте: вход по номеру не должен быть дверью в обход ограничения, которое стоит на соседней.
Ненужные разделы кабинета выключаются

  • Одиннадцать переключателей: заказы, личные данные, пароль, адреса, избранное, бонусные баллы, возвраты, файлы, счёт, подписки, рассылка. OpenCart показывает все всегда: магазин с самовывозом ведёт покупателя в «Адреса», магазин без баллов — в «Бонусные баллы», и пустой экран там читается не как «этого у нас не бывает», а как поломка. Выключенный раздел исчезает из бокового списка и с плиток обзора, а его адрес уводит на обзор кабинета — иначе раздел остаётся доступен по прямой ссылке и попадает в поисковую выдачу.
  • Обзор и выход не выключаются: без них кабинет перестаёт быть кабинетом.
Мелочи

  • Вторая вкладка входа называется по тому, что в неё вводят. Пока номер подтверждается кодом, вкладки различаются способом — «По телефону» и «По паролю». В режиме без SMS пароль спрашивают обе, и вторая честно называется «По почте».
  • Условия показа настроек научились складываться. Поля договора с оператором теперь прячутся сразу по двум признакам — способу подтверждения и выбранному шлюзу, — а не по одному. Владелец видит ровно те три-четыре поля, которые относятся к его договору, и ни одного лишнего.
  • Проверка целости настроек в самопроверке. Список переключателей кабинета сверяется со списком разделов в обе стороны: переключатель без раздела ничего не выключает, раздел без переключателя нельзя убрать. Раньше такое расхождение обнаружилось бы у покупателя.

1.4.0

Вход и регистрация по номеру телефона

  • Покупатель называет номер и получает код в SMS. Почту и пароль придумывать не нужно: в России телефон диктуют не задумываясь, а почту вспоминают через раз — и чаще не вспоминают вовсе, отчего корзина так и остаётся корзиной. Магазин взамен получает проверенный контакт, по которому звонит курьер.
  • Незнакомый номер заводит учётную запись тем же кодом. Отдельной формы регистрации не возникает: покупатель вводит номер, вводит код и уже внутри. По желанию магазин спрашивает имя, а почту — только если рассылает письма о заказе.
  • Вход по телефону работает и на кассе. Вкладка «я уже покупал здесь» получила своё оформление и после входа возвращает покупателя к его заказу, а не в личный кабинет, откуда до корзины ещё надо дойти.
  • Номер принимается и в поле почты. Тот, кто завёл учётную запись по телефону, в следующий раз пишет телефон и туда — просто потому, что это единственное, что он о себе помнит. Магазин его узнаёт.
  • Пять SMS-шлюзов на выбор: SMS.RU, SMSC.RU, SMS Aero, TargetSMS и свой адрес по HTTP — для тех, у кого рассылка внутри компании. Шестой режим, «только в журнал», ничего не отправляет и пишет код в журнал магазина: так вход настраивают и проверяют до того, как заводят платный договор.
  • Кнопка проверки шлюза прямо в настройках. Владелец вписывает ключ, отправляет сообщение себе и сразу видит ответ оператора — а не узнаёт об опечатке от первого покупателя, который не смог войти.
  • Защита от перебора и от лишних трат. Код живёт четверть часа, сгорает после пяти промахов, между отправками пауза, и больше пяти кодов в час на номер магазин не оплачивает. В базе хранится не код, а его отпечаток: утёкшая копия не отдаёт действующие коды тех, кто входит прямо сейчас.
  • Режим «только по телефону» убирает форму с паролем совсем — для магазинов, где длинная регистрация не нужна никому.
Ядро OpenCart при этом не правится ни в одном файле: всё живёт на событиях. Шаблон можно снять, и магазин останется рабочим.
1.3.1
Починки

  • Товар с обязательной опцией добавлялся не туда. Кнопка «Купить» в списке у товара, где нужно выбрать цвет или объём, молча уводила на карточку: покупатель нажимал «Купить» и оказывался в другом месте без единого слова о том, почему. Теперь он остаётся на месте, видит, чего не хватает, и выбирает прямо в окне быстрого просмотра.
  • Блок «Купить вместе» клал в корзину один товар. По той же причине: первый же товар с обязательной опцией уводил страницу, и набор обрывался. Теперь добавляется всё, что можно добавить, а про остальное магазин говорит отдельно и предлагает выбрать вариант.
  • Правый ползунок цены «исчезал», стоило за него взяться. Нажатие по самой шкале переносит ближний край — это удобно, — но ручка лежит внутри шкалы, и её нажатие туда же и всплывало: шкала успевала перебросить левый край и применить фильтр раньше, чем покупатель двинул мышью. Правая ручка прыгала к краю, а в фильтре оказывалась минимальная цена, которую никто не выставлял.
  • Ползунки теряли положение после обновления списка. Обе ручки сваливались к началу шкалы, и правая выглядела исчезнувшей.
  • Шкала цены растягивалась на весь магазин. В разделе ноутбуков за 40–295 тысяч выбор «до 180 тысяч» превращал шкалу в 1–370 тысяч: ручка оказывалась не там, куда её отпустили, а следующее движение считалось уже по чужому диапазону. Теперь шкала остаётся шкалой раздела.
1.3.0
SEO: шаблоны мета-тегов и карта для ИИ-поисковиков

  • Ключевые слова и H1 по образцу. К заголовку и описанию добавились keywords и H1 — для товаров, категорий, брендов и статей блога. Заполняется только пустое: свой текст владельца не трогается. У H1 правило обратное — образец применяется всегда, когда задан, потому что H1 пустым не бывает.
  • Статьи блога вошли в генератор четвёртым типом страниц.
  • Двадцать восемь меток вместо семи. Товар: имя, модель, артикул, бренд, раздел, цена, цена до скидки, размер скидки, наличие, остаток, вес, габариты, оценка, число отзывов. Раздел: имя, родительский раздел, всего товаров, цены от и до, бренды раздела. Бренд: имя, всего товаров, цены от и до, разделы. Статья: заголовок, автор, дата, рубрика. Общие: магазин, телефон, год, месяц. Метка без значения выбрасывается вместе с осиротевшими знаками препинания.
  • Файл llms.txt — короткая карта магазина обычным текстом по адресу 

    /llms.txt
    : чем торгуете, дерево каталога со ссылками и числом товаров, страницы покупателю, контакты. Её читают ответы нейросетей, которым 

    sitemap.xml
     ничего не говорит. Собирается сама и обновляется без участия владельца.
1.2.2
Избранное без регистрации

  • Гость откладывает товары и видит свой список. OpenCart и так запоминал выбор гостя, но показывать отказывался: страница избранного разворачивала на форму входа. Кнопка нажималась, счётчик рос, а посмотреть отложенное было нельзя. Теперь список живёт в браузере полгода, переживает закрытие вкладки, а при входе переносится в учётную запись — иначе покупатель, решившийся зарегистрироваться, терял ровно то, ради чего регистрировался. Включается настройкой: магазину, которому избранное нужно как повод завести учётную запись, ничего не навязывается.
Починки
  • Блок перелинковки фильтра «Смотрите также» на страницах бренда, поиска и акций выходил голым списком ссылок: стили подключались позже, чем страница их собирала.
1.2.1
  • Слайдер и истории переживают повторный запуск демо-данных. Свои картинки, подписи и ссылки больше не затираются: готовый баннер и готовые истории набор не трогает вовсе.
  • Пункт «Aero» встал первым в левом меню админки — шаблон настраивают чаще, чем что-либо другое, и искать его в конце списка из полутора десятков разделов было лишней работой каждый раз.
1.2.0
  • Колонки мегаменю подстраиваются под свободное место. У пунктов ближе к правому краю панель ужата под остаток экрана, и заданное число колонок делило эту ширину поровну: значок раздела не влезал, название налезало на соседнее, счётчик садился поверх чужой картинки. Теперь колонок столько, сколько помещается, а настройка служит потолком; колонка брендов при нехватке места уезжает вниз.
  • Набор демо-каталога перестраивает индекс фильтра. Каталог пересобирается с новыми номерами товаров, а фильтр отвечает из индекса не только на отбор, но и на обычный список раздела — так большой каталог открывается за миллисекунды. Устаревший индекс показывал магазин пустым, категория за категорией.
1.1.9
  • Установщик больше не раздаёт права шаблона всем группам. Установка выдавала полный доступ к настройкам каждой группе пользователей, и запускается она сама при смене версии: владелец снимал галочки у кассира или демонстрационной группы, обновлял шаблон — и они появлялись снова. Теперь права получают только группы, которые и так управляют магазином.
  • Товары подкатегорий в разделе стали настройкой. Раньше режим был зашит намертво. По умолчанию как было; выключение оставляет в разделе только его собственные товары.
1.1.8
  • «Быстрый старт» больше не сносит блоки, собранные руками. Набор «Главная страница» начинал с удаления всех блоков шаблона в магазине: владелец, собравший главную сам, терял её целиком при первом же нажатии — и не только главную, потому что удаление не смотрело ни на макет, ни на происхождение. Теперь набор помечает свои блоки и трогает только их. То же исправлено в наборах блога, историй и отзывов.
1.1.7
  • Кнопка «Удалить» в сравнении не работала. Таблица сравнения была помечена тем же словом, что и кнопка «В сравнение» на карточке, и перехватывала любой клик внутри себя.
1.1.6
  • Карточки на поиске, акциях и странице бренда стали такими же, как в каталоге. Те же товары выводились обеднёнными: без стикеров «Новинка» и «Хит», без строк характеристик под названием, без выбора варианта. Теперь карточка одна и та же по построению.
1.1.5
  • Кнопки в сравнении сваливались в одну колонку, и было не понять, какая кнопка к какому товару.
  • Выпадающий список простого меню открывался у левого края экрана, за несколько пунктов от того, на который навели, — до его ссылок нельзя было дойти мышью.
1.1.4
  • Страница бренда получила своё оформление. Её шаблона в теме не было вовсе, и покупатель попадал с оформленного каталога на голую вёрстку: заголовок, крошки, переключатель вида, сортировка, карточки и постраничность теперь такие же, как в разделе. Рядом с названием — логотип марки.
  • Оповещения магазина рассыпались на колонки: фраза «Товар … добавлен в ваш список сравнения» превращалась в пять столбцов.
  • Мегаменю больше не уезжает из-под своего пункта: панель ужимается до свободного места и остаётся на месте, а не сдвигается туда, откуда до подпунктов не дойти мышью.
1.1.3
  • Глубина теней дошла до всплывающих слоёв. Настройка обещала «карточки, окна и выпадающие списки», а меняла только мегаменю и выпадающий поиск: окна, выдвижные панели, корзина, всплывающие кнопки и подсказки носили свои тени прописью в стилях. В шкале появилась четвёртая ступень для всплывающих слоёв и две направленные тени — боковая для выдвижных панелей и фирменная для круглых кнопок поверх содержимого.
1.1.2
  • Переключатели шрифта и теней в панели демонстрации нажимались вхолостую.
  • Кнопка «Купить шаблон» вынесена из подвала окна наружу, рядом с язычком: внутри её видел только тот, кто панель уже открыл и пролистал до конца.
  • Мегаменю в раскрытом виде добавляло странице горизонтальную прокрутку на время наведения.
1.1.1
  • Пять примеров настройки вместо пяти тематик. Демонстрационный магазин показывает не пять разных магазинов, а один и тот же — в пяти оформлениях, чтобы было видно, что настраивается.
  • Значки разделов в строке меню и фотографии для демо-каталога.
  • Заготовка шапки «С кнопкой каталога»: поиск больше не падает под меню.
  • Нечитаемый текст на некоторых фонах — вставленный контент, стикеры, старая цена — в светлой и тёмной теме.
  • Повторный клик по «Каталогу» в «Быстром старте» заменяет данные, а не копит их.
  • Генератор демо-каталога перестал затирать настоящие фотографии товаров, а разделы получили свои картинки.
1.1.0
Каталог: третий вид, прайс и продажи по количеству

  • Табличный вид списка товаров. Строка вместо карточки: артикул, характеристики отдельными колонками, наличие, цена, количество и «в корзину» прямо из строки — покупатель набирает заказ, не открыв ни одной карточки. Для каталогов, где товары различаются двумя цифрами: крепёж, кабель, расходники, опт. Колонки характеристик общие для всей выборки: «Диагональ» обязана означать диагональ во всех строках, поэтому берутся самые частые в разделе, а товар без такой характеристики получает прочерк.
  • Вид запоминается в cookie, а не только в браузере: таблицу собирает сервер, и он должен знать выбор до отрисовки. Сетка и список по-прежнему переключаются на месте, без перезагрузки.
  • Печатный прайс. Раздел целиком одной таблицей, без шапки и меню; оттуда же браузер сохраняет PDF. Наложенный фильтр переносится: покупатель отобрал нужное и печатает именно отобранное.
  • Таблицы размеров. Заводятся в разделе «Таблицы размеров», одна на раздел работает во всех его товарах и подразделах; у отдельной модели может быть своя. Сетка вставляется из Excel как есть — колонки разделяются сами. Открывается окном рядом с выбором размера.
  • Кратность, минимальная партия и упаковки. Шаг количества, единица измерения и число единиц в упаковке задаются у товара. Кнопки счётчика ходят шагом, введённое руками приводится к нему же, а корзина проверяет количество на сервере — заказ уходит и мимо страницы товара.
  • Калькулятор количества. «Нужно 18 м², запас 10%» — и покупатель видит, что это 8 упаковок по 2,5 м². Для плитки, ламината, обоев, краски, кабеля: без пересчёта покупатель уходит считать в другое место и нередко там же покупает.
  • Лестница оптовых цен. Скидки от количества показываются таблицей с диапазонами и подсветкой текущей ступени, а под количеством — сколько добавить до следующей и насколько станет дешевле. Механика в OpenCart была, но строка «10 шт. или больше — 900 р.» покупателем не читается.
  • Цены только после входа. Если в настройках OpenCart цены скрыты от гостей, вместо пустого места теперь приглашение войти — во всех трёх видах списка и в карточке товара. Раньше витрина выглядела сломанной.
Личный кабинет
Двадцать один экран кабинета переписан в оформлении темы. Раньше покупатель проходил витрину, входил — и попадал на стоковый Bootstrap образца 2015 года.

  • Общая раскладка: слева разделы с отметкой текущего, справа содержимое. На узком экране разделы становятся горизонтальной лентой: вертикальный список из тринадцати пунктов отодвигал бы содержимое за нижний край.
  • Свои короткие подписи разделов вместо стоковых предложений вроде «Подписаться или отказаться от рассылки новостей».
  • Обзор кабинета — плитками вместо четырёх списков ссылок подряд.
  • Заказы карточками: номер, статус и сумма читаются с одного взгляда. История статусов — лентой, а не таблицей: это последовательность событий.
  • Избранное строками с фотографией и кнопкой покупки.
  • Адреса карточками: адрес это несколько строк текста, в ячейке таблицы они склеиваются в кашу.
  • Формы разбиты на группы, имя и фамилия стоят в одной строке, ошибки показываются у своего поля. Регионы в адресе подгружаются без jQuery.
  • Отписка от рассылки снятым флажком теперь доходит до магазина: браузер снятый флажок не отправляет вовсе, и без скрытого поля отписаться было нельзя.
Письма
  • Подтверждение заказа переписано: номер и сумма первыми, состав списком, адреса и способы рядом, цвета магазина. Раньше это была серая таблица с рамками в один пиксель.
  • Письмо о смене статуса заказа, восстановление пароля и приветствие после регистрации теперь приходят разметкой, а не голым текстом. В OpenCart из девяти писем разметку имело только подтверждение заказа, а письмо о статусе покупатель получает чаще любого другого.
  • Письма отправляются разметкой только если шаблон её вернул: при выключенной теме поведение прежнее, до буквы. Текстовая копия вкладывается всегда — часть почтовых программ разметку не показывает.
Исправлено
  • Семь настроек ничего не делали: панель их показывала, магазин не читал. «Вид по умолчанию» и «Товаров на странице» в каталоге, «Оформление вкладок» в карточке товара, значки сравнения и избранного в шапке, «Скрывать значения без товаров» и закрытие отфильтрованных страниц от индексации в фильтре. Все семь работают.
  • Вариант «Таблица» в настройке вида был объявлен в панели, но такого вида в шаблоне не существовало.
  • Сравнение и избранное выключаются целиком, а не только значком в шапке: магазину, которому сравнение не нужно, оно исчезает и из карточек списка, и из карточки товара.
  • «Оформление вкладок → раскрывающиеся секции» работает на одной разметке с полосой вкладок: описание товара не приходится держать в двух экземплярах.
  • Отфильтрованные страницы каталога закрыты от индексации. Каждое сочетание отметок давало свой адрес, и поисковик набирал тысячи страниц с одним товаром в разном порядке.
  • Ленты листаются перетаскиванием, а не только стрелками. Пальцем прокручиваемую ленту листал браузер, а мышью не листалось нигде: за компьютером слайдер между стрелками казался мёртвым. Теперь тянутся баннеры, витрины товаров, лента историй и фотографии в карточке товара; клик, родившийся из перетаскивания, товар не открывает. В полноэкранном просмотре историй появилось смахивание — формат, который иначе и не листают.
  • Стрелка баннера налезала на текст слайда. Текст прижат к краю слайда тем же отступом, что и стрелка, и на экране уже тысячи двухсот точек стрелка перекрывала первые буквы строки. Под стрелки теперь отведено место — и слева, и справа.
  • Обложка истории не доходила до краёв плитки. Штатный ресайз OpenCart вписывает картинку в заданный прямоугольник и дополняет её белым; обложка почти всегда квадратная, плитка высокая — и белые поля запекались в саму картинку. Теперь обложка готовится в своих пропорциях, а обрезает её до плитки браузер.
  • В историях не выбиралась фотография слайда. Файловый менеджер получает имена поля и рамки в адресе, а у слайда их не было: выбор закрывал окно и молча ничего не менял.
  • Пустая строка в дополнительных фотографиях товара давала пустую миниатюру, которая ничего не показывала. Такие строки пропускаются — и в карточке, и в быстром просмотре.
Демонстрация: пять примеров настройки
  • Переключатель на витрине показывает не пять магазинов под ниши, а пять примеров настройки одного магазина. Прежние «Электроника», «Одежда и обувь», «Автозапчасти» обещали готовый вид под нишу, а меняли только палитру и форму элементов: в «Одежде» оставалось компьютерное меню и лежала кухонная посуда. Теперь каталог у всех пяти общий, а подписи честно перечисляют, что настроено — колонки, скругления, шрифты, вид шапки и подвала, набор блоков.
  • Значок раздела в строке меню. Задаётся у категории: «Каталог → Категории», вкладка «Данные», поле «Иконка в меню». В наборе появилась группа «Разделы каталога» — ноутбук, телевизор, холодильник, диван, одежда, запчасти и ещё два десятка предметов. Раньше выбирать было не из чего: все значки были служебные.
  • Разделитель разрядов в ценах. Русские сборки OpenCart приходят с пустым разделителем, и цена выглядит как 75225₽. Настройка подставляет неразрывный пробел, не трогая языковые файлы магазина. По умолчанию выключена: формат цены разбирают сторонние модули.
  • Собственный заголовок у блоков «Витрина» и «Бренды». Оба показывали покупателю служебное имя модуля из списка админки — назвал «Главная: хиты», так и вышло в магазин. У преимуществ, категорий, историй и промо отдельное поле было давно, эти два выпали.

Исправлено — витрина

  • Меню каталога не пряталось на узком экране, если стояло не в своей строке. Правило пряталo строку меню, а меню можно поставить и в главную строку — так собрана компактная шапка. На 768 пикселях пункты уезжали за правый край, и поскольку документ не прокручивался, меню молча обрезалось.
  • Логотип ломался посреди слова — «Ae» и «ro». У него стояли min-width: 0 и overflow-wrap: anywhere, то есть «сжимайся первым и режь слово где угодно». Имя магазина сжиматься первым не должно; длинное название на телефоне теперь обрезается многоточием.
  • Из компактной шапки убрано меню. Шесть разделов, поиск и значки действий в одну строку не помещались, строка переносилась, и вариант переставал быть компактным. Каталог целиком открывает кнопка рядом с логотипом.
  • Блок «О магазине» в подвале показывал пустой заголовок: он брал его из переменной, которой в области подвала нет. Пока текст не заполнен, блока теперь нет вовсе.
  • Очистка демо-каталога сносила чужие ЧПУ. В списке очищаемых таблиц стояла seo_url целиком, и вместе с адресами товаров пропадали адреса статей блога и карты сайта.
Скорость базы
  • Недостающие указатели добавляются при установке. В стоковой базе OpenCart у таблицы товаров нет ничего, кроме первичного ключа, — а запрос вида «активные товары, отсортированные по цене» стоит в каждом втором модуле. MySQL отвечает на него полным перебором таблицы и сортировкой во временном файле: на трёхстах товарах незаметно, на пятидесяти тысячах — секунды на каждой странице.
  • Добавляется восемь указателей: фильтр активности, три сортировки списка, производитель, артикул и два на значения опций. Каждый отвечает запросу, который OpenCart выполняет сам, без участия шаблона.
  • Только добавление. Ничего не удаляется и не перестраивается; имена с приставкой 

    aero_
    ; уже существующий указатель с той же ведущей колонкой — свой или чужой — пропускается; отсутствующая таблица или колонка тоже. Повторный запуск ничего не дублирует.
  • Поведение запросов не меняется — меняется только время ответа. Поэтому указатели можно добавлять в чужую базу, а править запросы ядра нельзя.
Оформление админки
  • Разделы шаблона выглядят как панель настроек. Панель давно выглядела продуктом, а соседние экраны — отзывы, вопросы, таблицы размеров, рассылки, блог, истории — стоковым Bootstrap: один шаблон, две разные админки.
  • Общий слой оформления приводит стоковую разметку OpenCart к виду панели: заголовки, панели, кнопки, поля, таблицы, вкладки, сообщения и метки состояния. Восемнадцать экранов получили его одним классом на контейнер.
  • Слой замкнут внутри 

    .ae-ui
    : разделы магазина и чужие модули не задеты.
Цели аналитики
  • Цели на события витрины. Раньше шаблон умел поставить счётчик Метрики и GA4 и отправить события коммерции — но целей не было ни одной, а большинства событий, на которые их вешают, витрина вообще не сообщала. Магазин видел счётчик и не видел, что на нём происходит: ни добавлений в корзину, ни отправленных форм, ни кликов по телефону.
  • Двадцать одно событие: корзина, оформление, заказ, быстрый заказ, обратный звонок, пять видов заявок из карточки, форма контактов, подписка, отзыв, вопрос, клик по телефону и мессенджеру, поиск, избранное, сравнение, установка приложения и разрешение на push.
  • Один идентификатор на обе системы. Метрике он уходит через 

    reachGoal
    , GA4 — именем события. Два поля на одно и то же значили бы магазин, где воронки не сходятся.
  • Телефон, мессенджер и поиск считаются один раз за посещение: без этого один покупатель, нажавший номер дважды, давал бы две конверсии.
  • События, которые магазин узнаёт от сервера — просмотр товара, начало оформления, оформленный заказ, — берутся из слоя данных, а не отправляются вторым экземпляром: иначе в отчёте было бы два заказа вместо одного.
  • Добавление в корзину теперь уходит и в электронную коммерцию — с названием, ценой и количеством. Цену витрина берёт числом от сервера: разбирать «1 299 ₽» обратно в число на стороне браузера значит однажды получить в отчёте цену в тринадцать копеек.
  • У разделов настроек появилось пояснение над полями — там, где смысл не виден из подписей. Цель аналитики сама по себе ничего не говорит, пока не сказано, откуда её взять.
Карточка товара в списках
  • Вариант выбирается прямо в карточке. Цвета и размеры под названием были витриной: показывали, что выбор есть, и на этом заканчивались. Покупатель нажимал «в корзину» и получал «выберите значения опций» — а выбрать их было негде, кроме страницы товара. Теперь значения кликабельны, и если это единственная обязательная опция товара, покупка завершается прямо из списка.
  • Если у товара есть и другие обязательные опции, открывается быстрый просмотр — и выбранное в карточке уже отмечено в нём. Спрашивать второй раз про тот же цвет незачем.
  • Нажали «в корзину», не выбрав обязательное, — подсвечивается строка вариантов, а не приходит отказ от корзины: ответ находится в двух сантиметрах от кнопки.
  • Значения с исчерпанным остатком показываются перечёркнутыми и не выбираются: корзина их всё равно не примет.
  • Выбирать можно там, где выбор один и из готового списка — цвет, размер, объём. Флажки, текст и даты остаются страницей товара.
  • Варианты больше не прячутся в режиме списка: раньше это была подсказка, теперь это выбор, и прятать его значит возвращать покупателя на страницу товара за одним нажатием.
Шапка
  • Ссылки на страницы в шапке. Раньше в конструкторе была только жёстко заданная ссылка на контакты: вывести в служебную строку доставку, оплату и «о магазине» было нечем. Теперь есть блок «Ссылки на страницы» — что показывать, задаётся списком в настройках шапки, где показывать, решает конструктор. Вместо страницы магазина можно указать свой адрес.
Исправлено — админка
  • Поля «Кратность и упаковка» показывались на всех вкладках карточки товара. Блок вставлялся прямо перед началом следующей вкладки — то есть за уже закрытой вкладкой «Данные». Такой блок не принадлежит ни одной вкладке, и браузер показывает его всегда: поля висели и над атрибутами, и над опциями, и над SEO. Теперь блок встаёт внутрь «Данных» — рядом со штатным «Минимальным количеством», где ему и место.
Оформление блоков и разделов
  • Цвет текста, при котором текста не видно, шаблон больше не исполняет. Владелец ставит блоку тёмный фон и оставляет «цвет текста → тёмный» — потому что текст карточек внутри блока и правда тёмный, — а заголовок пропадает: тёмное по тёмному даёт контраст 1.05 при минимально читаемых трёх. Теперь такой выбор отменяется. Отменяется только доказуемо нечитаемое: на сером фоне тёмный текст читается, и там решение остаётся за владельцем.
  • Настройка переименована в «Цвет текста на фоне блока» и объясняет, что карточки внутри цвет не меняют — у них своя подложка. Прежнее название и приводило к выбору, от которого пропадал заголовок.
  • SEO-блок с картинкой занимает всю ширину. Ограничение строки в 104 знака нужно, чтобы текст читался, но на широком контейнере оно оставляло справа пустую треть страницы — блок выглядел недоделанным рядом с витринами во всю ширину. Теперь текст и картинка идут колонками: строка той же длины, а место справа занимает картинка, а не пустота.
  • Картинка и описание категории — один блок. Порознь это была полоса баннера и оторванный от неё текст, хотя рассказывают они об одном. Вместе — снимок слева, текст справа. Работает и над списком товаров, и под ним.
Фильтр и меню: два модуля в поставке
  • Фильтр товаров в шаблоне — FilterTAP. Собственный фильтр темы снят: он умел цену, производителя, характеристики и опции, а FilterTAP — свой указатель с очередью, посадочные страницы, SEO-роутинг, объединённые карточки, диаграмму цен и импорт подборок в XLSX. Держать рядом два фильтра значило бы путать покупателя и делить между ними адреса.
  • Конструктор меню NavMenu. Мегаменю темы осталось строить меню по умолчанию — оно собирает разделы, бренды и картинки из каталога само. NavMenu включается в «Настройки → Меню каталога» и нужен там, где меню собирают руками: свои пункты, расписание показа, разные меню для групп покупателей.
  • Оба модуля продаются отдельно, а в теме работают по её лицензии. Второй ключ покупать не нужно и вводить негде. Вынутая из поставки копия в чужом магазине не заработает: она спрашивает ядро темы, а оно спрашивает ключ. Витрина при этом не ломается — страница остаётся со штатным фильтром и меню OpenCart.
  • Обновляются модули одной командой, и правку, которая их закрывает, сборщик релиза проверяет перед упаковкой: выложенный архив уже не отозвать.
  • Категория снова выбирает товары штатной моделью OpenCart. Своя выборка была нужна прежнему фильтру, но именно через события штатной модели в неё встраивается FilterTAP — со своей моделью он отбирал бы товары, о которых страница его не спросит.
  • Витрины «хиты раздела» рядом с отфильтрованным списком фильтру не подчиняются: иначе блок показывал бы ровно то же, что и список.
  • Отфильтрованными страницами в поиске распоряжается теперь FilterTAP. У него на это своя политика с настройками — вплоть до посадочных страниц, которые, наоборот, должны попадать в индекс.
Исправлено — вёрстка
  • Страница категории приезжала стоковой вёрсткой. OpenCart держит каталог шаблонов одной настройкой на весь запрос и переставляет её в обработчике 

    event/theme
    . Между ним и отрисовкой успевает вклиниться чужой модуль: FilterTAP собирает панель из нескольких кусков, каждый кусок — отдельная отрисовка, а его шаблоны лежат в 

    default
    . После них настройка указывала на 

    default
    , и категория рисовалась стоковым шаблоном с нашими данными. Тема теперь ставит каталог шаблонов последним словом перед отрисовкой — это защищает и от любого другого модуля с шаблонами в 

    default
    .
  • В шапке на страницах списка вместо «Сравнить» стояло «Сравнение товаров (%s)» — с незаменённым 

    %s
    . Обработчик 

    event/language
     подмешивает в данные все строки языка списка разом и перекрывал уже подставленное контроллером шапки число.
Оформление блоков
  • Цвет текста подбирается под фон блока. Владелец магазина ставит блоку тёмный фон — и получает тёмный заголовок на тёмном фоне: отдельную настройку цвета текста никто не ищет. Теперь шаблон считает яркость фона и решает сам, тем же правилом, что и у шапки; ручной выбор остался для картинки фона, яркость которой шаблону неизвестна.
  • «Цвет текста → Светлый» больше не выжигает карточки. Настройка меняла цвет всему блоку разом, а карточки внутри рисуют собственную белую подложку — и преимущества, товары, бренды, отзывы и статьи становились белым по белому. На тёмном фоне блока их пропадало больше сотни надписей за раз. Цвет блока теперь получает только то, что лежит прямо на его фоне; карточкам возвращается палитра темы.
  • Акцентный цвет тоже подбирается под фон блока: светло-синяя ссылка ночной палитры на светлой плашке читалась не лучше заголовка.
  • Оформление заработало у ленты историй. Фон, отступы и цвет текста показывались в настройках блока, но не применялись ни к чему: секция историй не была секцией, и правила оформления её не находили.
  • Оформление заработало у стены категорий. Настройки применялись только при ручном списке категорий; при автоматическом — режиме по умолчанию — фон и отступы молча пропадали.
  • У баннера в режиме слайдера поля оформления секции убраны из формы: слайд занимает всю ширину сам, подложку и цвет текста там задают собственные поля модуля, а поля секции не делали ничего.
Сборка
  • Сборщик релиза больше не создаёт пару ключей подписи при каждом запуске. Раньше без флага 

    --keep-keys
     обычная пересборка архива тихо создавала новую пару, а прежняя стиралась без следа: магазины, которым лицензия выдавалась старым ключом, переставали принимать ответы сервера, и вернуть прежний ключ было неоткуда. Теперь ключи берутся прежние, пересоздать пару можно только явным 

    --new-keys
    , и прежняя при этом складывается в 

    .aero/keys/archive
     с отметкой времени. 

    --keep-keys
     принимается по-прежнему и ничего не меняет.
  • В описании сервера появился раздел о паре ключей: где она лежит, почему её нужно держать в копии и в каком порядке менять.
Приложение на телефоне и push-уведомления
Витрину можно установить на телефон и открывать с рабочего стола — без адресной строки, со своим значком и заставкой. Работает по HTTPS.

  • Манифест приложения из настроек: название, короткое название, значок, цвета, ориентация, режим окна, быстрые действия по долгому нажатию. Значки всех размеров, включая тот, что Android вписывает в свою форму, готовятся из одной картинки.
  • Манифест и служебный скрипт отдаются через 

    index.php
    , файлов в корне сайта шаблон не создаёт: корень на хостинге часто закрыт на запись, а модуль, который просит «положите sw.js рядом с index.php», покупатель ставит неправильно.
  • Работа без сети. Страницы запрашиваются у сайта и берутся из памяти телефона только при её отсутствии — цена и наличие меняются, показывать вчерашние нельзя. Стили и скрипты идут из памяти сразу, с обновлением в фоне: их адрес содержит отпечаток настроек, устаревшего покупатель не увидит. Картинки товаров хранятся с ограничением по числу. Корзина, оформление и кабинет не сохраняются никогда.
  • Своя страница «нет сети» вместо страницы браузера — с логотипом, текстом и кнопкой «Повторить». Не тянет ни одного файла снаружи, иначе без связи она осталась бы без оформления. Как только связь возвращается, страница перезагружается сама.
  • Предложение установить приложение — полосой внизу экрана после заданной задержки или кнопкой в подвале. Закрытое предложение не возвращается раньше указанного срока. Для iPhone — подсказка с путём через «Поделиться»: Safari не умеет устанавливать приложение по кнопке.
  • Отпечаток настроек в адресе служебного скрипта: правка настроек доезжает до установленного приложения сразу, а не через сутки, когда браузер сам решит его перечитать.
Push-уведомления приходят на телефон и компьютер, даже когда сайт закрыт. Своя реализация протокола, без composer и сторонних библиотек: покупатель ставит шаблон архивом через админку, и «сначала выполните composer install» означает для него «не работает».
  • Пара ключей магазина создаётся кнопкой на странице рассылок. Шифрование уведомления ключами конкретного браузера и подпись запроса по стандартам RFC 8291, 8188 и 8292 — средствами самого PHP.
  • Проверка окружения не ограничивается списком функций: шаблон пробует создать ключ. На сборках без файла настроек openssl список функций полон, а создание ключа молча не работает — владелец магазина узнавал бы о поломке из неотправленной рассылки.
  • Перед системным запросом разрешения показывается своё окно с объяснением. Системный показывается один раз навсегда, отказ в нём необратим; отказ в своём не стоит ничего и повторяется через настроенный срок. Момент показа: по времени, после прокрутки страницы, после добавления товара в корзину или только по кнопке.
  • Приветственное уведомление сразу после подписки — покупатель видит, как это выглядит, владелец видит, что канал работает.
  • Раздел Aero → Push-рассылки: состояние, подписчики с разбивкой по устройствам, список рассылок. Форма рассылки с предпросмотром того, что увидит покупатель, и счётчиком знаков.
  • Отправка порциями со счётчиком в кнопке. Рассылка на десять тысяч телефонов не упирается в лимит времени на середине — иначе половина подписчиков получила бы уведомление, и никто не знал бы, какая.
  • Отложенные рассылки уходят по расписанию через адрес для планировщика хостинга. Адрес защищён отдельным ключом.
  • Статистика по каждой рассылке: доставлено, не доставлено, переходы и их доля от доставленных — а не от базы: иначе неудачная доставка испортила бы оценку текста, который сработал.
  • Уведомление о смене статуса заказа тем, кто оформлял его из кабинета и подписан.
  • Мёртвые подписки удаляются сами по ответу службы доставки; подписка с пятью ошибками подряд отключается. Адрес подписки принимается только от известных служб — иначе магазин можно заставить слать запросы куда угодно от своего имени.
  • Ключи подписи и ключ планировщика не попадают в выгрузку настроек: файл настроек передают разработчику и переносят на второй магазин, а ключ подписи в нём позволил бы рассылать уведомления вашим подписчикам от вашего имени. Загрузка собственного файла настроек ключи не стирает.

Оформление и вёрстка

  • Слой совместимости с Bootstrap 3 перебивал собственные классы колонок: правило ширины весило больше, чем 

    .col-sm-6
    , и любая сетка схлопывалась в одну колонку. Это касалось всех страниц, которые берутся из стоковой темы — кабинета, входа, регистрации, оформления — и всех сторонних модулей.
  • Стоковые модули OpenCart переопределены в теме: категории, страницы, кабинет, магазины сети, витрины товаров, баннеры и слайдеры. Раньше они приносили в нашу колонку свою сетку 

    col-sm-3
     и оставались без оформления.
  • Длинное слово больше не распирает страницу. В русском таких слов много, и одно из них в заголовке заставляло весь сайт ездить вбок на телефоне.
  • Одноколоночные сетки переведены на 

    minmax(0, 1fr)
    : колонка на 

    1fr
     не сжимается уже своего содержимого.
  • Логотип, боковые колонки и нижняя панель научились сжиматься.
  • Проверено: 15 страниц на ширинах 375, 768 и 1280 — горизонтального переполнения нет ни на одной.
Страница контактов
  • Переписана целиком: отделы карточками, у каждого свои телефон, почта, часы и адрес; телефон набирается, почта открывается, мессенджер запускается.
  • Код карты вставляется целиком, ширину и высоту шаблон подгоняет сам. Место карты — под заголовком, рядом с отделами или во всю ширину.
  • Реквизиты списком «название — значение», с примечанием.
  • Форма обратной связи с настраиваемым заголовком.
Настройки и модули
  • Способы оплаты в подвале задаются списком: надпись, значок или своя картинка, ссылка.
  • Свои каналы связи: мессенджер, соцсеть или маркетплейс, которого нет в списке, со своим значком и цветом.
  • Слайдер получил свои слайды: заголовок, подзаголовок, кнопка, положение текста, цвет, затемнение и отдельная картинка для телефона. Плюс пропорции для десктопа и телефона, стрелки, точки и остановка под курсором.
  • Витрина товаров умеет ручной подбор: товары выбираются поиском по названию, порядок сохраняется.
  • Стена категорий умеет ручной список с своими названиями и картинками.
  • Новый модуль «SEO-текст»: вступление, смысловые блоки, вопросы и ответы с разметкой FAQPage, сворачивание длинного текста и привязка к конкретным категориям.
Шапка и поиск
  • Тёмный текст на тёмной шапке. Цвет текста шапки был отдельной настройкой со светлым значением по умолчанию: владелец менял фон на тёмный и получал нечитаемые надписи. Теперь цвет подбирается по яркости фона — по восприятию, а не по среднему трёх каналов, иначе синий #0F62FE выходит «светлым», хотя белый текст на нём читается прекрасно. Ручной выбор остался для случаев, когда фоном стоит картинка и угадывать не по чему.
  • Приглушённый текст внутри шапки (служебная строка, подпись под телефоном) берёт её собственный цвет с прозрачностью, а не «серый» из палитры страницы.
  • Строка поиска сжималась до обрубка — «Поиск по ка…» в 156 пикселей. Теперь у неё есть предел, а ряд шапки при нехватке места переносится: вторая строка лучше обрубка.
  • Новый вид поиска — значком. Шапка остаётся свободной под логотип, меню и телефон, а поиск открывается окном сверху по нажатию: поле сразу получает фокус, закрывается крестиком, нажатием мимо и Escape.
Настройки категории и карточки списка
  • Картинка и описание категории получили своё место: над товарами, под товарами или не показывать — по отдельности для каждого. Широкая картинка над списком нарядна, но отодвигает товары ниже первого экрана; SEO-текст внизу не мешает покупателю и виден поисковику.
  • Характеристики в карточке списка — две-три главные строки под названием. Помогают там, где выбирают по цифрам: диагональ, объём, мощность. Число строк настраивается.
  • Варианты в карточке списка — значения первой опции: цвета, размеры, объёмы. Покупатель видит, что выбор есть, не открывая товар. Показывается именно первая опция: вывалить в карточку все — значит заменить ею страницу товара.
    Оба блока по умолчанию выключены и собираются одним запросом на весь список, а не по запросу на карточку. В списочном виде они скрыты — там под названием есть описание, — а на телефоне скрыты характеристики: в две колонки для них нет места.
  • Значки на кнопках «В закладки» и «В сравнение» в карточке товара. Две одинаковые кнопки-обводки различались только текстом, и на них не падал взгляд. Товар в закладках подсвечивает значок заливкой: понять это по одной смене подписи покупатель не успевает.
Настройки карточки товара
  • Краткие характеристики выключаются. Магазину одежды они не нужны — там решает фотография; магазину техники нужны обязательно. Число строк тоже настраивается: больше семи покупатель не читает, он идёт во вкладку.
  • Краткое описание включается. Первые строки описания рядом с ценой. Отдельного поля под них в OpenCart нет, поэтому берётся начало обычного описания — и это повод написать первый абзац по делу, а не «наш магазин рад предложить». Длина настраивается, обрезка идёт по границе слова и без разметки: куском HTML можно оборвать открытый тег и утащить за собой вёрстку всей страницы. По умолчанию выключено — у большинства магазинов описание начинается с общих слов.
Исправлено
  • Область под фотографией была вдвое выше самой фотографии. Колонки карточки растягивались по высоте самой длинной, и галерея как элемент сетки вытягивалась до высоты сведений — картинка честно занимала всю выданную высоту. При колонке в 375 пикселей квадратная область становилась 916. Теперь колонки не растягиваются.
  • Пропорции фотографии стали настройкой: квадрат, 4:3, две вертикальных и «по картинке». Квадрат подходит технике, вертикаль — одежде.
  • Число кратких характеристик резалось по каждой группе отдельно: «пять строк» у товара с тремя группами превращались в пятнадцать. Теперь список собирается на сервере и ограничен целиком.
Карточка товара: середина и вкладки
Центральная колонка и вкладки выглядели черновиком: серая строка сведений, голый список характеристик посреди белого поля и вкладки, стоящие прямо на фоне страницы.

  • Сведения о товаре стали метками. Одной серой строкой артикул, бренд и рейтинг сливались в кашу и читались как служебная подпись — хотя две из трёх ведут туда, куда покупатель и хочет попасть. Рейтинг встал первым: по нему решают, читать ли дальше.
  • Характеристики собраны карточкой с заголовком «Коротко о товаре» и ссылкой на полный список. Голая выписка из пяти строк посреди пустоты выглядела накладной, а не частью страницы.
  • Ссылки «Все характеристики» и «2 отзыва» открывают нужную вкладку, а не просто прокручивают к полосе: раньше покупатель попадал на закрытую вкладку и решал, что ссылка не работает.
  • Вкладки собраны в такую же панель, как остальные блоки страницы. Полоса вкладок прокручивается вместо переноса — вкладок бывает шесть, и вторая строка из одной «Вопросы и ответы» выглядела обрывком. Счётчик у вкладки стал меткой, а не курсивом посреди подписи. Длинному описанию задана своя ширина строки.
Исправлено
  • Строка меню каталога выходила за экран на широком мониторе. Прошлой правкой я снял с неё прокрутку — она обрезала выпадающие списки, — но забыл разрешить перенос: при большом числе пунктов ряд просто уезжал вправо. Теперь переносится.
Цена по запросу и предзаказ
Два случая, когда «Купить» бесполезна, а посетитель просто уходит.

  • Цена не заполнена — вместо «Купить» кнопка «Узнать цену», вместо «0 р.» подпись: ноль в карточке читается как «бесплатно» и подрывает доверие ко всему прайсу. Нажатие открывает форму с именем и телефоном. Так работают магазины оборудования и всего, что считают по проекту: цена есть, но называют её после разговора.
  • Товара нет в наличии — кнопка «Оформить предзаказ» с той же формой. Отличается от «Сообщить о поступлении» тем, что это заявка на покупку, а не подписка на письмо. Если включены обе, предзаказ идёт кнопкой, а подписка — ссылкой под ней.
Обе кнопки работают и на странице товара, и в списках; обе настраиваются и выключаются, подписи меняются. Заявки падают в общий список «Aero → Заявки» своими типами, с фильтром по ним.
Предзаказ по умолчанию выключен: он обещает покупателю поставку, и включать его за владельца магазина нельзя.
Исправлено

  • Списки товаров из стоковых контроллеров OpenCart — поиск, акции, страница бренда — приходят без остатка и без признака пустой цены: в карточку OpenCart кладёт только то, что нужно его собственному шаблону. Теперь список достраивается одним запросом на страницу, а карточка не принимает отсутствие данных за ноль.
Шапка на телефоне: телефон и порядок
  • Телефон не показывался нигде уже от планшета. Старое правило прятало блок целиком на всём, что уже 1200 пикселей, — включая мобильную шапку, где звонок и есть главный способ связи. Теперь на планшете остаётся номер (уходит только подпись под ним), а на телефоне вид выбирается настройкой: значком трубки (по умолчанию — номер целиком съедает половину строки), номером или не показывать.
  • Кнопка меню переехала к правому краю. Логотип забирает свободное место, телефон и меню прижаты вправо: большой палец достаёт до угла, а взгляд не ищет кнопку среди прочего. Конструктор шапки при этом один — порядок на телефоне задаётся стилями, а не вторым набором настроек.
Страница акций
Написана в теме. Раньше отдавалась стоковым шаблоном на Bootstrap: своя сетка, свои карточки, чужие иконки — карточки выглядели кривыми, потому что это были вообще другие карточки. Теперь та же витрина, что в категории: тулбар с видом и сортировкой, та же сетка, та же карточка.
Исправлено

  • Список «Ещё» открывался у левого края экрана. Пункты меню сделаны точкой отсчёта «static» ради мега-панели во всю ширину — а маленький список наследовал это и вставал по левому краю всей строки, за десяток пунктов от того, на который навели. Теперь он отсчитывается от своего пункта и прижат к правому краю: «Ещё» стоит в конце строки, и список у левого края вылезал бы за экран.
    Строка меню при этом перестала обрезать выпадающие списки: у неё стояла горизонтальная прокрутка, а она по правилам CSS включает обрезку и по вертикали — список висит ниже строки и обрезался целиком. На широком экране прокрутка не нужна: лишние пункты для того и уходят в «Ещё».
Меню на телефоне
Выдвижная панель служит двумя входами сразу — бургер в шапке и «Каталог» в нижней панели, — но показывала только категории. Строки меню с своими пунктами на телефоне нет вовсе, и попасть в них было неоткуда.
Теперь это меню сайта целиком:

  • «Каталог» первым разделом — за ним приходят чаще всего, и он открывается сразу, без лишнего нажатия.
  • «Разделы» под ним — свои пункты строки меню, блог и всё, что на широком экране стоит рядом с категориями.
  • Разделы разделены подписью и линией: без них список читался как один длинный перечень из тридцати строк.
  • Заголовок панели стал «Меню» вместо «Каталог» — она давно не только каталог.
Бургер в шапке при этом остаётся: он открывает меню сайта, а каталог живёт в нижней панели. Дублирования больше нет.
Плавающая кнопка переключателя демо опустилась под выдвижные панели и модальные окна: она не должна закрывать собой то, что показывает.
Шапка на телефоне
Внизу экрана уже стоит панель с каталогом, поиском, избранным, корзиной и кабинетом, а шапка повторяла её же: девять элементов в ряд, три строки и 182 пикселя высоты.
Теперь при включённой нижней панели шапка оставляет только то, чего в панели нет: кнопку каталога, логотип и телефон. Высота — 63 пикселя вместо 182. Если нижняя панель выключена настройкой, шапка остаётся полной: уносить навигацию в никуда нельзя.
Плавающая кнопка демо-панели поднялась над нижней панелью, а само окно на телефоне стало шторкой снизу.
Панель демонстрации

  • Добавлены переключатели шрифта (шесть семейств и системный) и теней (плоско, мягкие, глубокие). Раньше их не было, хотя про шрифт спрашивают почти так же часто, как про цвет.
Исправлено
  • У стены категорий и блока преимуществ заголовок на витрине был служебным именем модуля: в списке расширений нужно «Демо Автозапчасти · Категории», а покупателю — «Категории каталога». Разведены на два поля, старые блоки продолжают брать название, если заголовок пуст.
Исправлено: обновление поверх работающего магазина
  • Витрина падала после обновления файлов, если в новой версии появлялась колонка в базе: 

    Unknown column 'sl.video'
    . Причин было две, и обе устранены.
    Первая: отпечаток установки считался по именам таблиц, а не по их описанию. Новая колонка в существующей таблице его не меняла, поэтому доустановка не срабатывала — даже после захода в админку.
    Вторая: правки схемы выполнялись только из админки, а новый код с запросом к новой колонке начинал работать сразу после перезаписи файлов. Между этими моментами витрина падала.
    Теперь витрина дописывает недостающие таблицы и колонки сама, при первом же заходе: одно сравнение строки на запрос и настоящая работа один раз за обновление. Права, события и настройки остались работой админки — на витрине им делать нечего.
  • Запросы к новым полям вдобавок проверяют, есть ли колонка, и обходятся без неё. Страховка на случай, когда доустановка почему-либо не прошла: магазин продолжает работать, просто без нового поля.
Истории
  • Просмотр открывался под шапкой. Полноэкранный просмотр сидел на слое 120, а шапка — на 300: верх истории уходил под меню и не нажимался. Теперь просмотр на том же слое, что и модальные окна.
  • Лента выводится высокими карточками, а не только кружками. Кружок хорош, когда истории дополняют витрину; карточка — когда они и есть первый экран: её видно издалека, в неё помещается название целиком, и она сразу показывает содержимое, а не аватар. Настраиваются пропорции (9:16, 2:3, 3:4) и размер.
  • Слайд может быть видео. Принимается и свой файл, загруженный в каталог 

    image
    , и ссылка на ролик — YouTube вместе с Shorts, ВКонтакте с клипами, Rutube с shorts, а также прямая ссылка на mp4 со своего CDN. У своего файла полоска прогресса идёт по длительности ролика, а не по числу из настроек. В ленте у такой истории появляется значок ролика, а картинка остаётся обложкой.
  • У блока историй появились собственные настройки: вид ленты, размер, заголовок над лентой и число историй. Раньше настраивать было нечего — кнопка «Редактировать» просто вела в редактор историй, который никуда не делся.
Витрина демонстрации
Показать шаблон одной главной страницей нельзя: у продуктового магазина и у магазина одежды разный набор блоков, разная шапка и разная плотность, а не только цвет. Обычно это решают пятью отдельными установками на поддоменах — пять админок, пять обновлений, пять баз.
Здесь тематики живут на одном домене. Каждая получает собственный макет главной со своим набором блоков, а посетитель переключает их из панели в углу экрана — и видит пять разных магазинов подряд, не перезагружая ничего, кроме страницы.

  • Развёртывание одной кнопкой: Aero → Быстрый старт → Развернуть витрину, либо 

    php .aero/tools/demo.php
     из консоли. Повторный запуск переписывает своё и не плодит копий; штатный макет главной и чужие модули не трогаются вовсе.
  • Каждая тематика задаёт палитру, шрифты, форму элементов, плотность сетки, вид шапки и подвала и свой состав главной: где-то истории и журнал, где-то бренды и SEO-текст, где-то промо строкой с прокруткой.
  • Слайдер в разных тематиках листается по-разному — прокруткой, проявлением, выталкиванием: демо должно показывать, что способов несколько, а не один.
  • Выбор посетителя живёт в его печенье. Он не меняет магазин, не виден другим и снимается кнопкой «Вернуть как было».
  • Панель по-прежнему привязывается к своим доменам при сборке (

    --demo-hosts
    ), так что в проданной копии её нет.
Модули
  • Слайд баннера может обойтись без картинки — красится своим цветом. Под крупную надпись ровный фон работает лучше фотографии, а демо теперь не требует ни одной чужой картинки в поставке.

Исправлено

  • Стили админки грузились без версии в адресе: после обновления шаблона браузер отдавал их из кэша, и половина экрана оставалась оформленной по-старому. Из-за этого же подсказка клавиши в поиске по настройкам выпадала под поле.
Новый модуль: промо-блоки
Баннер обычно бывает одной картинкой со ссылкой: текст на нём нарисован, поэтому его не переведёшь, не прочитает поисковик, а на телефоне надпись сжимается вместе с картинкой до нечитаемого.
В новом модуле текст живёт отдельно от изображения — надзаголовок, заголовок, описание и кнопка лежат поверх фона обычной разметкой. Картинки может не быть вовсе: плитка красится своим цветом, и это не запасной вариант, а полноценный — ровный фон под текстом читается лучше пёстрой фотографии.

  • Три раскладки: сетка, мозаика с крупной первой плиткой и строка с прокруткой пальцем.
  • Ширина и высота каждой плитки задаются в колонках сетки, а не пикселями: мозаика перестраивается сама, когда колонок становится меньше. Шире сетки плитка не станет — иначе ряд съезжает.
  • Шесть положений текста, светлый или тёмный цвет под фон, затемнение картинки, три вида кнопки и выбор поведения при наведении.
  • От 992 пикселей плиток в ряду вдвое меньше, на телефоне — одна: промо в четверть экрана не читается ни на каком макете.
Модули и админка
  • Слайдер баннеров листается четырьмя способами: прокруткой, как раньше, проявлением, наплывом с приближением и выталкиванием вверх. Длительность смены настраивается. Прокрутка осталась основным способом — она листается пальцем сама и работает без скриптов; остальные складывают слайды стопкой и получают собственный свайп, иначе на телефоне слайдер выглядел бы сломанным.
  • Связь с автором в шапке админки — рядом со счётчиком заявок, с числом непрочитанных ответов. Ведёт сразу на вкладку переписки: ссылка с якорем теперь открывает нужную вкладку центра Aero.
  • Поиск по настройкам стал заметным: подсказка о клавише в самом поле, «/» и Ctrl+K для перехода в него, Escape и крестик для сброса, счётчик найденного и метка раздела у каждого найденного поля. Сам поиск был и раньше, но сливался с деревом разделов, и его не находили.
  • Логотип встал перед кнопкой «Каталог». Обратный порядок принят у маркетплейсов, где логотип и так известен наизусть; обычный магазин сначала представляется. Порядок остаётся любым — оба блока переставляются в конструкторе шапки, о чём теперь сказано в подсказке.
Исправлено
  • В быстром просмотре не работали ни переключение фотографий, ни пересчёт цены. Обработчики привязывались к элементам, найденным при загрузке страницы, а разметка окна приходит позже — и на странице категории таких элементов нет вовсе. Переведено на делегирование: та же разметка теперь работает и в окне, и на странице товара. Заодно цена пересчитывается при вводе количества руками, а не только кнопками.
  • В оформлении заказа справа висела пустая рамка. Итог приходит из checkout/confirm, а OpenCart отдаёт его пустой оболочкой, пока не заполнены адрес, доставка и оплата. Теперь там сразу виден состав заказа с суммой, а итог со способом оплаты подменяет его, когда появляется чем.
Модули и админка
  • Главный слайдер: картинка не заполняла слайд. Изображение прогонялось через штатное уменьшение OpenCart, а оно всегда отдаёт холст ровно заданного размера и дополняет картинку белым по краям. Фотография 16:9 в полосе 1600×560 превращалась в картинку 995 пикселей шириной посреди белых полей — и никакая настройка её уже не растягивала. Теперь вторая сторона считается от пропорций самой картинки, полей не появляется вовсе.
  • Появилась настройка «Как вписывать картинку»: заполнить с обрезкой или вписать целиком. Фотографии обычно заполняют, готовый баннер с надписью вписывают — иначе надпись срезается. При «вписать» поля по краям красятся фоном блока, а не остаются серыми. В подсказке к слайдам указан рекомендуемый размер.
  • Витрина брендов: марки можно перечислить вручную, в своём порядке, со своим названием и картинкой. Логотип в карточке производителя часто сделан под страницу бренда и в витрине смотрится плохо, а менять его там ради витрины — портить страницу.
  • Страница брендов переписана. Была алфавитным указателем из голых ссылок — сто сорок строк, среди которых марку ищут чтением. Теперь плитки с логотипами и числом товаров, алфавит остался указателем сверху и появляется от двадцати марок. Списочный вид сохранён для магазинов без логотипов, вид переключается в настройках.
  • SEO-текст переименован в SEO-блок и дополнен: картинка с обтеканием и подписью, оглавление по подзаголовкам, блок полезных ссылок под текстом и — главное — запрет вывода со второй страницы пагинации. Один и тот же текст на страницах 2, 3 и дальше это дубли, за которые понижают всю серию сразу.
  • Уведомления о заявках в шапке админки. Заявка, о которой владелец узнаёт только из письма, теряется в первый же занятый день. Счётчик висит рядом с именем администратора и считает только то, что требует действия: новые заявки, вопросы без ответа, отзывы и комментарии на модерации. Из списка — сразу в нужный раздел.
  • Экран решений: подробное описание раскрывается по кнопке, обложки стали квадратными и крупнее, к цене дописывается знак рубля, добавлена кнопка демо. Список обновляется при каждом заходе на страницу, а если сервер недоступен — показывается прошлый, а не пустой экран.
Исправлено
  • Выпадающие списки внутри своих списков были пустыми. Колонка «Категория» в ручном списке стены категорий и любое поле-справочник внутри повторяющихся строк собирали только статические значения. Разбор типа теперь один на поля и на колонки.
  • Галочка согласия в заявках из карточки товара показывала покупателю служебные подстановки; общий блок согласия обходился стороной.
Проверено
  • Пересчёт цены в карточке от количества и опций: оптовые скидки (30 146 → 29 242 → 28 337 → 27 433), наценка опции (105 965 + 3 000), их сочетание и умножение на количество. Списком и переключателями. Работает верно, правок не потребовалось.
Вёрстка: сплошной проход по страницам
Проверены все страницы витрины на ширинах 375, 768, 1024 и 1440 в светлой и тёмной теме. Горизонтального переполнения не осталось ни на одной.
Переполнение и сетка

  • Правый слот шапки сжимался ниже своего содержимого: на 1024 кнопка корзины с суммой вылезала за контейнер, и вбок ездили все разделы сразу. Теперь сжимается строка поиска — она для этого и тянется.
  • Заголовок страницы уменьшается на телефоне долей от выбранной шкалы, а не фиксированным числом: «Сравнение товаров» в 40 пикселей занимало три строки и съедало первый экран.
  • Последняя хлебная крошка обрезается многоточием. В блоге она повторяла полное название статьи двумя строками прямо над самим заголовком.
Стоковые страницы OpenCart
Кабинет, вход, регистрация, оформление и ещё семь десятков экранов берутся из стоковой темы. Они выглядели чужими на своём же сайте.

  • Значки FontAwesome тема не подключает, и 

    <i class="fa fa-home">
     схлопывался в ноль: первая крошка «Главная» пропадала на каждой странице, а кнопки в закладках состояли из одного значка и были пустыми плашками. 25 значков перерисованы масками по текущему цвету — одинаково в светлой и тёмной теме.
  • Формы 

    .form-horizontal
     (регистрация, «моя информация», смена пароля) раскладывались как 2 к 10 без строки-обёртки: подпись жалась в 155 пикселей, «Подтверждение пароля» ломалось посреди слова. Приведены к тому же виду, что и поля темы.
  • Кнопки и поля стоковых страниц не брали настройки высоты, скругления и регистра — половина витрины игнорировала выбор владельца.
  • Таблицы истории заказов и возвратов на телефоне прокручиваются внутри себя, а не ужимаются в нечитаемые столбики.
  • Рамка 

    fieldset
     из девяностых заменена панелью темы; кнопка отправки больше не наезжает на текст согласия в регистрации.
Пустые состояния и настройки
  • Пустая корзина показывала гигантскую цифру 404 — тем же шаблоном OpenCart отдаёт и пустые возвраты, и регулярные платежи. Теперь цифра остаётся только у настоящей ошибки.
  • Оформление заказа: кружок шага показывал «1», а заголовок рядом — «Шаг 2», из чужой шестишаговой нумерации OpenCart.
  • Подвал без блока оплат прижимал копирайт к правому краю; блок контактов без заполненного телефона вырождался в голую ссылку без заголовка; контакты без реквизитов оставляли справа от формы пустую половину.
  • Тени и обводки в слайдере, поиске, мегаменю и фильтре были литералами и не слушались настроек «Тени» и «Рамка карточки» — в том числе режима «плоско».
  • Стоковые витрины товаров (

    Рекомендуемые


    Хиты


    Новинки


    Акции
    ) игнорировали число колонок из настроек и всегда давали 4 на 2.
Каталог
  • Секции на главной шли с разным шагом — 28 против 44 пикселей. Теперь все двенадцать одинаково.
  • Выдвижной фильтр на телефоне не закрывался: кнопки закрытия в шаблоне не было, а открытие блокировало прокрутку страницы. Уйти можно было, только применив фильтр. Добавлены крестик, затемнение, закрытие нажатием мимо панели и по Escape.
  • Карточки в ряду выравниваются: отзывы есть не у всех товаров, и без места под пустую строку рейтинга у соседей разъезжались название, наличие и цена. Место под две строки названия резервируется всегда.
  • Плитки подкатегорий и стены категорий приведены к одному виду — на одной странице один и тот же объект выглядел по-разному.
  • Панель управления списком на 375 занимала четыре строки и растаскивала списки; на 1024 «Сортировка» и «Показать» разъезжались по разным строкам и краям.
  • Стикеры не подлезают под кнопки быстрых действий, а сами кнопки на тач-устройствах уменьшены — три штуки поверх фотографии съедали угол карточки на телефоне.
Страница поиска
Написана заново. До этого её в теме не было вовсе: OpenCart отдавал стоковый шаблон на Bootstrap, и поиск выглядел как другой сайт — своя сетка, свои карточки, чужие иконки. Теперь это та же витрина, что и категория: тот же тулбар, та же сетка, та же карточка. Уточнение запроса поднято наверх (в стоковом шаблоне оно стояло под товарами, и до него не доходили), а поиск без результатов, как и 404, предлагает разделы каталога вместо тупика.
Вёрстка карточки товара и окон

  • Кнопки в блоке покупки переносятся, а не выдавливают его. «В сравнение» заглавными в колонку 300 пикселей не помещалось и вылезало за рамку. Заодно кнопка больше нигде не может раздвинуть своего родителя: подпись пишет владелец магазина, а регистр добавляет настройка — длина не ограничена ничем.
  • Товар без характеристик, опций и оптовых скидок больше не оставляет пустую колонку в треть экрана: страница складывается в две колонки — галерея и всё остальное, — а блок покупки получает нормальную ширину.
  • Фотография в карточке товара отбита от краёв так же, как подпись под ней. Раньше она упиралась в рамку, а текст стоял с отступом, и карточка выглядела собранной из двух разных.
  • Отступы модального окна переехали на само окно: содержимое приходит с сервера, и каждая новая форма про них забывала. Формы открываются в узком окне — растянутая на 900 пикселей форма из четырёх полей читалась плохо. На телефоне окно стало нижней шторкой во всю ширину.
  • Галочка согласия в заявках из карточки собиралась мимо общего блока: покупателю показывались служебные подстановки «соглашаюсь с {1} и {2}», а список форм-исключений и обязательность из настроек не работали.
  • Если документы согласия ещё не заведены, подстановка убирается вместе с предлогом. Раньше из текста по умолчанию получалось «соглашаюсь с и.» — и висело так на витрине с первого дня.
Демонстрация
  • Фон у блоков на главной, в шапке и в подвале: цвет, картинка, затемнение, светлый текст на тёмном. Блок в контейнере умеет растягивать фон на всю ширину окна, оставляя содержимое в колонке.
  • Пять тематических профилей — электроника, одежда, мебель, продукты, автозапчасти. Разворачиваются одной кнопкой в «Быстром старте»: палитра, шрифты, форма элементов, состав шапки и подвала, фоны блоков.
  • Готовые варианты шапки (пять) и подвала (три) — от классической до минимальной. Конструктор остаётся, но начинать с чистого листа больше не нужно.
  • Плавающая панель демонстрации на витрине: посетитель сам переключает тематику, цвет, шапку, подвал, скругления и ширину. Выбор живёт в печенье этого браузера и никому больше не виден — в базе не меняется ничего. Работает без JavaScript.
  • Панель по умолчанию выключена, а при сборке архива её можно привязать к своим доменам (

    --demo-hosts
    ): в чужих магазинах раздел настроек тогда не показывается. Демо-сборка кладётся отдельным архивом, чтобы не путать её с продажной.
Исправлено
  • Выдвижная корзина открывалась под затемнением и не нажималась — та же причина, что была у меню каталога.
  • В выдвижной корзине не было итогов и кнопки оформления: при обновлении подменялось только тело корзины.
Меню и навигация
  • Ширина выпадающего блока мегаменю — настройка: во всю ширину контейнера, по содержимому или по ширине пункта, с выравниванием по краю пункта или по центру строки.
  • Свои пункты меню: название, ссылка, значок, место и открытие в новой вкладке. Показ категорий в строке меню можно выключить — тогда меню собирается только из своих пунктов.
  • Состав нижней панели на мобильном задаётся списком: каталог, поиск, избранное, сравнение, корзина, кабинет, заказ звонка, связь или любая своя ссылка. Пустой список означает набор по умолчанию.
Каталог и товар
  • Товары с нулевой ценой или нулевым остатком уезжают в конец любой сортировки. Условие идёт первым ключом ORDER BY, поэтому работает и на второй странице, а не только внутри текущей.
  • Свои стикеры: код, надпись, цвета и значок задаются в настройках, а назначаются товару галочками прямо в карточке товара в админке. Форма товара при этом не патчится.
  • Блок доверия под кнопкой покупки: три обещания со значками.
Корзина
  • После добавления товара можно показывать уведомление, выдвижную корзину, окно с товаром или сразу переходить в корзину.
  • В выдвижной корзине — сопутствующие товары к тому, что уже в корзине.
Право
  • До трёх документов согласия: название и страница магазина или свой адрес. Названия подставляются ссылками в текст согласия вместо {1}, {2}, {3}.
  • Галочку согласия можно сделать необязательной, а отдельные формы — исключить из проверки. Все формы шаблона переведены на один блок согласия вместо шести копий.
Скорость
  • Загрузка стилей стала настройкой. По умолчанию обычная: страница больше не показывается без оформления первые секунды. Прежний режим — критические стили в head плюс отложенная догрузка — остался для тех, кто гонится за оценкой PageSpeed.
  • Заставка при загрузке: логотип, кольцо или полоса вверху страницы.
Админка
  • В панель настроек добавлены повторяющиеся списки: строки с теми же полями, что и одиночные настройки, включая выбор значка, картинки и страницы магазина.
  • Новый экран «Решения и запросы»: каталог решений автора, заявки на функционал с голосованием и переписка с автором. Всё приходит с сервера автора; сервер недоступен — экран объясняет это словами и ничего не ломает.
  • В поставку добавлен сам сервер решений: 

    .aero/server
    , SQLite, админка для решений, заявок, переписки и ключей лицензий.
Исправлено
  • Выдвижное меню каталога открывалось под затемнением, и нажать в нём было нельзя: шапка создаёт свой контекст наложения, и z-index панели считался от неё. Панель и затемнение выносятся к телу страницы.
  • Телефон в шапке получал отступы карточки со страницы контактов: оба блока назывались .ae-contact. У шапки теперь свой класс.
  • Вместо режима работы под телефоном можно вывести кнопку заказа звонка — или и то, и другое.
  • Поле «Доп. вкладка 3: текст» было скрыто, пока не заполнен заголовок, то есть ровно тогда, когда его и надо заполнять.
  • Из подвала убран обрывок шаблона, который печатался на каждой странице витрины.

1.0.1
Исправлено

  • Экраны шаблона в админке отдавали HTTP 500 на любом хостинге, кроме стенда разработки: шаблоны печатали значения для скрипта фильтром Twig, который добавлялся правкой файла ядра, а в поставку эта правка не входит. Значения готовит 

    \Aero\Js
    , шаблон печатает 

    {{ aero.js(...) }}
     — правок ядра не требуется. Самопроверка теперь следит, чтобы шаблоны обходились фильтрами стокового Twig.
  • Разметка из визуального редактора сохранялась как 

    &lt;p&gt;
    , а кавычки в подписях — как 

    &quot;
    : OpenCart пропускает весь POST через 

    htmlspecialchars
    , и текст не раскодировался обратно.
  • Пустой визуальный редактор отдаёт 

    <p><br></p>
    , из-за чего на витрине появлялась пустая вкладка.
  • Доустановка сверялась с номером версии, поэтому новые события и права до уже установленного магазина не доезжали. Теперь сверка идёт по отпечатку самого описания установки.
1.0.0
Первый выпуск.
Основа

  • Собственная дизайн-система на CSS-переменных: 249 настроек в 24 группах, светлая и тёмная палитры, пять готовых стилей.
  • Раздел «Элементы»: скругления, высоты, обводки, заливки, тени и скорость движения задаются из админки — кнопки, поля, карточки и стикеры магазина получают собственный вид без правки CSS.
  • Слой совместимости с Bootstrap 3 — сторонние модули OC3 работают без правок.
  • Ноль патчей ядра: всё через один ocmod и систему событий OpenCart.
  • Схема настроек одна на всё: из неё строятся панель, проверка значений, экспорт, импорт и CSS-переменные.
Каталог и навигация
  • Мегаменю на четыре уровня с товарами, брендами и баннерами внутри, дерево строится двумя запросами и кэшируется.
  • Живой поиск с исправлением раскладки клавиатуры.
  • Свой фильтр по цене, брендам, атрибутам и опциям — в комплекте, а не отдельной покупкой.
  • Категория: сетка и список, «показать ещё», сортировка и лимит без перезагрузки.
Товар и продажи
  • Галерея с увеличением, стикеры, таймер акции, разбор наличия.
  • Быстрый просмотр, быстрый заказ без корзины, живой пересчёт цены по опциям.
  • Главное фото меняется по выбранной опции.
  • Вопросы о товаре с модерацией и ответом магазина.
  • Набор «купить вместе» из сопутствующих товаров.
  • Расчёт доставки прямо в карточке — настоящими модулями магазина.
  • Заявки «сообщить о поступлении», «сообщить о снижении цены» и «нашли дешевле».
  • Дополнительные вкладки карточки из настроек — с визуальным редактором OpenCart, а не голым текстовым полем.
  • Блок доверия под кнопкой покупки: три обещания со значками.
Корзина и оформление
  • Корзина-поповер с прогрессом до бесплатной доставки.
  • Одностраничное оформление.
  • Минимальная сумма заказа — с проверкой на сервере, а не только в шаблоне.
Контент
  • Блог: статьи, разделы, метки, комментарии с ответами, привязанные товары, отложенная публикация, ЧПУ со слэшем.
  • Истории: полноэкранный просмотр с полосками прогресса.
  • Отзывы о магазине: сводка, фильтр по оценке, фотографии, ответ магазина.
  • Отзывы товара: фотографии, достоинства и недостатки, отметка «покупал здесь».
  • Витрины товаров с вкладками, слайдер, баннеры, стена категорий, бренды, преимущества.
Связь
  • Плавающая кнопка связи: телефон, почта, WhatsApp, Telegram, Viber, ВКонтакте и обратный звонок в одном списке.
  • Обратный звонок, подписка на рассылку.
  • Единый список заявок со всех форм с ограничением частоты.
SEO и скорость
  • JSON-LD: организация, сайт, товар с ценой и отзывами, список категории, хлебные крошки, статья блога.
  • OpenGraph, коды подтверждения прав на сайт.
  • Канонические адреса и 

    noindex
     на отфильтрованных страницах.
  • Образцы мета-тегов для пустых полей.
  • Карта сайта 

    /sitemap.xml
     с разбивкой по разделам.
  • Яндекс.Метрика и GA4 с электронной коммерцией.
  • Панель Core Web Vitals: LCP, CLS и INP у живых посетителей, 75-й процентиль по страницам и устройствам.
  • Критический CSS инлайном, отложенный JavaScript, WebP, 

    content-visibility
     на нижних секциях.
Право
  • Галочка согласия под формами, уведомление о cookie, ссылка на политику обработки данных.
Админка
  • Панель настроек в два уровня: шесть категорий сверху, разделы слева, поля плотной сеткой. Поиск идёт сразу по всем категориям.
  • Набор из 46 значков в пяти группах. Где нужен значок, его выбирают из набора или ставят свою картинку через штатный менеджер файлов — одним и тем же полем.
  • Текстовые поля с разметкой открываются в визуальном редакторе OpenCart.
  • Экраны модулей построены теми же виджетами, что и панель: правка делается один раз и видна везде.
Запуск
  • Мастер настройки: шесть шагов вместо двухсот полей.
  • Быстрый старт: демонстрационное наполнение по наборам.
  • Служебные страницы: 404 с поиском и разделами, «спасибо», технические работы, контакты.
Способ распространения:
Платно
Совместимость:
LiveStore 3.*OCStore 3.*OpenCart 3.*
Версия PHP:
PHP 7.2PHP 7.3PHP 7.4PHP 8.0PHP 8.1PHP 8.2PHP 8.3
Активация:
Вручную, по запросу в личные сообщенияВручную, по запросу на почтуВручную, через сайт автора
Получение файлов:
На сайте, в личном кабинете
Система защиты:
Своя
VQmod:
Нет
Ocmod:
Да
Events:
Да
Загружено:
14.09.2026
Обновление:
16.09.2026
Просмотров:
346
Покупок:
1

Написать

Ваше Имя:


Ваш отзыв: Внимание: HTML не поддерживается! Используйте обычный текст.

Оценка: Плохо           Хорошо

Введите код, указанный на картинке:




Файлы будут доступны после покупки
Метки:
шаблон opencart шаблон opencart 3 адаптивный шаблон универсальный шаблон магазин под ключ тёмная тема dark mode панель настроек конструктор дизайна фильтр товаров filtertap мегаменю конструктор меню navmenu живой поиск табличный вид каталога вид списком печать прайса стикеры товаров быстрый просмотр выбор варианта в списке карточка товара купить вместе блог истории stories отзывы о магазине вопросы о товарах pwa приложение на телефон push уведомления рассылки обратный звонок быстрый заказ купить в один клик узнать цену предзаказ сообщить о поступлении сообщить о снижении цены нашли дешевле оптовые цены цены от количества кратность упаковки калькулятор пересчёта таблицы размеров цены после авторизации личный кабинет письма магазина мессенджеры core web vitals скорость сайта seo микроразметка opengraph sitemap цели аналитики яндекс метрика ga4 152-фз электроника одежда мебель автозапчасти продукты


Ещё никто не оставил комментариев к записи.
Написать новый комментарий (для ответа пользуйтесь ссылкой под нужным комментарием)
 
Чат с поддержкой