Впервые с Magento (тогда еще "единичкой") я столкнулся лет, эдак, 6 назад. С тех пор так с ней и работаю, с большей или меньшей плотностью. Изначально пост хотел назвать "Quo vadis, Magento?", но, как оказалось, этим популярным вопросом сообщество задавалось уже не раз — и когда Magento приобреталась ebay'ем, и когда продавалась, и все то время, пока делалась "двоечка", да и поныне этот вопрос остается актуальным (раз уж даже у меня возникло желание использовать такое название). Поэтому пост называется так, как он называется.


image


Под катом же я попытался сформулировать свое собственное (сиречь — субъективное) вИдение перспектив этой платформы — полное брюзжания и уныния. Без подробных выкладок. Без детальных размышлений. Без доказательств. И главное —


да, главное — без надежды.


Le Roi


В моей практике Magento, пожалуй, является самым сложным web-приложением, с которым я сталкивался (еще раз акцентирую внимание на субъективности своих выкладок!). Коллега Jonathan Edwards как-то выразился "programming is a desperate losing battle against the unconquerable complexity of code and the treachery of requirements" (Программирование — безнадежно проигранная борьба с непреодолимой сложностью кода и вероломством требований). Так вот, Magento в этой безнадежной борьбе продвинулось дальше всех остальных виденных мной web-приложений.


В основу Magento изначально были заложены принципы приспосабливаемости и расширяемости: EAV, modules, rewrites, events — вот те механизмы, которые позволили привлечь к Magento множество пользователей и, главное, разработчиков и занять главенствующее место в e-commerce. Основными "фишками" Magento были и остаются не только богатство функционала "из коробки", но и внушительное количество модулей сторонних разработчиков (платных и бесплатных), позволяющих донастроить магазин "под себя".


Magento стало центром притяжения с одной стороны множества девелоперов — можно было либо получить хорошую рекламу, сделав небольшой, но нужный всем бесплатный модуль, либо получить хорошие деньги, сделав коммерческий модуль под определенные потребности клиентов, не охваченные базовым функционалом (или охваченные только Enterprise-версией). Сейчас на Magento Connect выставлено не менее 966 страниц модулей для Magento 1, по 10 штук на страницу — это почти 10,000 расширений.


А у WordPress'а - 50,000

Да, у того же WordPress'а сейчас порядка 50,000 модулей, но WordPress — это движок для "сайта" (по-большому счету — CMS плюс пользователи), а Magento — движок для "магазина" (плюс каталог продуктов, плюс склад, shopping cart, заказы, возвраты и все такое). Причем добавить расширение для "сайта" гораздо проще — там мало, что есть. А вот специфика "магазина" несколько ограничивает возможные направления расширения.


С другой стороны Magento стало центром притяжения и для пользователей — они сразу же получали не только работоспособный магазин, но могли также подобрать для него привлекательную тему, расширить функционал с помощью готовых модулей. Или заказать создание "своих" модулей. Или "своей" темы. Расширяемость была одной из притягательных маркетинговых фишек Magento. Конечно, в реальности добавление/изменение функционала было не совсем тривиальной задачей, но тем не менее, такая возможность была изначально добавлена в платформу при ее создании и успешно эксплуатировалась при оценочном сравнении с конкурентами. В результате количество магазинов на Magento достигло по некоторым оценкам 2015 года почти четверти миллиона.


image


Это двухстороннее притяжение создало своеобразную экосистему, в которой создавались, опробывались, приживались или выкидывались различные решения в области e-commerce на базе платформы Magento. В первой версии не было полноценного тестирования, но его отсутствие компенсировалось количеством установок — если использовать общеупотребимый функционал и не выстраивать экзотических конфигураций, то вероятность столкнуться с ошибками в работе магазина была довольно низкой. Определенное количество существующих крупных магазинов также свидетельствовало о неплохих возможностях платформы — по крайней мере, с точки зрения среднего и мелкого бизнеса.


В целом, еще совсем недавно Magento являлась безоговорочным лидером на рынке e-commerce.


… est mort


