Разработка сайта на PrestaShop

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка сайта на PrestaShop
Средняя
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Разработка сайта на PrestaShop

PrestaShop — PHP-фреймворк с открытым исходным кодом, оптимизированный под e-commerce. Текущая стабильная ветка 8.x основана на Symfony компонентах, Doctrine ORM для части сущностей и собственном легаси-ядре ObjectModel для каталога. Архитектурная двойственность — главная особенность, которую нужно учитывать при разработке.

Архитектура и стек

PrestaShop 8.x использует:

  • PHP 8.1–8.2, Symfony 4.4 (компоненты), частичный Symfony DI
  • Smarty 3 для front-office шаблонов, Twig для back-office (Symfony)
  • MySQL/MariaDB — основная БД, активное использование PREFIX_* таблиц
  • Doctrine ORM — только для новых сущностей в admin
  • ObjectModel — легаси Active Record для всех товаров, категорий, заказов
  • Hook system — основной механизм расширяемости

Структура директорий:

/
├── classes/          # ObjectModel сущности (Product, Category, Order...)
├── controllers/      # Front-office контроллеры (FrontController)
├── modules/          # Сторонние и кастомные модули
├── themes/           # Front-office темы (Smarty)
├── src/              # Symfony-стиль код (PrestaShop\PrestaShop\...)
├── admin-dev/        # Back-office (Symfony + Twig)
└── override/         # Override классов ядра

Модели данных и работа с каталогом

Вся работа с товарами идёт через ObjectModel. Пример получения и сохранения:

// Получение товара с переводами
$product = new Product($id, true, $langId, $shopId);
echo $product->name;        // строка на нужном языке
echo $product->price;       // базовая цена без НДС
echo $product->getPrice();  // с учётом налогов, скидок

// Массовое получение через статические методы
$products = Product::getProducts(
    $langId,
    $page * $limit,  // offset
    $limit,
    'id_product',    // orderBy
    'ASC',
    $categoryId
);

Для кастомных сущностей рекомендуется наследоваться от ObjectModel:

class CustomAttribute extends ObjectModel
{
    public $id_custom_attribute;
    public $name;
    public $value;
    public $active;

    public static $definition = [
        'table'     => 'custom_attribute',
        'primary'   => 'id_custom_attribute',
        'multilang' => true,
        'fields'    => [
            'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
            'name'   => ['type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128],
            'value'  => ['type' => self::TYPE_STRING, 'lang' => true, 'size' => 255],
        ],
    ];
}

Контроллеры и routing

Front-office routing в PrestaShop работает через dispatcher + FrontController. URL-правила задаются в dispatcher.php и таблице meta:

// Кастомный front-office контроллер
class CustomPageModuleFrontController extends ModuleFrontController
{
    public $ssl = true;
    public $display_column_left = false;

    public function initContent()
    {
        parent::initContent();

        $items = Db::getInstance()->executeS(
            'SELECT * FROM `' . _DB_PREFIX_ . 'custom_items` WHERE `active` = 1'
        );

        $this->context->smarty->assign([
            'items'    => $items,
            'pageTitle' => $this->trans('Custom Page', [], 'Modules.Custommodule.Shop'),
        ]);

        $this->setTemplate('module:custommodule/views/templates/front/custom_page.tpl');
    }
}

Хуки и архитектура модуля

Хуки — центральный паттерн расширения PrestaShop. Правильная работа с ними определяет, насколько модуль будет совместим с обновлениями ядра:

class CustomModule extends Module
{
    public function __construct()
    {
        $this->name    = 'custommodule';
        $this->tab     = 'front_office_features';
        $this->version = '1.0.0';
        $this->author  = 'Company';
        $this->need_instance = 0;
        $this->ps_versions_compliancy = ['min' => '8.0.0', 'max' => _PS_VERSION_];

        parent::__construct();
    }

    public function install(): bool
    {
        return parent::install()
            && $this->registerHook('actionProductAdd')
            && $this->registerHook('displayProductAdditionalInfo')
            && $this->installDb();
    }

    public function hookDisplayProductAdditionalInfo(array $params): string
    {
        $product = $params['product'];
        $this->smarty->assign('custom_data', $this->getCustomData($product['id_product']));
        return $this->display(__FILE__, 'views/templates/hook/product_info.tpl');
    }
}

Производительность и кэширование

PrestaShop поддерживает несколько уровней кэширования:

  • CCC (Combine, Compress, Cache) — объединение CSS/JS
  • Smarty cache — кэш скомпилированных шаблонов
  • Page cache — через модули (PrestaShop PageCache, встроенный в PS 8)
  • Object cache — через Redis/Memcached
// Настройка Redis в app/config/parameters.php
parameters:
    cache_driver: 'redis'
    cache_server: '127.0.0.1'
    cache_port: 6379
    cache_prefix: '_PRESTASHOP_'

// Программный кэш в модуле
$cacheKey = 'module_data_' . $productId . '_' . $langId;
if (!Cache::isStored($cacheKey)) {
    $data = $this->fetchExpensiveData($productId);
    Cache::store($cacheKey, $data);
} else {
    $data = Cache::retrieve($cacheKey);
}

Многомагазинность (Multishop)

PrestaShop поддерживает управление несколькими магазинами из одной админки. Контекст магазина влияет на все запросы:

// Привязка данных к конкретному shop
Shop::setContext(Shop::CONTEXT_SHOP, $shopId);

// Запись, зависящая от shop
$product = new Product(null, false, null, $shopId);
$product->name[$langId] = 'Название для магазина ' . $shopId;
$product->price = 999.00;
$product->id_shop_default = $shopId;
$product->save();

Типичные сроки разработки

  • Интернет-магазин на стандартной теме с кастомизацией: 3–5 недель
  • Магазин с кастомной темой и модулями под бизнес-логику: 6–10 недель
  • Миграция с другой платформы (Woocommerce, OpenCart): 4–8 недель
  • Мультимагазинная конфигурация с разными каталогами: +2–3 недели к базовой разработке