kagan

Проблема с OFFSET в OCMOD

Рекомендуемые сообщения

kagan    31

Всем привет!)

 

Подскажите пожалуйста как пользоваться OFFSET в OpenCart 2.x в OCMOD'ах

 

Пробовал offset="5|7" не работает

Пробовал offset="5,7" не работает

Пробовал offset="5" limit="1" работает

<file path="admin/model/catalog/product.php">
<operation>
      <search offset="5|7" limit=""><![CDATA[if (isset($this->request->get['filter_status'])) {]]></search>
      <add position="before"><![CDATA[
      // MY CODE HERE
      ]]></add>
    </operation>
  </file>

Можно ли с помощью параметра OFFSET в OCMOD сделать несколько замен в нужных мне местах без дублирование кода. (т.е. проблема в перечисление мест где необходимо заменить код) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Tom    2 014
<file path="admin/model/catalog/product.php">
<operation>
<search><![CDATA[if (isset($this->request->get['filter_status'])) {]]></search>
<add position="before" offset="5,7"><![CDATA[
// MY CODE HERE
]]></add>
</operation>
</file>

А так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31
<file path="admin/model/catalog/product.php">
<operation>
<search><![CDATA[if (isset($this->request->get['filter_status'])) {]]></search>
<add position="before" offset="5,7"><![CDATA[
// MY CODE HERE
]]></add>
</operation>
</file>

А так?

 

 

Пробовал так:

    <operation>
      <search><![CDATA[if (isset($this->request->get['filter_status'])) {]]></search>
      <add position="before" offset="4"><![CDATA[
      /* MY CODE HERE */
      ]]></add>
    </operation>

не срабатывает, все равно криво делает замену:

3a22f2ac9cb8.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    822

чисто на всякий случай - точно не путаете index и offset?

 

(offset - задает смещение от найденной строки, index - указывает к каким по счету вхождениям применять)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31

чисто на всякий случай - точно не путаете index и offset?

 

(offset - задает смещение от найденной строки, index - указывает к каким по счету вхождениям применять)

 

Видимо путаю) 

 

Хорошо, а "index" указывается в search?

 

Суть такая, что по заданному значению в search мне должно делать 8 замен, мне нужно только допустим 2 - 6-ю и 7-ю.

 

Подскажите пожалуйста, а какой принцип offset, смещение вверх, вниз?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31

Прочитал еще раз статью по OCMOD.

 

Параметр "index" все-таки вставляется в "search".

 

Но я не понимаю почему все-равно мой OCMOD находит только первую строку и делает там замену где мне не нужно (т.е. если индекс 4, он делает все равно только в первом найденном элементе).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Tom    2 014
Суть такая, что по заданному значению в search мне должно делать 8 замен, мне нужно только допустим 2 - 6-ю и 7-ю.

 

Первая строка нулевая (0,5,8,10...).Так попробуйте.

 <search index="0,1,2,3,5,6,7,8"><![CDATA[бла-бла-бла]]></search>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31

 

Первая строка нулевая (0,5,8,10...).Так попробуйте.

 <search index="0,1,2,3,5,6,7,8"><![CDATA[бла-бла-бла]]></search>

 

Попробовал, делает замены. Но если указать index="0,10" оно все подряд все-равно заменяет (т.е. игнорирует то, что я указал в индексе).

 

Кусок кода в котором делаю замену - http://pastebin.com/4VL8myJ2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31

 

Первая строка нулевая (0,5,8,10...).Так попробуйте.

 <search index="0,1,2,3,5,6,7,8"><![CDATA[бла-бла-бла]]></search>

 

Ради интереса может проверить, что ocmod либо глючит на замену, либо это у меня сборка кривая OpenCart'a.

 

Простенький ocmod который не может нормально выполниться - http://pastebin.com/1ra8EFRF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31

Если что тестировал на OpenCart 2.0.0.0.

 

Решил в обход index"ов, но тем не менее так и не понял почему они не работают у меня...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
rb2    405

Если что тестировал на OpenCart 2.0.0.0.

Более неудачный выбор версии трудно представить. Там ошибок было - мама не горюй. На каждом шагу спотыкались.

Минимальная версия, пригодная для жизни - oc2010/oc2011. Из этих двух лучше 2011, конечно.

И если посмотрите в код oc2000, то легко заметить, что в `search` там нет и в помине обработки параметра `index`.

Так что стоило начинать с указания версии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
AlexDW    822

ну вот, разобрались

 

от себя пару моментов добавлю:

 

1. использование index - само по себе скользкое решение

при внесении изменений всегда нужно учитывать, что ваш мод может быть не единственным

и если другой мод внесет свой код - с большой долей вероятности index полетит к черту

 

в вашем случае, при наличии проверок в коде и безвредности его изменений - лучше всего вносить без index

добавится во все места, зато гарантированно будет работать

(главное - понимать, какой код не будет доставлять проблем)

 

2. старайтесь использовать параметры abort/skip в <operation>

это исключит проблемы работоспособности в случае отсутствия совпадений (невнесения изменений)

да и в логах ocmod проще будет понять что не так в случае проблем

 

<operation error="abort"> - полностью отменяет все внесенные изменения и прерывает работу мода

<operation error="skip"> - игнорирует выполнение кода (про нюансы skip)

 

3. думайте над привязкой кода, старайтесь не использовать index и offset

понятно, что не всегда можно обойтись без них - но по возможности лучше избегать

не забывайте - ваш мод может быть не единственным

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
kagan    31

ну вот, разобрались

 

от себя пару моментов добавлю:

 

1. использование index - само по себе скользкое решение

при внесении изменений всегда нужно учитывать, что ваш мод может быть не единственным

и если другой мод внесет свой код - с большой долей вероятности index полетит к черту

 

в вашем случае, при наличии проверок в коде и безвредности его изменений - лучше всего вносить без index

добавится во все места, зато гарантированно будет работать

(главное - понимать, какой код не будет доставлять проблем)

 

2. старайтесь использовать параметры abort/skip в <operation>

это исключит проблемы работоспособности в случае отсутствия совпадений (невнесения изменений)

да и в логах ocmod проще будет понять что не так в случае проблем

 

<operation error="abort"> - полностью отменяет все внесенные изменения и прерывает работу мода

<operation error="skip"> - игнорирует выполнение кода (про нюансы skip)

 

3. думайте над привязкой кода, старайтесь не использовать index и offset

понятно, что не всегда можно обойтись без них - но по возможности лучше избегать

не забывайте - ваш мод может быть не единственным

 

Спасибо большое за ответы! Теперь разобрался)

 

Разобрал код более внимательно, и смог обойтись без offset'ов и index'ов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу