Flexcore Plugins System

FlexPS позволяет серьезно расширять/модифицировать стандартный функционал, без ущерба обновлениям.

Основные модули могут быть заменены плагинами, которые могут расширить или изменить существующий функционал. Для этого, необходимо создать в директории /plugins/ (если не существует необходимо создать самостоятельно) файл с таким-же путём как и заменяемый файл.

Класс-плагин должен носить название «plugins_название_оригинального_класса». Соответственно он может быть унаследован от оригинального (заменяемого) класса для того чтобы оставалась возможность использовать стандартный функционал при необходимости.

Выбор между плагином и оригиналом происходит при выполнении следующей конструкции:

$class = classes\API\API::get_object ('название_оригинального_класса', [$args = array, $init_method = 'getInstance']);

Подробнее:

  • $args – необязательный массив аргументов, передаваемых в конструктор. Может быть как ассоциативным массивом, в котором ключи массива должны быть названы аналогично принимаемым параметрам (без $ в начале) - в этом случае их порядок не важен.
    Либо обыкновенным массивом — в таком случае элементы должны быть упорядочены в том-же порядке, что и принимаемая функция.
  • $init_method – название метода, который инициализирует класс, в случае если это невозможно обычным способом (например Singleton)

В этом примере в переменной $class будет либо объект-плагин (если существует), либо оригинальный объект-класс.


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

$class = new название_оригинального_класса([$arg1, $arg2, ….]);

Демонстрационные примеры:

  • basket.class-example.rar - Пример написания плагина для корзины, в архиве оригинальный файл и плагин создающий скидку на все товары в ночное время.

Дополнительная информация: