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

Регулярка regex в модифікатора ocmod


Recommended Posts

Для свої потреб роблю модифікатор і постало питання знаходження декількох рядків, а саме потрібно знайти і після нього додати певний код

'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
				);

В модифікаторі прописав 

 <file path="catalog/controller/product/category.php">
		<operation error="skip">
			<search regex="true"><![CDATA[#^(.*)'href'        => \$this->url->link\('product\/product'(.*?)$\n^(.*)$#]]></search>
			<add position="after"><![CDATA[
				if ($data['ns_on_off_category_page_fastorder'] == 1) {
					$data['ns_on_off_category_page_fastorder'] = ($result['price'] >= (int)$this->config->get('config_minprice')) ? 1 : 0;
				}]]></add>
		</operation>

Але нічого не відбувається. Перевіряв регулярку на https://regex101.com/ все гаразд

Надіслати
Поділитися на інших сайтах

09.02.2023 в 11:43, Flint2000 сказал:

Для свої потреб роблю модифікатор

 

Якщо треба для себе і хочете regex, то не підскажу, то треба питати в цій темі:

 

Якщо треба знайти і вставити після якогось рядка, то можна використати offset.

Надіслати
Поділитися на інших сайтах

09.02.2023 в 11:50, WarStyle сказал:

 

Якщо треба знайти і вставити після якогось рядка, то можна використати offset.

Дуже не рекомендую offset :ph34r:
 

Надіслати
Поділитися на інших сайтах

В 09.02.2023 в 11:50, WarStyle сказав:

Якщо треба знайти і вставити після якогось рядка, то можна використати offset.

Там дуже багато перебирати 200 входжень

Надіслати
Поділитися на інших сайтах

09.02.2023 в 11:52, Flint2000 сказал:

Там дуже багато перебирати 200 входжень

ocmod не відробляє мультистрокові
Можливо з-за цього у вас і не працює

Надіслати
Поділитися на інших сайтах

В 09.02.2023 в 11:55, markimax сказав:

ocmod не відробляє мультистрокові

Спеціально перечитував https://github.com/opencart/opencart/wiki/Modification-System

Там же регуляркою можна вибірку зробити, регулярку написав на 2 рядки. А воно не хоче

Надіслати
Поділитися на інших сайтах

може проблема в 'href' =>
там можуть бути таб або пробіл

або все разом

Надіслати
Поділитися на інших сайтах

В 09.02.2023 в 12:02, ibond сказав:

там можуть бути таб або пробіл

 

Так тут https://regex101.com/ перевірку проходить, я копіпаст коду з оригінального файлу взяв

Надіслати
Поділитися на інших сайтах

а почему без Регулярки нельзя?

к примеру вот так (если нужно вставить код после массива, который закрывается ");")

<file path="catalog/controller/product/category.php">
		<operation error="skip">
			<search><![CDATA[$this->url->link('product/product', 'product_id=' . $result['product_id'])]]></search>
			<add position="after" offset="1"><![CDATA[
				if ($data['ns_on_off_category_page_fastorder'] == 1) {
					$data['ns_on_off_category_page_fastorder'] = ($result['price'] >= (int)$this->config->get('config_minprice')) ? 1 : 0;
				}]]></add>
		</operation>

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

  • +1 1
Надіслати
Поділитися на інших сайтах

В 09.02.2023 в 13:38, chukcha сказав:

Що так не при кінці $\n^(.*)

$ це ж до кінця рядка все вибрати

Надіслати
Поділитися на інших сайтах

В 09.02.2023 в 13:41, chukcha сказав:

Краще пошукати більш простий код для пошуку

схиляюся також до цього варіанту

Надіслати
Поділитися на інших сайтах

09.02.2023 в 13:43, Flint2000 сказал:

схиляюся також до цього варіанту

Тільки не offset ;)

Надіслати
Поділитися на інших сайтах

09.02.2023 в 13:45, chukcha сказал:

Ваши докази?

 

Чого? Які "докази". Що за хайп знову.
Ну хтось модифікатором щось зміне в "порядку" чи руцями "програміст" додасть - такє дуже часто буває
Не тільки ви "один" модифікуєте

Надіслати
Поділитися на інших сайтах

09.02.2023 в 13:48, markimax сказал:

Чого? Які "докази". Що за хайп знову.
Ну хтось модифікатором щось зміне в "порядку" чи руцями "програміст" додасть - такє дуже часто буває
Не тільки ви "один" модифікуєте

тай що?
проблему можна знайти завжди, в тому разі при after|before.
Згоден коли offset 134
а ще з replace

а вот так сказати - тільки НІ - це я чую від вас неодноразово.

 

Надіслати
Поділитися на інших сайтах

09.02.2023 в 13:53, chukcha сказал:

а вот так сказати - тільки НІ - це я чую від вас неодноразово.
 

А я неодноразово потім розгрібаю ці offset зі словами замовника "а чому в мне не працює те"
Особливо часто в шаблонах полюбляють використовувати offset тому що прив'язатися не можуть (бо схожий код верстки). Потім хтось "вище" додає такий же схожий код... і "починається"... "а в мене не працює...". Дивишся а там offset. Вже багато разів підіймалася ця тема, вже якось гуртом прийшли до того що offset краще не використовувати. А ви знову хайп підіймаєте. Навіщо, не зрозуміло (ні, мені то зрозуміло... причина в іншому ))) ).

Надіслати
Поділитися на інших сайтах

09.02.2023 в 14:22, chukcha сказал:

маячня чукчі
 

Поясню на пальцях для тих хто любить флудити

Звідки взятий код?
Мабуть цей, зі стандартного (наголос "стандартного") коду контролера
 

				$data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $rating,
					'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
				);

 

Потім якийсь "програміст" робить для свого "функціоналу" Ctrl->C - Ctrl->V і вставляє вище
Гіпотетично... viewed чи specail чи ще щось

$data['products_viewed'][] = array(

...

 'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])

);

 

І що..  offset "ваш" працювати не буде.


Таких не працюючих "оффсетів" я багато бачив.

 

offset - це шлях до потенційного багу 

Надіслати
Поділитися на інших сайтах


Що марк показав.
На неіснуючим  бажанням автора
339941308_.png.68140f4f41247e375896ffe8bf6ba213.png

 

Але якесь марево про offset та демагогія.

 

Надіслати
Поділитися на інших сайтах

09.02.2023 в 11:43, Flint2000 сказал:

Для свої потреб роблю модифікатор і постало питання знаходження декількох рядків, а саме потрібно знайти і після нього додати певний код

'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id'])
				);

 

А чого "після", а не "до"
Там прив`язатися то легше

У вас там який масив?
Візьмемо наприклад стандартний

        <search position="before"><![CDATA[$data['products'][] = array]]></search>
        <add position="before"><![CDATA[

if ($data['ns_on_off_category_page_fastorder'] == 1) { $data['ns_on_off_category_page_fastorder'] = ($result['price'] >= (int)$this->config->get('config_minprice')) ? 1 : 0; }

]]></add>


 

Надіслати
Поділитися на інших сайтах

Дякую всім, хто долучився до обговорення.

Проблему вирішив іншою реалізацією. Але залишилося питання, чому не спрацювала регулярка

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

Important Information

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