Как расширения переопределяют неперезаписываемые классы


Я собирался собрать крошечное расширение, чтобы включить подсказки шаблона в глобальной области, но застрял, пытаясь переписать core/template.

Перезапись класса работает только для классов, созданных с помощью одного из методов Magento для этого (helper, getModel, getSingleton). Для абстрактных и сильно расширенных классов у вас, похоже, остается возможность переопределения local/Mage.

Два вопроса:

  1. Есть ли разумный способ вообще избежать переопределений local/Mage раз?
  2. Если нет, то как вы собираетесь включать такие переопределения в расширения сообщества?
Author: Community, 2013-02-13

1 answers

1) Любое расширение, которое вы предлагаете сообществу, должно находиться в пуле кодов сообщества.

2) Вы не должны, но вы можете, а иногда и должны, потому что Деметра часто игнорировалась в Magento 1.

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

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

  1. В пуле кода сообщества предоставьте измененное определение в соответствующем пространстве имен Mage|Varien|Zend. Возможная проблема заключалась бы в том, что конечный пользователь мог бы сделать то же самое.
  2. Как указано выше, но в новом пуле кода: добавьте новый пул кода к загрузочным путям включения, используя set_include_path(). Недостаток: больше stat(), вызванных загрузчиком, и ваши манипуляции с включением пути будут неочевидными, поскольку они находятся за пределами из начальной загрузки.
  3. Если возможно, предоставьте определение самостоятельно, прежде чем оно будет загружено из своего обычного местоположения, например, явно include() используя его из нестандартного местоположения в вашем пространстве имен.

Озвучьте ваши индивидуальные потребности здесь - у кого-нибудь появится идея. Что касается подсказок пути к шаблону в области администратора, смотрите Мой ответ, который даже не требует PHP.

 6
Author: benmarks, 2017-05-23 12:37:16