Розробка сайту на 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 — open-source PHP-фреймворк, оптимізований для e-commerce. Поточна стабільна гілка 8.x заснована на компонентах Symfony, Doctrine ORM для деяких сутностей та власному legacy-ядрі 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 — тільки для нових сутностей в адмін-панелі
  • ObjectModel — legacy 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],
        ],
    ];
}

Контролери та маршрутизація

Front-office маршрутизація в 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');
    }
}

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

Хуки — центральний механізм розширення. Правильна робота з ними визначає сумісність модуля з оновленнями ядра:

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);
}

Підтримка кількох магазинів

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 тижні до базової розробки