Сергей Федорцов 12 февраля 2026

Если вы запускаете интернет-магазин или корпоративный сайт, перед вами всегда развилка.

Первый путь — облачные SaaS-сервисы. Быстрый старт, понятный интерфейс, минимум технических забот. Вы регистрируетесь, выбираете шаблон, наполняете контентом — и ресурс готов. Однако это аренда. Вы пользуетесь системой в том виде, в каком её предлагает разработчик. Максимум доступного — настроить поля форм, подобрать тему оформления, иногда отредактировать CSS. Как только возникает потребность в нестандарной логике, уникальном функционале или интеграции со специфическими учётными системами, вы упираетесь в ограничения платформы. Функция не предусмотрена, доработка невозможна. Бизнесу приходится подстраиваться под систему.

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

Webasyst предлагает третий путь. Платформа, которая даёт готовую, отлаженную основу и при этом остаётся полностью прозрачной. Вы видите исходный код, можете его изменять, но вам не нужно писать всё с нуля.

Что это такое

Webasyst — это набор бизнес-приложений, работающих в единой связке. Интернет-магазин, CRM, сайт, рассылки, управление задачами — всё это не пять отдельных кабинетов, а одна панель с общим входом и единой базой клиентов.

Платформа существует в двух версиях.

Облачная. Регистрация, ежемесячный платёж — и можно сразу работать. Всё обслуживание, обновления, безопасность берёт на себя команда Webasyst. Идеально, если вы не хотите углубляться в технические детали.

Версия для установки на свой сервер. Вы скачиваете дистрибутив, размещаете систему на собственном хостинге и получаете полный доступ к исходному коду всех приложений. Никаких блокировок. Можно дорабатывать любой модуль, писать собственные плагины, интегрировать с любыми внешними сервисами. Если бизнесу нужно уникальное решение — платформа его не ограничит.

Тысячи готовых решений. А если нужно своё — пожалуйста

Распространённое заблуждение: раз платформа с открытым кодом, значит, всё придётся писать с нуля, нанимать команду разработчиков.

На самом деле в официальном каталоге Webasyst — более 500 плагинов и тем. Это готовые, проверенные решения:

  • интеграции со всеми популярными платёжными системами и службами доставки;
  • профессиональные шаблоны интернет-магазинов и лендингов;
  • инструменты SEO, импорта прайс-листов, синхронизации с маркетплейсами;
  • модули для работы с 1С, складского учёта, аналитики.

В большинстве сценариев достаточно зайти в магазин приложений, установить нужное и начать работу.

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

Почему это важно для бизнеса

1. Интернет-магазин, готовый к росту

Shop-Script — профессиональный движок для продаж. Поддерживает каталог любой сложности, корзину, гибкие системы скидок, управление остатками, различные способы оплаты и доставки. Платформа сохраняет стабильную производительность при увеличении ассортимента до десятков тысяч позиций и росте числа заказов.

Если потребуется, например, автоматически рассчитывать стоимость доставки в зависимости от зональности тарифов, это реализуется точечной доработкой. Без смены платформы и без масштабных переписываний кода.

2. Сайт, который развивается вместе с компанией

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

3. CRM, где виден весь путь клиента

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

В облачных CRM-системах кастомизация полей и воронок часто либо ограничена, либо выносится в отдельные платные опции. В Webasyst вы самостоятельно определяете структуру данных и логику сделок.

4. Команда в едином контуре

Задачи, поручения, контроль исполнения, разграничение прав доступа — всё это уже встроено. Вам не нужен отдельный таск-трекер. Достаточно назначить роли, и каждый сотрудник работает в своём контексте, не видя лишнего.

Кому подходит Webasyst

Тем, кто столкнулся с ограничениями облачных сервисов.
Нужного функционала нет, а доработать нельзя. Приходится либо мириться с нехваткой возможностей, либо срочно мигрировать на другую систему. Webasyst на собственном сервере снимает эту проблему.

Тем, у кого есть свои разработчики или проверенные подрядчики.
Платформа популярна, на рынке достаточно специалистов, знакомых с её архитектурой. Вы не зависите от единственного исполнителя, владеющего «уникальным» кодом. Задачи решаются предсказуемо по срокам и бюджету.

Тем, кто планирует долгосрочное развитие.
Выбор платформы — это не решение на один сезон. Webasyst позволяет наращивать функционал постепенно, не меняя кардинально архитектуру и не теряя накопленных данных. Переход с облачной версии на серверную происходит бесшовно.

Тем, кто ценит прозрачные затраты.
В облачных тарифах нередко заложена плата за мощности, которые могут быть избыточны для текущих задач. При установке на свой сервер вы платите только за хостинг, а масштабируете ресурсы ровно тогда, когда это действительно необходимо.

Что в итоге

Webasyst — это не просто очередной конструктор и не жёсткая коробка с фиксированным набором функций. Это экосистема, в которой готовые приложения и тысячи плагинов соседствуют с полной свободой доработок.

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

Платформа даёт вам рабочий, отлаженный фундамент. Всё, что сверху, вы строите сами — ровно так, как нужно вашему бизнесу.

Зачем это нужно?

