Подходящий / лучший способ выполнения некоторых PHP, не связанных с базой данных, когда модуль впервые установлен? - PullRequest
2 голосов
/ 07 марта 2012

Я создаю модуль, который требует нескольких действий (только один раз), когда модуль установлен. Может быть несколько вещей, которые нужно сделать, но самое основное, что мне нужно сделать, это сделать API-вызов к серверу, чтобы сообщить внешнему серверу, что модуль был установлен, и получить несколько обновленных настроек товар.

Я прочитал этот этот вопрос по stackoverflow , однако в моей ситуации я действительно заинтересован в выполнении кода, который не имеет ничего общего с базой данных, фиксаторами, обновлением таблиц и т. Д. Кроме того, просто чтобы прояснить это модуль не влияет (влияет?) на передний конец. К вашему сведению, я также прочитал эту впечатляющую статью Алана Шторма, но на самом деле это лишь наводит на мысль о том, что сценарии установки / обновления не предназначены для выполнения случайного PHP.

На мой взгляд, у меня есть несколько возможных способов сделать это:

  • Я делаю то, что боюсь, что это не лучшая практика, и добавляю немного PHP в мой скрипт установки / установки, чтобы выполнить этот php
  • Я создаю своего рода cronjob, который будет выполнять нужную мне задачу только один раз (не уверен, как это будет работать, но кажется, что это может быть "креативным" решением - конечно, если cron не настроен должным образом, тогда это будет провал, что не хорошо
  • Я создаю флаг core_config_data ('mynamespace / mymodule / initialized'), который я устанавливаю после запуска моего скрипта, и проверяю каждую область adminhtml, к которой касается мой модуль (CMS / Pages и мой собственный настраиваемый контроллер adminhtml) , Это кажется хорошим решением, за исключением всех дополнительных издержек каждый раз, когда нажимается CMS / Pages или мой контроллер, проверяя этот параметр core_config_data. ХОРОШО в этом решении будет то, что если что-то не получится с моим вызовом API, я могу установить для этого флага значение false, и он будет запущен снова, отобразит соответствующее сообщение и продолжит работу, пока не выполнится успешно (или не будет иметь дополнительной логики, которая остановит код инициализации после XX количества попыток)

Является ли какой-либо из этих вариантов "лучшим" способом, и есть ли какой-нибудь прецедент для этого где-нибудь, например, уважаемое расширение или от самих Magento?

Заранее спасибо за ваше время!

1 Ответ

1 голос
/ 14 марта 2012

Вы задаете интересный вопрос.

В настоящее время я не знаю, каким образом можно выполнить любой произвольный PHP при установке модуля, очевидный метод (справедливо / неверно) заключается в использовании сценария установки / обновления установщика согласно пункту 1ваши Q.

2 и 3 кажутся более ресурсоемким подходом, т.е.без необходимости проверять каждую загрузку страницы (кеш или нет).

Существует также подход с использованием ./pear для установки вашего модуля (при условии, что вы упаковали его с помощью Magento).Я очень быстро просмотрел ./downloader/pearlib/php/pearmage.php, но не увидел ни одной строки, которая выполняется (против копирования файлов).Я бы предположил, что это лучшее место для выполнения чего-либо при установке (кроме 1, упомянутого выше).

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

...