План изучения Magento 2

8 Apr 2020

Всем привет! Сегодня хотел бы поделиться планом изучения Magento. Недавно возникла задача подготовить нескольких PHP-разработчиков для работы с этой системой.

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

После полутора лет непрерывной работы с этой системой в 220 Вольт мне захотелось отдохнуть от нее. Последний год я в основном разрабатывал на Symfony, и Magento занимался не очень много. Время от времени приходилось отвечать на вопросы коллег, и даже делать эстимейты и т.д. К тому же пытался понять, за что же все так любят эту сложную и довольно неповоротливую систему.

Все это время следил за тем, что происходит с этой CMS.

Ниша, где имеет смысл использовать Magento

На мой взгляд основные преимущества Magento:

  • Коробочная CMS, большое кол-во функционала из коробки.

  • Много готовых тем и расширений. Большое community разработчиков. Стандарты - одни и те же вещи делаются примерно одинаково.

  • Достаточно продуманная архитектура. Возможность кастомизации.

  • Наличие Community Edition

Основные недлстатки:

  • Высокий порог вхождения. По сравнению с другими CMS и даже мб по сравнению с фреймворками

  • Система требовательна к ресурсам. Даже при достаточном количестве ресурсов может работать небыстро

  • Коробочная CMS. Если есть специфические требования к проекту, то их мб проблематично реализовать.

Основные варианты использования:

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

  • У клиента уже есть готовая система, к ней нужно добавить e-commerce функционал. При этом в целом функционал и архитектура magento устраивает. Большого количества доработок не требуется.

Входные данные

Есть один, либо несколько разработчиков, желающих изучить Magento 2. Разработчик(и) достаточно хорошо знают PHP - уровень middle и выше. Есть опыт работы с фреймворками Symfony/Laravel/Yii/Whatever.

В процессе обучения обязательно нужно вести документацию. У Magento есть официальная документация, но она не всегда полная, и в ней не всегда просто ориентироваться.

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

Это нужно в том числе для повторяемости, т.к. некоторые вещи настраиваются исключительно через админку.

Инструменты

Для обучения понадобится несколько инструментов:

  • VPS с Linux

  • Аккаунт Magento Connect

  • Аккаунт на Github/Gitlab/Bitbucket/Whatever и несколоько git репозиториев.

  • Пространство для ведения документации Notepad/Confluence/Evernote/Whatever.

Модуль 1 - Инфраструктура

Для начала нужно подготовить инфраструктуру для разработки на Magento.

  • Настроить локальное окружение Linux + Nginx + PHP 7.3 + Mysql 5.7.

  • Установить Magento локально через консоль, либо через Web установщик.

  • Включить developer mode

  • Создать git репозиторий, настроить gitignore, залить туда Magento. Подготовить README.md и т.д.

  • Настроить VPS в качестве тестового сервера/staging. Установить туда Magento из созданного репозитория.

  • Попробовать загрузить Magento Sample Data.

  • Настроить Docker окружение в созданом репозитории(опционально)

  • Натроить Varnish cache для улучшения производительности в Magento. Varnish рекомендую настраивать на VPS.

  • Настроить автоматический деплой на VPS. Подготовить скрипты выполнения рутинных действий(очистки кэша и т.д)

Модуль 2 - Типовая разработка с использованием коробочного функционала.

Задача - разработать простейший магазин на Magento 2, с минимальными затратами на разработку. В результате получаем простейший, но готовый к использованию магазин, адаптированный под конкретного клиента. Фактически, MVP.

  • Подготовить контент. Название магазина, логотип, адрес, часы работы и т.д. А также продукты, категории и изображения для них.

  • Подготовить CSV файл для импорта продуктов и категорий. CSV файл должен генерировться автоматически на основании контента.

  • Загрузить данные в Magento 2, проверить что все прошло без ошибок и магазин работает корректно. Сделать тестовый заказ.

  • Настроить тему. Поменять логотип, header, footer, название магазина, адрес и т.д.

  • Настроить статичесикй контент, поменять содержимое страниц "Privacy", "About us" и т.д. Настроить главную страницу магазина.

  • Настроить email шаблоны - поменять логотип и данные магазинов.

  • Настроить отправку email с использованием SMTP.

