• Блог
  • Подключаем Composer к MODX

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

Давайте ещё раз проговорим, какие преимущества даёт такое решение. Ну во-первых, вы получаете опыт работы с менеджером зависимостей и поднимаете планку своей профессиональной пригодности. Во-вторых, вы можете подключать к MODX сторонние библиотеки из огромного репозитория композера, которые не являются MODX пакетами. Например, известный monolog или Carbon для работы с датами. В-третьих, это даёт вам возможность подключать свои собственные библиотеки и наработки, которые вы храните, например, на GitHub. Это могут быть библиотеки функций, классов, файлы шаблонов или чанков и т.п.

И так приступим. Файлы композера мы будем размещать в папке core. В ней мы создадим файл composer.json. Если композер у вас установлен не глобально, то туда же нужно положить и файл composer.phar.

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

switch ($modx->event->name) {
    case 'OnMODXInit':
        $file = MODX_CORE_PATH . 'vendor/autoload.php';

        if (file_exists($file)) {
            require_once $file;
        }
        break;
}

На данном этапе вы уже можете загружать любые пакеты через Composer.

Пример подключения пакета

Для примера подключим библиотеку хелперов для MODX (modHelpers). Для этого нужно создать файл composer.json (или выполнить composer init) и добавить в него соответстствующие разделы:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/sergant210/modxhelpers"
    }
  ],
  "require": {
    "sergant210/modxhelpers": "1.*@beta"
  }
}

Теперь осталось выполнить команду composer install (вы должны перейти в папку core), которая создаст папку vendor и установит в неё указанную в секции «require» библиотеку «modxhelpers».

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

П.С. Для работы с композером есть интересный компонент ComposerConsole. Он представляет собой консоль для работы с композером прямо в админке. Он устанавливает все необходимые файлы и настраивает плагин.

1   3654

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

  1. Alex 12 июля 2020, 09:33 # 0
    Дык где
    switch ($modx->event->name) {
        case 'OnMODXInit':
    прописывать?!:w

    Ещё у вас ещё здесь modzone.ru/documentation/modhelpers/ ошибка в ссылках — обе ведут на github.com/sergant210/modxhelpers хотя одна должна вести на
    github.com/sergant210/modHelpers
    И ссылка не установку ведёт в никуда, так и не понял как установить( modzone.ru/blog/2016/01/12/composer-plugin-to-modx/
    1. Сергей Шлоков 12 июля 2020, 10:01 # 0
      Дык где прописывать?!
      Так написано же, в плагине.

      Ещё у вас ошибка в ссылках
      Спасибо, исправил. Последняя ссылка как раз на эту статью. Ошибка в годе.

      так и не понял как установить
      В статье рассказывается как подключить. Про установку нужно читать в документации по композеру.
      1. Alex 12 июля 2020, 15:33 # 0
        Здравствуйте, спасибо за ответ.

        Так написано же, в плагине.
        Логично, а в каком? Где его взять? Как его установить, подключать?

        Про установку нужно читать в документации по композеру.
        Здесь не написано как устанавливать github.com/sergant210/modhelpers и при попытке установить
        {
          "repositories": [
            {
              "type": "vcs",
              "url": "https://github.com/sergant210/modhelpers"
            }
          ],
          "require": {
            "sergant210/modhelpers": "*"
          }
        }
        ошибка —
        [Composer\Repository\InvalidRepositoryException]                                                                                      
          No valid composer.json was found in any branch or tag of https://github.com/sergant210/modhelpers, could not load a package from it.


        Здесь написано github.com/sergant210/modxhelpers, но оно же deprcated
        1. Сергей Шлоков 12 июля 2020, 16:51 # 0
          Друг мой, вместо того, чтобы фейспалмить, написал бы лучше, что знаком с MODX всего пару дней и не понимаешь фразы
          Теперь нужно создать плагин на событие OnMODXInit, который будет подключать файл автозагрузки композера
          Удивительный мир!

          Здесь не написано как устанавливать github.com/sergant210/modhelpers
          Наверно потому, что он через композер не ставится.
          1. Alex 12 июля 2020, 19:36 # 0
            Думал статьи для новчиков, ну да ладно, подключил просто через файл без всяких плагинов. Покопаться пришлось чтобы установить таки через композер и сделать таки vendor чтобы autoload.php нормально подклчал ваши наработки. Пришлось локально указывать где файлы лежат, вместо репы:

            {
              "repositories": [
                {
                  "type": "path",
                  "url": "/path_to/core/components/modxhelpers"
                }
              ],
              "require": {
                "sergant210/modxhelpers": "*"
              }
            }
            Не знаю ваш косяк или нет, но при указании версии "*" не хотел устанавливать. У вас версия никакая не прописана, добавил «version»: «1», и установилось нормально, на странице потом добавил просто:

            $loader = $modx->getOption('modhelpers_core_path', null, MODX_CORE_PATH) . 'components/modhelpers/autoload.php';
            require_once $loader;
            Всё это для $request'ов, ибо на битрексе привык к удобным плюшкам вместо $_POST $_GET -__-
            В итоге можно юзать легко и просто:
            global $request;
            $action = $request->input('action');
            1. Сергей Шлоков 12 июля 2020, 21:35 # 0
              Зачем все эти манипуляции ради старой библиотеки? В админке есть менеджер пакетов, надо просто ввести в поиск modHelpers и нажать кнопку Установить. Проще простого. И будет актуальная версия modHelpers.
              1. Alex 12 июля 2020, 22:47 # 0
                Почему старой? Код в /path_to/core/components/modxhelpers лежит из новой, этой github.com/sergant210/modHelpers
                Или есть ещё что-то новее?
                С модухом общаюсь неделю, подвернулся проект и в нём начинающий кодер такого наворотил просто ахтунк… А вообще — очень непривычно после Yii, WP, Bitrix'а. Эта муть через гуй, и код в базе — просто ахтунк! Может, конечно, не знаю чего, но первое впечатление не очень…
                Вам нравится модух? Или больше ничего не пробовали?

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.