Так почему же лично я смотрю на будущее Magento с пессимизмом? Наверное по той же самой причине, по которой с пессимизмом смотрели на будущее в машинном отделении "Титаника". Возможно, даже капитан Эдвард Джон Смит, к которому стекалась вся информация, не понимал поначалу всей трагичности ситуации, не говоря уже о пассажирах, которых аналоги маркетинговых служб того времени убедили в непотопляемости "Титаника". Но в машинном видели и лопнувшие заклепки, и щели между стальными листами, в которые, клокоча и пенясь, врывалась ледяная морская вода, и безуспешную работу насосов. В машинном точно не знали, сколько еще "Титаник" сможет продержаться на поверхности, но то, что до Америки он не дотянет — знали наверняка.


Magento 2, без сомнения, является развитием предыдущей версии — улучшилась модульность, достигнута совместимость с composer'ом, используются более современные решения как на "фронте", так и на серверной стороне, код общедоступен и тестируем, производительность улучшена. На первый взгляд вполне себе замечательные перспективы.


Но что же, все-таки, омрачает картину?


Объем


В Magento 2 — 1,357,121 строк PHP кода и 2,449,066 строк всего (WordPress — 423,759; WooCommerce — 131,549; osCommerce — 208,928; Drupal — 704,269).


Magento 1.9.3.2
$ cloc  vendor/magento/core/
   12915 text files.
   12797 unique files.                                          
Complex regular subexpression recursion limit (32766) exceeded at /usr/bin/cloc line 7272.
    1381 files ignored.