Помимо этого изучить как работают встроенные механизмы magento:

  • Типы продуктов

  • Процесс обработки заказов

  • Процесс импорта

  • Работа с email шаблонами

  • Работа со статическим контентом

Если в команде несколько разработчиков, то задачи могут быть распараллеленными между ними. В конце модуля можно провести лабораторную работу, где каждый должен будет пройти все этапы по подготовленым руководствам.

Модуль 3 - Продвинутая разработка с использованием коробочного функционала.

Задача - улучшить магазин из предыдущего модуля. Добавить функционал, необходимый для реального магазина. В результате получаем полноценный магазин на Magento 2.

  • Реализовать оплату кредитной картой(используя paypal testing mode).

  • Настроить методы доставки

  • Настроить личный кабинет

  • Настоить товарные рекомендации, связанные продукты и т.д.

  • Настроить цены и скидки

  • Настроить SEO параметры, человекопонятные url, robots.txt, sitemap и т.д.

  • Настроить налоги

  • Настроить мультисайтовость

  • Установить стороннюю тему(бесплатную)

Задачи опять же можно распаралелить между участниками. В конце модуля можно провести лабораторную работу по подобному сценарию.

Модуль 4 - кастомная разработка

В рамках модуля предлагается более детально изучить внутреннее устройство Magento. Затем самостоятельно разработать кастомную тему на базе имеющегося дизайна и шаблона верстки. После этого научиться разрабатывать кастомные модули. Создать несколько модулей различного назначения.

В результате получаем магазин из предыдущий части с кастомным дизайном, и дополнительным кастомным функционалом.

Сначала предлагается изучить внутреннее устройство Magento:

  • Изучить устройство модуля

  • Научиться работать с REST API

  • Изучить реализацию шаблона MVC(Model View Controller)

  • Изучить устройство UI компонентов

  • Изучить возможности создания кастомного css/js

  • Изучить DI и структуру конфигов

  • Изучить устройство EAV атрибутов

  • Изучить работу плагинов, observers и т.д.

  • Изучить работу моделей и коллекций Zend и т.д.

Затем реализовать несколько кастомных модулей различного назначения:

  • Консольные команды

  • Добавление кастоного функционала для витрины. Написание модуля с нуля.

  • Добавление кастоного функционала для админки - скорее всего, CRUD. Написание модуля с нуля.

  • Реализация кастомных методов API

  • Реализация обработчиков внешних запросов(например вебхуков)

  • Реализация кастомных сервисных модулей(например SMTP)

  • Отдельным пунктом стоит выделить написание юнит и функциональных тестов.

После выполнения всех, или хотя бы части этих задач, разработчик сможет создавать кастомные модули под конкретные задачи.

Модуль 5 - продвинутая кастомная разработка

Модуль включает менее типовые задачи, больше кастомного функционала.

  • Разработка кастомного модуля для импорта и экпорта данных различных данных(продукты, заказы, пользователи) в разные форматы.

  • Использование magento в headless режиме. Разработка кастомного frontend на react/angular/vue.

  • Реализация продвинутого кастомного поиска на базе elastic search

  • Реализация сложного кастомного модуля, включающего в себя нетривиальную логику, а также модификацию админки Magento и Витрины.

Здесь уже встает вопрос целесообразности использования magento. И, возможно, в таких случаях стоит задуматься о написании магазина на фреймворке.

В результате получаем программу обучения, которая поможет освоить разные аспекты разработки на Magento 2. К тому же в процессе обучения будет сделан учебный проект на Magento. Многие подходы можно будет использовть при разработке будущих реальных проеков.

В будущих постах надеюсь более детально описать каждый этап. А также добавить примеры реализации, там где это имеет смысл.

На этом пока все. Спасибо за внимание!