Как добавить 2 мода в один и тот же файл в файле OCMOD для opencart 2.3

Я хочу добавить небольшой фрагмент скрипта над блоком скрипта и еще один под тем же блоком в том же файле. (Я не могу заменить, потому что блок также изменен другим расширением).

Если у меня был один и тот же файл дважды, я получаю сообщение, что для модификации требуется уникальный идентификационный код при установке расширения (обратите внимание, что если я удалю один из разделов файла, он загружается нормально, поэтому проблема на самом деле не в идентификаторе кода) Вот что У меня есть:

<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Spare Parts</name>
    <version>1.0</version>
    <author>Olivier</author>
    <code>spare_parts</code>
    <link></link>

    <file path="admin/model/catalog/product.php">
        <operation error="log">
                <search index="0"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'");]]></search>
                <add position="before"><![CDATA[
                                    //spare parts extension

                                    if ( $product_id !=671 )
                                        {//only update the options if this product is not the spare parts

                    ]]>
                </add>
        </operation>
    </file>
  <file path="admin/model/catalog/product.php">
        <operation error="log">
                <search index="1"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "'");]></search>
                <add position="before"><![CDATA[
                                    }//end except spare parts

                    ]]>
                </add>
        </operation>
    </file>

</modification>

Я пытался использовать два раза в одном и том же и даже использовать поиск и дважды добавлять в рамках одной операции, но получаю ту же ошибку:

    <?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Spare Parts</name>
    <version>1.0</version>
    <author>Olivier</author>
    <code>spare_parts</code>
    <link></link>

    <file path="admin/model/catalog/product.php">
        <operation error="log">
            <search index="0"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'");]]></search>
            <add position="before"><![CDATA[
                                //spare parts extension

                                if ( $product_id !=671 )
                                    {//only update the options if this product is not the spare parts

                ]]>
            </add>
        </operation>
        <operation error="log">
            <search index="1"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "'");]></search>
            <add position="before"><![CDATA[
                                }//end except spare parts

                ]]>
            </add>
        </operation>
    </file>

</modification>

person user1620090    schedule 28.04.2021    source источник
comment
Какую ошибку вы получаете?   -  person K. B.    schedule 28.04.2021


Ответы (1)


  <?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>Spare Parts</name>
    <version>1.0</version>
    <author>Olivier</author>
    <code>spare_parts</code>
    <link></link>

    <file path="admin/model/catalog/product.php">
        <operation error="log">
            <search index="0"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$product_id . "'");]]></search>
            <add position="before"><![CDATA[
                                //spare parts extension

                                if ( $product_id !=671 )
                                    {//only update the options if this product is not the spare parts

                ]]>
            </add>
        </operation>
        <operation error="log">
            <search index="0"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "'");]></search>
            <add position="before"><![CDATA[
                                }//end except spare parts

                ]]>
            </add>
        </operation>
    </file>

</modification>

Я изменил index="1" на index="0" Когда вы используете для второго добавления index="1", вы закрываете свое условие в следующей функции (public function copyProduct($product_id) {). Я предполагаю, что вам нужно это исключение только для public function editProduct($product_id, $data) { Если вам это нужно для второй функции, вы должны добавить свои условия отдельно.

person K. B.    schedule 28.04.2021
comment
К сожалению, он дает ту же ошибку со вторым индексом = 1, кроме того, второй поиск не ищет ту же строку, что и первая, и, поскольку есть 2 вхождения одной и той же строки поиска, если бы она работала, вероятно, был бы добавлен фрагмент не в том месте - person user1620090; 28.04.2021
comment
вы должны использовать второй индекс = 0, как в моем примере - person K. B.; 28.04.2021
comment
все равно выдает ошибку Модификация требует уникальный идентификационный код! (с обоими индексами = 0), как только я добавлю второй тег ‹operation›, если я его удалю, ошибка исчезнет - person user1620090; 29.04.2021
comment
Вы должны сначала удалить свой старый. Или, если вы не можете удалить, вы можете найти его в своей БД через phpmyadmin. oc_modiffication и удалите там ваше расширение. - person K. B.; 29.04.2021
comment
Я удалил его, проблема не в дублировании, как указывает ошибка, тот же файл с использованием «операции» только один раз загружается нормально - person user1620090; 29.04.2021
comment
Я не увидел в вашем файле никаких проблем... Вы можете попробовать vqmod, если используете OC2.3. Только не забудьте xml файл немного другой для VQMOD - person K. B.; 29.04.2021