Портал для сайта с автомобильными расчётами, который вы наполняете и продвигаете сами. Каждый расчёт описывается данными в админке: поля с единицами и границами, формула из нескольких строк, проверки, примеры, методика и вопросы. Править код ради нового калькулятора не нужно. Посетитель вводит свои литры, километры и суммы, а рядом видит результат, формулу и подстановку своих чисел. Введённые числа на сервере не сохраняются, номер автомобиля и VIN сайт не спрашивает. Под результатом каждого расчёта стоит настраиваемая оговорка: «Ориентировочный расчёт: используйте свои данные».
Сайт для посетителей
- Главная. Поиск по расчётам, категории с единицами результата, список основных расчётов, пример расчёта со шкалой и формулой и ссылки на справочник.
- Страница расчёта. Форма с разделами и кнопками «Подставить пример», результат на шкале и крупными цифрами, формула и «Ваши числа», таблица обозначений, примеры, методика и допущения, вопросы и ответы, похожие расчёты, дата проверки и номер редакции.
- Расчёт на лету. Результат и стрелка обновляются при вводе. Ошибки видны у поля: число вне границ, текст вместо числа, пустое обязательное поле. Запятая и точка принимаются одинаково.
- Работа без JavaScript. Сервер считает те же числа из адреса запроса и показывает результат на странице.
- Печать. Одна кнопка: результат, исходные числа, формула и оговорка без шапки, подвала и рекламы.
- Категории. Карточки расчётов с примером, сортировка, фильтр по единицам результата, блок «Как выбрать расчёт».
- Справочник. Статьи с датой проверки и номером редакции, оглавление, таблицы единиц, правила округления и формулы всех расчётов.
- Поиск. Подсказки при вводе, подсветка найденного, фильтр по типу; работает и без JavaScript.
- SEO. Адреса, заголовки и описания, sitemap.xml, robots.txt, canonical, разметка WebApplication, FAQPage, BreadcrumbList и Article, переадресации. Рейтингов и отзывов в разметке нет.
- Места под изображения. Вместо фотографий и иллюстраций стоит блок «Здесь будет изображение», пока вы не загрузили свои.
Расчёты как данные
- Поля. Название, ключ, единица, тип (число или список), минимум и максимум, пример, обязательность, целое число, раздел формы, подсказка.
- Формула. Одна строка — один шаг: `имя = выражение | подпись | единица`. Числа, ключи полей, прошлые строки, знаки `+ - * / ^`, скобки, сравнения и функции `ceil`, `floor`, `round`, `min`, `max`, `abs`, `sqrt`, `pow`, `if`, константа `pi`. Вычислитель написан для продукта и не использует `eval`: ввод посетителя в код не превращается.
- Шкала-спидометр. У главного результата задаётся значение «Шкала до»: стрелка и дуга на циферблате, деления и подписи. Если шкалу не задать, остаются крупные цифры.
- Округление. Дни и штуки округляются вверх, полные часы вниз, промежуточные значения не округляются. Двоичные хвосты вроде `10 · 1,1 = 11,000000000000002` не меняют результат.
- Проверки. Строки `условие | сообщение`: «конечный пробег должен быть больше начального», «расход больше 100 л/100 км». Сообщение видно посетителю вместо результата.
- Результаты. Главный результат и ещё один крупно, до шести дополнительных, число знаков и единицы задаются.
- Примеры. Кнопки «Подставить пример» и таблица примеров на странице. Сохранить расчёт, который не считает свой пример, нельзя.
- Проверка на примере в редакторе: кнопка считает значения на сервере и показывает подстановку.
- Версии. Каждое сохранение создаёт редакцию с комментарием, редакции сравниваются, вернуть можно любую; возврат сохраняется как новая редакция.
- Статусы и роли. Черновик, на проверке, опубликован. Редактор готовит расчёт и отправляет на проверку, проверяющий публикует, владелец получает уведомление.
- Копирование расчёта как отправная точка для нового.
Демонстрационное наполнение
36 расчётов и 10 статей справочника:
- Расход топлива: литры и пробег, две заправки, стоимость поездки, поездка туда и обратно, запас хода, город и трасса.
- Стоимость владения: итог за период, структура расходов, потеря стоимости, сравнение двух автомобилей, окупаемость доплаты.
- Шинные размеры: диаметр по маркировке, сравнение двух размеров, высота над дорогой, стоимость комплекта на километр, дюймовый размер.
- Скорость и время: время в пути, средняя скорость, расстояние, скорость по оборотам, расхождение спидометра.
- Пробег и интервалы: остаток до планового события, средний пробег, обслуживание на километр.
- Электромобиль: расход, стоимость зарядки с потерями, запас хода.
- Двигатель и мощность: рабочий объём, степень сжатия, удельная мощность.
- Единицы: л/100 км и mpg, скорость, объём топлива, длина, мощность.
Цен топлива, обслуживания и страховки, налоговых ставок и тарифов в демонстрации нет: все суммы вводит посетитель. Реальных марок и брендов нет, шины описаны только размерами и формулами. Всё демонстрационное помечено и удаляется одним действием в разделе «О продукте» или командой `php bin/psy demo:clear`.
Реклама
- Восемь мест. Главная между разделами, расчёт справа, расчёт в тексте, категория после списка, категория справа, справочник в тексте, справочник справа, поиск после результатов.
- Подпись и резерв места. Над каждым блоком слово «Реклама», высота для компьютера и телефона занята заранее, страница не сдвигается. Блоки стоят в стороне от полей ввода и кнопок расчёта.
- Правила показа. Устройства, типы страниц, категории и расчёты, исключения, лимит на страницу и число показов одному посетителю в день.
- Сети и блоки. Рекламная сеть Яндекса (идентификатор блока из вашего кабинета), Google AdSense, произвольный код сети, собственные баннеры с рекламодателем, периодом, ERID и пометкой, партнёрские блоки.
- A/B-варианты. Несколько вариантов в одном месте делят показы по весам, показы и клики считаются по вариантам.
- ads.txt и app-ads.txt. Редактор проверяет строки и публикует файл по адресу `/ads.txt`.
- Предпросмотр. Настоящий расчёт с отмеченными рекламными местами.
- Безопасность чужого кода. Код сетей запускается только после согласия на рекламу, адреса разрешаются в политике безопасности страницы, встроенные скрипты проходят по контрольной сумме.
Метрики и согласие
- Баннер cookie. Принять всё, отклонить необязательное или выбрать категории: аналитика и реклама. Журнал согласий без IP-адреса.
- Счётчики. Яндекс Метрика (с вебвизором), Google Analytics 4, свои счётчики и пиксели; всё запускается после согласия.
- События. Просмотр, выполненный расчёт, печать, поиск, прокрутка, показ и клик по собственному блоку. Введённые числа в события не попадают.
- Собственная статистика. Просмотры и посетители, график по дням, популярные расчёты и категории, число расчётов, источники переходов, запросы поиска и запросы без результата, показы, клики и CTR мест. IP-адрес не записывается.
- Доход по местам. Суммы вносятся вручную или загружаются отчётом CSV из кабинета сети, выгрузка отчётов в CSV.
- Политика конфиденциальности. Образец с полями в квадратных скобках; пока поля не заполнены, реклама и сторонние счётчики на сайте закрыты.
Оформление
- Тёмная «приборная панель». Фон и панели графитового цвета, оранжевая стрелка, янтарные цифры, шкала делений в шапке и подвале. Цвета, шрифты и скругления меняются в админке.
- Шрифты Tektur, Commissioner и JetBrains Mono лежат в комплекте и грузятся с вашего сайта: кириллица, знак рубля и знаки округления ⌈ ⌉ ⌊ ⌋ включены. Лицензии указаны в THIRD-PARTY.txt.
- Мобильная версия без горизонтальной прокрутки: меню, форма расчёта, результат со шкалой, справочник, поиск и баннер cookie.
- Единицы вместо картинок. ₽, л/100, км/ч, мм и кВт·ч крупно на карточках категорий и расчётов.
Фирменная админ-панель ARCHIVE0
Панель студии, общая для продуктов ARCHIVE0. Обзор, инструменты с редактором и версиями, категории, справочник, страницы, меню, медиатека, оформление, SEO, редиректы, реклама РСЯ, метрики и аналитика, пользователи и роли (владелец, администратор, проверяющий, редактор), журнал, резервные копии, настройки, уведомления о материалах на проверке по почте и в Telegram.
Документация
README, руководство владельца (`docs/GUIDE.md`: установка, первый запуск, редактор расчётов и язык формул, SEO, подключение Рекламной сети Яндекса после модерации сайта, ads.txt, метрики, cron, резервные копии) и юридическая памятка (`docs/LEGAL.md`: рекламные сети, маркировка рекламы, персональные данные и cookie, оговорка о расчётах, что проверить перед запуском).
Для запуска нужно
Сервер или хостинг с PHP 8.3 или новее и MariaDB 10.5+ (или MySQL 8), nginx или Apache, домен с HTTPS и доступ к cron для чистки статистики. Node.js и Composer не нужны. Для рекламы нужны аккаунты сетей, для счётчиков — идентификаторы Метрики и GA4.