Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


kagan
 Поделиться

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

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

 

Подскажите пожалуйста как пользоваться 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 сделать несколько замен в нужных мне местах без дублирование кода. (т.е. проблема в перечисление мест где необходимо заменить код) 

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

<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>

А так?

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

<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

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

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

 

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

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

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

 

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

 

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

 

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

 

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

 

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

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

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

 

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

 

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

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

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

 

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

 <search index="0,1,2,3,5,6,7,8"><![CDATA[бла-бла-бла]]></search>
  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

 

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

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

 

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

 

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

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

 

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

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

 

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

 

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

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

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

 

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

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

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

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

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

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

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

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


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

 

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

 

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

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

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

 

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

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

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

 

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

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

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

 

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

 

не используйте директиву abort

в отличии от vqmod, где ее применение означало что при отсутствии совпадения код текущего модификатора не будет применен,

в ocmod для движков 2х-303х она работает криво

и вызывает прерывание не только текущего модификатора, но и всех следующих за ним

 

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

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

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

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах

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

 

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

 

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

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

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

 

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

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

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

 

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

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

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

 

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

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

 

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

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

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

 

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

 

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

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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.