Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


kagan

Recommended Posts

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

 

Подскажите пожалуйста как пользоваться 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.