Opencart / OCmod - Поиск одной или другой строки кода

Я работаю над модификацией для Opencart, используя OCmod. Изначально я начал писать его для Opencart 2 (на самом деле он сделан и работает). Теперь я обновляю его для OC3.

Вот краткий пример того, что происходит не так.

Раньше я писал это для OC2:

<operation>
    <search><![CDATA[
        'status' => ($result['status']) ? $this->language->get('text_enabled') : $this->language->get('text_disabled'),
    ]]></search>
    <add position="replace"><![CDATA[
        'status' => ($result['status']),
    ]]></add>
</operation>

Проблема в том, что начиная с OC3 эта часть кода:

'status' => ($result['status']) ...

был изменен на:

'status' => $result['status'] ...

Следовательно, строка не будет найдена, и замена не будет произведена.

По этой причине, если я хочу опубликовать свою модификацию для обеих версий, мне придется выпустить две разные версии моей модификации.

Интересно, есть ли способ сказать OCmod искать одну из двух строк, а затем изменить найденную. Таким образом, у меня мог быть только один код, работающий для обеих версий.

Я попытался продублировать этот фрагмент кода, заставив его искать обе строки, но моя модификация перестает работать, так как одна из строк не найдена.

Любые идеи о том, как обойти это?


person Wellington Rodrigues Pereira    schedule 26.01.2018    source источник
comment
Можете ли вы сказать, над каким файлом вы работаете?   -  person DigitCart    schedule 26.01.2018
comment
@DigitCart Сопоставление модификаций записывается в файл install.xml ocmod. Если вы хотите знать, какой файл я редактирую, это admin/controller/catalog/product.php. Но это только для примера, который я привел. У меня такая же проблема и с другими файлами.   -  person Wellington Rodrigues Pereira    schedule 27.01.2018
comment
Я не думаю, что есть способ сказать, что для него нужно написать 2 моды.   -  person Frosty    schedule 27.01.2018


Ответы (1)


РЕШЕНО

Оказывается, OCmod позволяет выбирать только часть кода, а не целые строки. Поскольку мне нужно было удалить только последнюю часть строки, я сделал это:

<operation>
    <search><![CDATA[
        ? $this->language->get('text_enabled') : $this->language->get('text_disabled'),
    ]]></search>
    <add position="replace"><![CDATA[
        ,
    ]]></add>
</operation>

Кроме того, если это кому-то поможет, если OCmod будет искать несуществующий файл, это не вызовет ошибки. Это было полезно, так как файл «product_list.tpl» был переименован в «product_list.twig» в Opencart 3. Итак, в моем файле install.xml я смог написать модификацию для обоих файлов, даже если один из них не будет найден в зависимости от версии OpenCart.

person Wellington Rodrigues Pereira    schedule 29.01.2018