Розробка сайту на PrestaShop
Ми стикалися з клієнтами, у яких інтернет-магазин на PrestaShop гальмував через N+1 запитів у каталозі — завантаження сторінки займало 8 секунд. Ми вирішили це рефакторингом ObjectModel та впровадженням кешування Redis. Один із проєктів — магазин на 50 000 товарів з 10 мовами. Після оптимізації TTFB впав з 3 с до 200 мс, а LCP скоротився з 8 с до 1,5 с. Зменшіть витрати на підтримку до 30% за рахунок кастомних модулів.
PrestaShop — PHP-фреймворк з відкритим кодом, оптимізований під e-commerce. Актуальна версія 8.x базується на Symfony компонентах, Doctrine ORM для частини сутностей та власному легасі-ядрі ObjectModel для каталогу. Архітектурна подвійність — головна особливість, яку потрібно враховувати під час розробки. Порівняно з WooCommerce, PrestaShop при рівних обсягах даних генерує сторінки каталогу на 50% швидше завдяки вбудованій системі кешування.
Як працює архітектура PrestaShop?
PrestaShop 8.x побудований на PHP 8.1–8.2 і використовує Symfony 4.4 компоненти. Впроваджено частковий Symfony DI. Для front-office застосовується Smarty 3, для back-office — Twig. Основна БД — MySQL/MariaDB. Doctrine ORM задіяна тільки для нових сутностей в адмінці. ObjectModel — легасі Active Record для всіх товарів, категорій та замовлень. Центральний механізм розширюваності — система хуків.
Структура директорій:
- /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, $limit, 'id_product', '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], ], ]; } Яку роль відіграють хуки?
Хуки — центральний патерн розширення 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?
PrestaShop підтримує кілька рівнів кешування: CCC (Combine, Compress, Cache), Smarty cache, Page cache та Object cache через Redis/Memcached. Приклад налаштування Redis:
// Налаштування 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); } Правильне налаштування CCC дозволяє скоротити розмір переданих даних на 40%. Використання Redis знижує навантаження на базу даних на 70%. Наприклад, проблема N+1 запитів вирішується рефакторингом ObjectModel з використанням Db::getInstance для масової вибірки. Конфлікти з кастомними модулями після оновлення запобігаються правильною реалізацією хуків. Повільне завантаження сторінок усувається комплексним кешуванням.
| Метод кешування | Приріст швидкості | Зниження навантаження на БД |
|---|---|---|
| CCC | 20–40% | 0% |
| Redis Object cache | 50–70% | 70% |
| Smarty cache | 30–50% | 0% |
Чому варто обрати кастомну розробку замість готового шаблону?
Готові шаблони часто містять надлишковий код та неперевірені модулі, що знижує продуктивність. Кастомна розробка дозволяє прибрати все зайве, оптимізувати запити та впровадити тільки потрібні хуки. В результаті — магазин працює швидше та легше масштабується.Що таке мультимагазинність та як її налаштувати?
PrestaShop підтримує керування кількома магазинами з однієї адмінки. Контекст магазину впливає на всі запити:
Shop::setContext(Shop::CONTEXT_SHOP, $shopId); $product = new Product(null, false, null, $shopId); $product->name[$langId] = 'Назва для магазину ' . $shopId; $product->price = 999.00; $product->id_shop_default = $shopId; $product->save(); Мультимагазинність дозволяє керувати різними каталогами, цінами та дизайном для кожного магазину. Це особливо корисно при виході на кілька ринків або B2B/B2C сегментів.
Процес розробки
- Аналітика: аудит поточного магазину (якщо є), визначення вимог.
- Проектування: архітектура модулів, схема БД, прототипи.
- Реалізація: кодування кастомних модулів, інтеграція хуків.
- Тестування: навантажувальне тестування, перевірка сумісності з оновленнями.
- Деплой та документація: розгортання на продакшн, передача інструкцій.
Що входить в розробку?
| Документація | Вихідний код | Доступи | Навчання |
|---|---|---|---|
| API-документація по модулях | Повний код з коментарями | FTP/SSH, адмінка | Інструкція для операторів |
| Схема БД та опис ObjectModel | Інструкція з розгортання | Доступи до хостингу | Навчання адміністраторів |
Терміни орієнтовно
- Інтернет-магазин на стандартній темі з кастомізацією: 3–5 тижнів.
- Магазин з кастомною темою та модулями під бізнес-логіку: 6–10 тижнів.
- Міграція з іншої платформи (WooCommerce, OpenCart): 4–8 тижнів.
- Мультимагазинна конфігурація з різними каталогами: +2–3 тижні до базової розробки.
Вартість розраховується індивідуально після оцінки обсягу робіт. Прискорення завантаження окупається протягом 2 місяців після запуску.
Ми маємо 5 років досвіду розробки на PrestaShop, реалізували 50+ проєктів, включаючи мультимагазинні конфігурації. Гарантуємо дотримання термінів та якість коду. Згідно з офіційною документацією PrestaShop, правильна реалізація хуків підвищує сумісність з оновленнями.
Отримайте консультацію по вашому проєкту — ми оцінимо його безкоштовно. Замовте аудит поточного магазину для виявлення вузьких місць продуктивності.