github.com/AlDanial/cloc v 1.68  T=49.43 s (233.4 files/s, 49068.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
XML                           1682           2790          29878         697574
PHP                           9203         129137         627973         690540
JavaScript                     322          27167          22370         114274
CSS                            167           5508           5038          49747
SASS                            65           2265           1847          10702
HTML                            76            597            423           5978
ActionScript                     3             92            231            482
XSD                              2              5             52            219
JSON                             2              0              0            122
MXML                             2              0             52            115
SQL                              4             49             58            102
Bourne Shell                     2             17             57             57
XSLT                             1             15              2             53
DTD                              1              3              0             16
DOS Batch                        3              5              0             15
PowerShell                       1              5              0             10
Ruby                             1              1              1              8
INI                              1              0              0              1
-------------------------------------------------------------------------------
SUM:                         11538         167656         687982        1570015
-------------------------------------------------------------------------------

Magento 2.1.5
$ cloc vendor/magento/
   27403 text files.
   26893 unique files.                                          
    1806 files ignored.

github.com/AlDanial/cloc v 1.68  T=102.50 s (250.2 files/s, 36028.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
PHP                          19356         240777         820913        1357121
XML                           3754           1244          22948         714019
JavaScript                    1163          49970          61526         234396
LESS                           480          12370          25596          58090
HTML                           367           1128           3373          30976
CSS                            102           1298            559          27274
JSON                           149              6              0          10963
Markdown                       157            746              0           7895
XSD                             85            494            591           7387
XSLT                             9             43             93            408
Bourne Shell                     7             67             50            227
YAML                             4             16              0            103
SQL                              4             49             58            102
XHTML                            5              0             35             42
DOS Batch                        4             13             20             31
Puppet                           1              5              2             18
PowerShell                       1              5              0             10
INI                              1              0              0              4
-------------------------------------------------------------------------------
SUM:                         25649         308231         935764        2449066
-------------------------------------------------------------------------------

В самом количестве строк нет ничего ужасного (тот же SugarCRM содержит 2,149,457 строк) — это просто показатель "инерционности" приложения, аналог массы в физике, причина, по которой корабль не может резко сменить курс. В чем же именно проблемы?


Структуры данных


У разработчиков Magento 2 был замечательный шанс значительно переработать структуру данных — было официально объявлено, что вторая версия будет несовместима с первой. И по структурам данных сделана значительная подвижка — переименованы/добавлены/удалены таблицы и поля так, что база данных от первой версии действительно не могла быть использована во второй.


Но, видно что основным мотиватором при переработке все-таки был "как можно меньше изменений". Иначе чем объяснить мигрировавшую в "двойку" нестыковку соответствия store_id в БД и Store в админке (store_id в БД атрибут Store View в админке, а вот group_id в БД — как раз и является атрибутом для Store в админке — и это нельзя понять, это нужно запомнить)? Или неоднозначные зависимости между данными в тех же store-таблицах или stock-таблицах?


Или такой фундаментальный (или риторический?) вопрос — почему для EAV заложено только 8 типов сущностей (customer, customer_address, catalog_category, catalog_product, order, invoice, creditmemo, shipment) из которых через админку для расширения доступны только атрибуты продукта (catalog_product)? Почему проигнорированы такие сущности, как admin, authorization, stock, sales_rule, cms, rating, report, review, ...?


Это, кстати, здорово сбивает, особенно поначалу — зачем плодить в структурах данных поддержку для EAV, если по факту конечный пользователь Community-версии может его применить только к одному типу данных, к продуктам? И да, это тормозит все приложение (как минимум в developer-режиме) и является причиной появления flat-таблиц. И да, в "двойке" часть атрибутов клиента все-таки перенесли в customer_entity (28 полей, против 12 "единички") .


Код


В Magento 2 значительно переработали архитектуру — и это явный прогресс. Я могу только поприветствовать появление DI и слоя классов-репозиториев, интеграцию API со Swagger'ом и расширение CLI-набора команд собственными командами. Но… попробуйте программно сохранить store (Store View в терминах админки), руководствуясь best practices от Magento 2 — не получится. Это при том, что репо-класс для \Magento\Store\Model\Store существует, правда без метода save(), а стандартный для "единички" метод save(), наследуемый от \Magento\Framework\Model\AbstractModel, объявлен @deprecated.


А попробуйте найти имплементацию интерфейса \Magento\Sales\Api\OrderStatusHistoryRepositoryInterface. Как бы должен быть "\Magento\Sales\Api\Data\OrderStatusHistory\Repository", согласно di.xml. Хорошо, попробуйте найти класс "\Magento\Sales\Api\Data\OrderStatusHistory\Repository". Может быть этот интерфейс нигде не используется? Нет, используется. Может автогенерится? Нет, генерятся Factory, Proxy и Interceptor'ы, а у нас — Репозиторий.


Побродите по коду — есть весьма переработанные модули (customer, например), а есть обернутый код от "единички". Я понимаю, что "двойка" делалась на базе "единички", что было принято "политическое" решение использовать как можно больше существующего кода, чтобы выпуститься к какой-нибудь знаменательной дате (например, продажа ebay'ю или ebay'ем, привлечение очередных инвестиций и т.п.). Или чтобы "сократить затраты на разработку". Беда не в этом. Если бы только это, то ситуацию можно было бы выправить путем планомерной и методичной переработки кода. Беда в том, что сейчас в Magento рулят "эффективные"/"кризисные" менеджеры, а не технари (ребята, без обид — я не знаю ваших имен, я сужу только по результатам).


Релизы


Ну а что я еще могу думать, когда через 2 недели после 2.1.4 выходит 2.1.5 единственное назначение которого:


This release updates the copyright date in every file. It does not contain any functional changes or security improvements. Isolating these changes in a single release is intended to simplify future updates and developer workflow.


Релиз! Целый релиз несущественных с точки зрения технаря изменений!!! И что теперь, объяснять владельцам магазинов, что работающая у них 2.1.4 с функциональной точки зрения точно такая же, как 2.1.5, разве что только не последняя?


А план релизов на середину февраля:


For now 2.1.5 will be copyright, 2.1.6 security and 2.1.7 will have bugfixing.

Может еще bugfix'ы разобьем на две группы — для фронта и для серверной стороны? И под каждую свой релиз сделаем? А если вдруг на следующий день после выпуска 2.1.6 будет обнаружена дыра в security, то мы ее "залечим" в 2.1.8 или в 2.1.9?


bugfixes


Причем самое печальное, IMHO, это то, что в версию 2.1.5 не вошел вот этот pull request. Вот ошибочный код:


     public function getStockId()
      {
          return $this->getData(self::KEY_WEBSITE_ID);
      }

вот исправленный:


     public function getStockId()
      {
          return $this->getData(self::KEY_STOCK_ID);
      }

Его запостил коллега Felix Delval еще 29 сентября 2016 года. До выхода версии 2.1.2 (12 октября 2016 года), версии 2.1.3 (14 декабря 2016 года), версии 2.1.4 (7 февраля 2017 года) и до пресловутой версии 2.1.5 (21 февраля 2017 года). Судя по плану релизов, ошибку исправят в 2.1.7 — месяца через 3-4.


А ведь это явная ошибка, понятная даже начинающим программистам. Сколько она времени сожрала у всех 10-ти (!!!) участников обсуждения этого бага и до сих пор не исправлена!


Ой, нет, вру — исправлена в developer-ветке. А вот в релизах — так и продолжает оставаться.


Я не задаю вопрос "сколько еще таких исправленных багов есть в developer-ветке и нет в релизных", просто потому, что боюсь услышать ответ.


Инерция


Magento имеет хорошую историю, внушительное сообщество, приличный "кусок" в пироге e-commerce, но… вместе с тем я наблюдаю потерю управляемости в проекте. Magento 2 перестала своевременно реагировать на изменения. Она стала слишком большая. Как Microsoft в свое время.


Возможно, вступают в действие какие-то законы, по которым не только программирование, а и вообще создание сложных систем — "a desperate losing battle". Структура вплотную подходит к какой-то неизвестной пока еще границе сложности, когда каждый следующий шаг стОит как все предыдущие вместе взятые, и для наращивания функциональности проще создать нечто новое — другую структуру, которая реализует анлогичный функционал по другим принципам и на меньшем уровне сложности и позволит этот функционал нарастить, пока сама в свою очередь не приблизится к той же самой границе. В физике есть подобная граница — скорость света, почему бы ей не быть и в программировании?


Так вот, инерция в Magento 2 в силу ее сложности стала настолько большой, что управлять ее разработкой становится все труднее и труднее. Вышеописаные проблемы в структурах данных, коде, bugfix'ах, релизах — это следствия приближения к "верхней границе сложности".


Disclaimer


Эй, это мое субъективное мнение. Я не юрист и не эффективный менеджер, я — разработчик, технарь. Я вижу картину со своего ракурса и вижу ее вот так.


Vive le Roi?


Как говорится, "свято место пусто не бывает". И если не Magento, то — кто?


image


Судя по этим данным — WooCommerce? Или пока еще не выстреливший OroCommerce — от авторов "единички"? Или может вообще малоизвестный игрок, вроде Sylius? Или новый "король" вообще будет не на PHP? Куда перетекут конечные пользователи e-commerce платформ и кто станет новым центром кристаллизации?


На все эти вопросы у меня ответа нет.

Поделиться с друзьями
-->

Комментарии (14)


  1. berezuev
    09.03.2017 14:18

    Ох, чувствую, сейчас мне напихают, но все же зануда mode on.
    И в русском, и во французском языках высшие титулы принято писать с заглавной буквы. В данном случае это le Roi.


    1. flancer
      09.03.2017 14:27

      Fixed.


  1. Alex_Soloviev
    10.03.2017 13:41
    +4

    Добрый день!

    Название статьи отличное, и мы, будучи в какой-то степени конкурентами Magento, прочитали ее не без удовольствия и даже с некоторой долей злорадства.

    Однако, этот король еще долго не умрет, даже если по мнению автора его эра уже клонится к закату — даже ( если вдруг, что вряд ли) после того, как движок перестанут официально разрабатывать и поддерживать, он еще много лет будет кормить комьюнити девелоперов и фрилансеров. Все просто: многочисленные живые магазины никто махом не закроет, ибо миграция на другую незнакомую платформу со своими собственными скрытыми косяками и болячками — это уж очень трудоемкий, дорогой и рискованный процесс для бизнеса, которому каждый день простоя чреват финансовыми потерями. Поэтому как разработчик Magento, Вы еще долго сможете на этом короле зарабатывать и на хлеб, и на масло к нему.

    Более того, очень вероятно, что через пару лет Magento — двойку все же полюбят искренней и чистой любовью — у нас есть свой собственный пример аналогичного «финта ушами», правда, случился он несколькими годами ранее.

    Те, кто хорошо знаком с Magento и работают с западным рынком ( США, Канада, Англия в частности), наверняка слышали и про X-Cart. Как и первая Magento, X-Cart 4 с процедурным кодом развивался на протяжении многих лет, обрастал фичами, расширениями, третьесторонними девелоперами ( тем, что в Магентомире принято называть экосистемой).

    Когда в 2013 году мы выкатили X-Cart 5 с MVC/OOP/Doctrine на борту, с принципиально иной архитектурой, мы столкнулись с теми же сложностями, что вторая Magento испытывает сейчас:

    • сильно меньше готовых расширений и внешних разработчиков, желающих изучать по сути новую платформу с довольно значительным learning curve, и эти расширения писать, так как мало клиентов
    • а клиентов мало было, так как было мало расширений и девелоперов.
    • то есть, по сути, своего рода замкнутый круг, где новое коммьюнити еще не сформировалось, а старое хейтит все новое


    Когда мы показывали пятерку существующим пользователями X-Cart 4, они не сразу могли оценить новые фичи, а вот отсутствие ряда старых, которыми они активно пользовались, конечно, бросалось им в глаза. В итоге мы приняли стратегическое решение не форсить «пересаживание» клиентов на 5ку, а продолжить поддерживать X-Cart 4 для существующих пользователей, но новым предлагать в первую очередь X-Cart 5 ( при условии, что он мог решить их бизнес-задачи).

    Спустя 3 года большой и планомерной работы, нам удалось «заслужить любовь» и клиентов, и разработчиков: количество продаж «новой-клевой-незнакомой» X-Cart 5 росло, росло, и в итоге в 2016 году таки превысило продажи «старой доброй» X-Cart 4. Ну, а с ростом количества клиентов, конечно, и разработческое комьюнити подтянулось. Сейчас у нас далеко не 10K расширений, но очень значительную часть основных потребностей владельца интернет-магазина они закрывают.

    Что показательно, на нашем форуме уже год как перестали появляться полные печали и безнадежности посты ( вот прямо как Ваш, только на английском), а вместо них всякие you guys rock, I changed my opinion и тд — то есть произошла смена вектора в отношении комьюнити к новой платформе.

    В общем, давайте посмотрим, что Вы скажете через 2-3 года, когда Le Roi хорошенько осмотрится и продолжит завоевание мира — все же, у него сейчас огромная армия «верноподданных» и нехилые бюджеты на маркетинг

    … Хотя и хотелось бы под шумок отъесть у Magento кусок пирога =)


  1. maghamed
    10.03.2017 16:52

    Вы должны понимать, что Magento и Woo сложно назвать прямыми конкурентами. Так как они конкурируют за разные сегменты рынка. Woo нацелен на очень маленького продавца, в то время как Magento 2 начала ориентироваться на мерчанта с годовым оборотом 20+ млн. $ при этом удерживая сегменты, которые заняла М1. Oro изначально себя позиционировал как В2В решение, а не В2С. В Magento 1 не было предложений для В2В из коробки вообще. Посмотрим, как М2 отреагирует на это в ближайшее время. Пока же можно смело говорить, что наибольшим конкурентом для Magento 2 на рынке является Magento 1


    1. flancer
      10.03.2017 18:13

      Woo нацелен на очень маленького продавца

      Alexa Top 1K:


      • Magento: 10
      • Woo: 4

      Может все-таки на "не очень маленького продавца"? Очень маленькие в "топ 1000" не попадают.


      при этом удерживая сегменты, которые заняла М1

      Миграция клиентов в феврале 2017:


      • Magento: -754
      • Woo 2.6: 10,189
      • Woo: 4,696
      • Woo 2.5: -1,625
      • Woo 2.4: -527
      • Woo 2.3: -361
      • Woo 2.2: -209
      • Woo 2.1: -179
      • Woo 2.0: -147
      • Woo 1.6: -44

      Данные говорят, как минимум, о том, что миграция в Woo несколько проще, чем в Magento, а не о том, что Magento удерживает сегменты. Magento 2 может и "начала ориентироваться на мерчанта с годовым оборотом 20+ млн. $", но ориентируются ли эти мерчанты на Magento 2?


  1. joni_jones
    10.03.2017 18:17

    Касательно \Magento\Sales\Api\OrderStatusHistoryRepositoryInterface он автогенерированный и он работает. Но согласен что неявно и документации не хватает, но стараемся исправлять ситуацию.


    По поводу bugfixes — я полностью разделяю Вашу боль (думаю многие core-разработчики тоже), мы тоже сталкиваемся с ситуациями когда исправленный баг несколько месяцев не может попасть в релиз версию. Причин несколько почему так — это и бекпортирование с develop ветки, и регрессионное тестирование для каждого релиза, но последнее время сделали упор на внедрение бОльшего кол-ва автотестов (в первую очередь функциональных) и на горизонте виднеются положительные изменения в этом направлении.


    1. flancer
      10.03.2017 18:32

      Перевел свой проект в production mode — да, класс \Magento\Sales\Api\Data\OrderStatusHistory\Repository имплементирующий интерфейс \Magento\Sales\Api\OrderStatusHistoryRepositoryInterface появился в файле .../var/generation/Magento/Sales/Api/Data/OrderStatusHistory/Repository.php.


      Будем надеяться, что положительные изменения в багфиксах станут скорее правилом, а не исключением. Могут ведь иногда и за 2 минуты смержиться:
      image


      1. maghamed
        10.03.2017 20:46
        +1

        Они уже становятся правилом (the future is here), так как твит Макса Пронько, который Вы привели посвящен мероприятию, которые называется Magento Contribution Day, которое прошло в Италии (Meet Magento Italy).
        Также в ближайшее время подобный ивент пройдет в Хорватии.
        Идея простая — представители комьюнити фиксят открытые GitHub issue и вмете с представителями Core Magento Team обрабатывают фикс, ревьювят и вливают в Magento mainline.
        Комьюнити вроде бы довольно такой инициативе.
        По поводу других комьюнити инициатив также можно прочитать здесь.

        Но основная — это то, что выделилась отдельная команда Community Engineering Team, которая занимается процессингом внешних Pull Request-ов. Чтобы максимально уменьшить время ожидания пул реквестов в очереди.
        За успехами этой команды можно следить на открытой GitHub борде с PR-ами.

        ну и собственно представити комьюнити уже сами начали ревьювить и процессить внешние пул реквесты.
        Об этом в ближайшее время будет отдельный пост на Хабре.


        1. flancer
          10.03.2017 21:13

          Коллега maghamed, может у Вас есть идея, как бы злосчастный PR-5145 протолкнуть в ближайший релиз?


          1. maghamed
            10.03.2017 21:42
            +1

            уже написал по этому поводу письмо продакт оунерам, отвечающим за бекпорты в 2.0.* и 2.1.* так как фикс обратно совместимый проблем доставить его в эти релизы быть не должно.


      1. joni_jones
        10.03.2017 21:19

        В developer mode репозиторий тоже сгенерируется при инициализации объекта, где используется интерфейс как зависимость, или после выполнения сборки всего di с помощью bin/magento setup:di:compile.


  1. maghamed
    10.03.2017 21:39
    +1

    Относительно глобальных вопросов, которые Вы затронули:

    Или неоднозначные зависимости между данными в тех же store-таблицах или stock-таблицах?

    Стоки в Мадженто отдельная история, не зря в офисе весит такой девиз.
    Из API интерфейса StockItemInterface знание о вебсайтах убрали. Идеально поля website_id не должно быть в таблице StockItem, т.к. StockItem это не что иное как сущность-связка продуктов к стокам, которое хранит кол-во товара на конкретном стоке. Опять же идеально было бы если бы такую связку мы могли задавать в каком-то скоупе, website только один из возможных скоупов. Пока поле website_id в таблице это рудимент, так как опять же пока еще Magento из коробки поддерживает только один сток. Но с точки зрения индексов сделали, чтобы комьюнити могло самостоятельно писать малти стоковые экстеншены.

    почему для EAV заложено только 8 типов сущностей (customer, customer_address, catalog_category, catalog_product, order, invoice, creditmemo, shipment) из которых через админку для расширения доступны только атрибуты продукта (catalog_product)? Почему проигнорированы такие сущности, как admin, authorization, stock, sales_rule, cms, rating, report, review, ...?

    Мадженто идет к тому, чтобы любые сущности были расширяемы дополнительными атрибутами. Не только перечисленные вами, а все, включая сущности добавленные сторонними разработчиками. Первый шаг был сделан к этому с добавлением Extension Attributes в Data API интерфейсы. Но пока это нельзя назвать полноценной заменой EAV, потому что программист обязан сам заниматься персистингом и ретривингом данных этого атрибута, что приносит замедление производительности. Поэтому корректное решение в данном случае было бы взять ответственность по сохранению и извлечению атрибута, а также эффективному хранению и фильтрации по нему на сторону Мадженты, а не стороннего программиста.

    Но… попробуйте программно сохранить store (Store View в терминах админки), руководствуясь best practices от Magento 2 — не получится. Это при том, что репо-класс для \Magento\Store\Model\Store существует, правда без метода save()

    Это известный gap, не могу сказать когда именно он будет исправлен


    1. flancer
      10.03.2017 23:21
      +1

      не зря в офисе весит такой девиз.

      ну тогда не все так безнадежно, как мне казалось :)


      1. maghamed
        11.03.2017 00:38

        Ох, а ещё Т9 заменил висит на весит, но это, в контексте описанных выше проблем, уже мелочи :)