При разработке интернет-магазина на Webasyst часто требуется динамическое склонение слов в зависимости от количества товаров (например: «1 товар», «2 товара», «5 товаров»). 

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

Готовая функция для склонения слов

<span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">function</span> plural <span class="token attr-name">n</span><span class="token operator">=</span><span class="token number">0</span> <span class="token attr-name">words</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"один"</span><span class="token punctuation">,</span> <span class="token string">"два"</span><span class="token punctuation">,</span> <span class="token string">"пять"</span><span class="token punctuation">]</span><span class="token delimiter punctuation">}</span></span>
    <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">if</span> <span class="token function">intval</span><span class="token punctuation">(</span><span class="token variable">&#36;n</span> <span class="token operator">/</span> <span class="token number">10</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">10</span> <span class="token operator">!=</span> <span class="token number">1</span> <span class="token operator">&&</span> <span class="token number">1</span> <span class="token operator"><=</span> <span class="token variable">&#36;n</span> <span class="token operator">%</span> <span class="token number">10</span> <span class="token operator">&&</span> <span class="token variable">&#36;n</span> <span class="token operator">%</span> <span class="token number">10</span> <span class="token operator"><=</span> <span class="token number">4</span><span class="token delimiter punctuation">}</span></span>
        <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">if</span> <span class="token variable">&#36;n</span> <span class="token operator">%</span> <span class="token number">10</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token delimiter punctuation">}</span></span>
            <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">&#36;words</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token delimiter punctuation">}</span></span>
        <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">else</span><span class="token delimiter punctuation">}</span></span>
            <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">&#36;words</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token delimiter punctuation">}</span></span>
        <span class="token smarty language-smarty"><span class="token delimiter punctuation">{/</span><span class="token keyword">if</span><span class="token delimiter punctuation">}</span></span>
    <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">else</span><span class="token delimiter punctuation">}</span></span>
        <span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">&#36;words</span><span class="token punctuation">[</span><span class="token number">2</span><span class="token punctuation">]</span><span class="token delimiter punctuation">}</span></span>
    <span class="token smarty language-smarty"><span class="token delimiter punctuation">{/</span><span class="token keyword">if</span><span class="token delimiter punctuation">}</span></span>
<span class="token smarty language-smarty"><span class="token delimiter punctuation">{/</span><span class="token keyword">function</span><span class="token delimiter punctuation">}</span></span>

Как это работает:

  1. intval($n / 10) % 10 != 1 — исключает числа 11-19 (например, 11 товаров, 13 товаров), где всегда используется третья форма.
  2. $n % 10 — определяет последнюю цифру числа:
    • Если 1 — выбирает words[0] (1 товар),
    • Если 2-4 — выбирает words[1] (2 товара),
    • В остальных случаях — words[2] (5 товаров).

Пример использования

<span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">&#36;reviews_count</span><span class="token delimiter punctuation">}</span></span>
<span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">call</span> plural <span class="token attr-name">n</span><span class="token operator">=</span><span class="token variable">&#36;reviews_count</span> <span class="token attr-name">words</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"отзыв"</span><span class="token punctuation">,</span> <span class="token string">"отзыва"</span><span class="token punctuation">,</span> <span class="token string">"отзывов"</span><span class="token punctuation">]</span><span class="token delimiter punctuation">}</span></span>

Вариант с системной функцией перевода Webasyst (_wp()):

<span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token variable">&#36;products_count</span><span class="token delimiter punctuation">}</span></span>
<span class="token smarty language-smarty"><span class="token delimiter punctuation">{</span><span class="token keyword">call</span> plural <span class="token attr-name">n</span><span class="token operator">=</span><span class="token variable">&#36;products_count</span> <span class="token attr-name">words</span><span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">"{_wp("</span>товар<span class="token string">")}"</span><span class="token punctuation">,</span> <span class="token string">"{_wp("</span>товара<span class="token string">")}"</span><span class="token punctuation">,</span> <span class="token string">"{_wp("</span>товаров<span class="token string">")}"</span><span class="token punctuation">]</span><span class="token delimiter punctuation">}</span></span>

Результаты:

  • Если $products_count = 1: «Найден 1 товар»,
  • Если $products_count = 3: «Найдено 3 товара»,
  • Если $products_count = 7: «Найдено 7 товаров».

Замените массив words на нужные варианты. Например, для слова «отзыв»:

Преимущества подхода

  • Универсальность — можно использовать для любых слов: «пользователь», «заказ», «сообщение».
  • Чистый код — логика склонения инкапсулирована в одну функцию.
  • Текст правильно выглядит — исключает случаи неверного склоненеия слов. Например: 3 товаров, осталось 2 упаковка и т.д.

Частые ошибки

  1. Неправильный порядок слов в массиве
    Обязательный формат: [форма для 1, форма для 2-4, форма для 5+].
  2. Передача нечисловых значений
    Убедитесь, что n — целое число (используйте intval($n) при необходимости).

Итог
Функция plural решает проблему склонения слов в Webasyst всего за несколько строк кода. Её легко интегрировать в любую тему дизайна и отображение слов всегда будет правильным, даже при динамическом изменении чисел.