Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

OCMOD в четвёртой версии

OCMOD — способ изменить код ядра, не правя сами файлы. Файл XML описывает изменение: в каком файле какую строку найти и что рядом с ней добавить. Магазин строит изменённую копию файла и использует её вместо оригинала. Во второй и третьей версиях это был основной способ расширять магазин; в четвёртой его место заняли события.

Когда он нужен

ЗадачаСредство
Изменить данные шаблона, HTML, аргументы или результат методаСобытие
Заменить шаблонСобытие, меняющее путь к шаблону
Изменить строку в середине метода ядра, куда не дотягивается ни одно событиеOCMOD

OCMOD — крайняя мера: только когда в нужном месте нет триггера.

Доступность

В первых выпусках четвёртой версии — 4.0.0 и 4.0.1 — OCMOD не было совсем. Он вернулся в 4.0.2. Если в вашем выпуске он есть, в панели есть пункт Extensions → Modifications.

Файл модификации

<?xml version="1.0" encoding="utf-8"?>
<modification>
    <name>Acme Hello: заметка в корзине</name>
    <code>acme_hello_cart</code>
    <version>1.0.0</version>
    <author>Acme</author>
    <link>https://example.com</link>
    <file path="catalog/controller/checkout/cart.php">
        <operation>
            <search><![CDATA[$data['footer'] = $this->load->controller('common/footer');]]></search>
            <add position="before"><![CDATA[
        $data['acme_note'] = $this->config->get('module_acme_hello_text');
            ]]></add>
        </operation>
    </file>
</modification>

Файл говорит: в контроллере корзины найти строку, которая загружает подвал, и вставить перед ней новую строку. Переменная acme_note станет доступна в шаблоне корзины.

ТегСмысл
codeУникальный код модификации
file pathИзменяемый файл, путь от корня сайта
searchСтрока для поиска — точно как в файле
add positionКуда поставить новый код: before, after или replace

Куда положить файл

Имя файла заканчивается на .ocmod.xml, и он входит в архив дополнения. Где именно в архиве он должен лежать и как называться, решает установщик, и это различается между выпусками — посмотрите документацию своего выпуска или работающее дополнение с OCMOD для него.

Применение

После установки пакета откройте Extensions → Modifications и нажмите кнопку обновления. Магазин перечитает все файлы модификаций и построит изменённые копии в system/storage/ — исходные файлы в catalog/ и admin/ остаются прежними. Откройте страницу корзины — новая переменная доступна в её шаблоне.

То же обновление нужно после каждого изменения файла XML и после обновления магазина.

Та же задача событием

Примеру выше OCMOD не нужен. Обработчик триггера catalog/view/checkout/cart/before добавляет ту же переменную в $data — без поиска строки кода, которая может измениться в следующем выпуске.

Частая ошибка

В строке search есть фрагмент, который в другом выпуске отличается, — лишний пробел, переименованная переменная. Строка не находится, модификация молча пропускается, и возможность исчезает после обновления. Ищите самый короткий устойчивый фрагмент, а после каждого обновления проверяйте журнал модификаций на той же странице.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.