Просмотр поста

.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
В начале про сам класс BBcode.
==========
Его трогать нельзя, это система, которая в последствии будет обновляться и дорабатываться.
Но как быть, если не устраивает функционал?
Элементарно - пишете свой класс, который наследует оригинальный BBcode. Пусть это будет MyBBcode::class
Далее, в своем классе вы переназначаете те методы, работу которых хотите изменить и возможно добавляете свои.
Иными словами: сохраняя интерфейс оригинального класса, вы изменяете, или дополняете его функционал.
Полиморфизм йопта

Но как быть дальше?
Система то знает про основной класс Bbcode и ничего не знает про мой MyBBcode
Как заставить ее вместо Bbcode использовать MyBBcode (который как мы знаем наследует основной Bbcode)?
При использовании DI это очень легко.
Глянем сюда: https://github.com/john-cms/jo ... p#L10
Это конфигурационный файл DI контейнера, гдле прописаны все глобавльные зависимости.
В указанной строке мы видим, что ключу 'bbcode' соответствует класс Johncms\Bbcode::class

Как вы уже правильно догадлались, нам достаточно переписать всего лишь эту одну строку и вместо Johncms\Bbcode::class указать наш класс MyBBcode::class (ну разумеется с его неймспейсом).

Однако и тут можно все улучшить.
Файл /system/config/dependencies.global.php является системным и при последующих обновлениях может меняться.
Как быть?
Все очень просто, для нашего модуля мы пишем СВОЙ конфигурационный файл.
Однако вместо xxx.global.php
мы его называем к примеру
mybbcode.local.php

Дело в том, что файлы .local считываются ПОСЛЕ .global и переписывают предыдущие значения.
В нашем случае нам надо переписать ключ зависимостей 'bbcode' что мы в нашем файле mybbcode.local.php и делаем:
return [
    'dependencies' => [
        'factories' => [
            'bbcode' => Johncms\MyBbcode::class,
        ],
    ],
];

Ну и напоследок кидаем наш конфигурационный файл mybbcode.local.php в каталог /system/config
Файл автоматически подключится к общей конфигурации.