Разработка сайта на Magento / Adobe Commerce
Magento 2 / Adobe Commerce — enterprise-платформа для крупного ecommerce. Выбирают её тогда, когда нужны: мультисайт из единой инсталляции, сложная каталожная структура с тысячами атрибутов, кастомные бизнес-процессы, которые невозможно реализовать на SaaS-платформах.
Magento Open Source vs Adobe Commerce
| Характеристика | Magento Open Source | Adobe Commerce |
|---|---|---|
| Лицензия | MIT (бесплатная) | Коммерческая ($) |
| Хостинг | Self-hosted | Self-hosted или Cloud |
| B2B-модуль | Нет | Встроен |
| Page Builder | Базовый | Расширенный |
| Staged Content | Нет | Есть |
| Customer Segments | Нет | Есть |
| Live Search | Нет | Есть (SaaS) |
| Product Recommendations | Нет | Есть (AI-based) |
| Adobe Experience Cloud | Нет | Интеграция |
Для большинства проектов достаточно Open Source. Adobe Commerce оправдан при B2B-сценариях, сложной персонализации или интеграции с Adobe Analytics/AEM.
Серверные требования
Magento 2.4.x (актуальная ветка):
- PHP 8.1–8.3 (8.2 оптимален)
- MySQL 8.0 или MariaDB 10.6
- Elasticsearch 8.x или OpenSearch 2.x (обязательно для поиска)
- Redis 7.x (сессии + кеш)
- RabbitMQ 3.11+ (для асинхронных очередей в крупных магазинах)
- Nginx 1.24+ / Apache 2.4
- Varnish 7.x (reverse proxy cache, опционально)
- Минимум 4 CPU, 8 GB RAM для dev; 8 CPU, 16 GB RAM для prod
Архитектура модульной системы
Magento построен на модулях. Каждый модуль — папка в app/code/Vendor/Module/ или vendor/vendor/module/:
app/code/MyCompany/Catalog/
├── Block/ # PHP классы для View (устаревший подход)
├── Controller/ # HTTP controllers
├── etc/
│ ├── module.xml # декларация модуля
│ ├── di.xml # Dependency Injection конфигурация
│ ├── routes.xml # маршруты
│ └── frontend/
│ └── events.xml # подписка на события
├── Model/ # бизнес-логика
├── Plugin/ # Interceptors (before/after/around)
├── Observer/ # Event observers
├── Setup/
│ ├── InstallSchema.php
│ └── Patch/Data/ # Data patches
├── view/
│ └── frontend/
│ ├── layout/ # XML layout
│ └── templates/ # .phtml шаблоны
└── registration.php
Dependency Injection и Plugin
Magento не использует new ClassName() — все зависимости инжектируются через конструктор. Настраивается в etc/di.xml:
<!-- Подмена класса (preference) -->
<preference for="Magento\Catalog\Model\Product"
type="MyCompany\Catalog\Model\Product"/>
<!-- Plugin (interceptor) — без подмены класса -->
<type name="Magento\Catalog\Model\ResourceModel\Product\Collection">
<plugin name="mycompany_catalog_collection_plugin"
type="MyCompany\Catalog\Plugin\ProductCollectionPlugin"
sortOrder="10"/>
</type>
Plugin (before/after/around):
// MyCompany/Catalog/Plugin/ProductCollectionPlugin.php
namespace MyCompany\Catalog\Plugin;
use Magento\Catalog\Model\ResourceModel\Product\Collection;
class ProductCollectionPlugin
{
public function afterLoad(Collection $subject, Collection $result): Collection
{
// Добавляем атрибут после загрузки коллекции
foreach ($result as $product) {
$margin = ($product->getPrice() - $product->getCost()) / $product->getPrice() * 100;
$product->setData('margin_percent', round($margin, 2));
}
return $result;
}
}
Кастомный атрибут продукта
// Setup/Patch/Data/AddProductAttributes.php
namespace MyCompany\Catalog\Setup\Patch\Data;
use Magento\Framework\Setup\Patch\DataPatchInterface;
use Magento\Catalog\Setup\CategorySetupFactory;
class AddProductAttributes implements DataPatchInterface
{
public function __construct(
private readonly CategorySetupFactory $categorySetupFactory,
private readonly \Magento\Framework\Setup\ModuleDataSetupInterface $moduleDataSetup,
) {}
public function apply(): void
{
$setup = $this->categorySetupFactory->create(['setup' => $this->moduleDataSetup]);
$setup->addAttribute('catalog_product', 'delivery_days', [
'type' => 'int',
'label' => 'Срок доставки (дней)',
'input' => 'text',
'required' => false,
'visible' => true,
'user_defined' => true,
'searchable' => false,
'filterable' => false,
'comparable' => false,
'visible_on_front' => true,
'used_in_product_listing' => true,
'unique' => false,
'apply_to' => '',
]);
$setup->addAttributeToSet('catalog_product', 'Default', 'General', 'delivery_days');
}
public static function getDependencies(): array { return []; }
public function getAliases(): array { return []; }
}
GraphQL API Magento
Magento 2.4 имеет встроенный GraphQL API для headless:
query GetProduct($urlKey: String!) {
products(filter: { url_key: { eq: $urlKey } }) {
items {
id
sku
name
price_range {
minimum_price {
regular_price { value currency }
final_price { value currency }
discount { amount_off percent_off }
}
}
... on ConfigurableProduct {
configurable_options {
label
values { label uid }
}
variants {
attributes { label uid }
product {
sku
stock_status
price_range { minimum_price { final_price { value } } }
}
}
}
custom_attributes {
attribute_metadata { code label }
... on AttributeValue { value }
}
}
}
}
PWA Studio / Vue Storefront
Для headless-фронта на Magento используются:
- PWA Studio (официальный, React) — активно разрабатывается Adobe
- Vue Storefront 2 (Nuxt.js) — популярная альтернатива
- Next.js Commerce — с Magento-адаптером
Мультисайт и производительность
Magento нативно поддерживает несколько сайтов, магазинов и store view из одной инсталляции. Конфигурация в Admin > Stores > Configuration с scope: Global → Website → Store View.
Для высоконагруженных инсталляций:
- Varnish FPC (Full Page Cache) — кеш HTML-страниц
- Redis: отдельные инстансы для кеша и сессий
- Elasticsearch: отдельный кластер от основного сервера
- CDN для статики (Fastly, CloudFront)
- Horizontal scaling: несколько PHP-FPM серверов + общий NFS/GCS для медиа
Типичный стек разработки
# Инициализация проекта
composer create-project --repository-url=https://repo.magento.com/ \
magento/project-community-edition=2.4.7 my-magento
# Установка
bin/magento setup:install \
--db-host=localhost \
--db-name=magento \
--db-user=magento \
--db-password=secret \
--base-url=https://magento.local/ \
--admin-firstname=Admin \
--admin-lastname=User \
[email protected] \
--admin-user=admin \
--admin-password=Admin123! \
--language=ru_RU \
--currency=RUB \
--timezone=Europe/Moscow \
--use-rewrites=1 \
--search-engine=opensearch \
--opensearch-host=localhost \
--opensearch-port=9200
# После изменений в модулях
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy ru_RU en_US -f
bin/magento cache:flush
Сроки
Запуск магазина на Open Source с готовой темой и стандартным набором модулей: 4–8 недель. Кастомная разработка с несколькими модулями, интеграцией с ERP/1C и мультисайтом: 3–6 месяцев. Adobe Commerce с B2B-модулем, Page Builder, Customer Segments и интеграцией с Adobe Experience Cloud: полгода+, зависит от объёма.







