Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 2.0.1.1 bugfix: OCMOD Multiline fix

Просмотров: 3720 RSS Обсудить
Howto » Web development » E-commerce » OpenCart

В OCMOD нами добавлена поддержка атрибута "quote" (bool) в режиме regex. Это позволяет делать замену не строки, а набора строк. С этим переключателем используется функция preg_quote:

preg_quote() takes str and puts a backslash in front of every character that is part of the regular expression syntax. This is useful if you have a run-time string that you need to match in some text and the string may contain special regex characters.
The special regular expression characters are:
. \ + * ? [ ^ ] $ ( ) { } = ! < > | : -

После этого preg позволяет многострочную замену. Обычный режим работы продолжает работать по-старому: просто добавляется опция, с которой становится возможно использовать многострочные замены в ocmod XML.

Рекомендуется всем: стандартный функционал не затрагивается, появляется новый.

Также описано на OpencartJazz: OCJ :: OCMOD Multiline fix. Там прикреплён изменённый файл, но пока его можно скачать только после регистрации и "покупки" за 0.00. Будет время - починю это неудобство.

diff --git a/admin/controller/extension/modification.php b/admin/controller/extension/modification.php
index 086a65c..7159ffb 100644
--- a/admin/controller/extension/modification.php
+++ b/admin/controller/extension/modification.php
@@ -307,12 +307,18 @@ class ControllerExtensionModification extends Controller {
 } else {									
 	$search = $operation->getElementsByTagName('search')->item(0)->textContent;
 	$limit = $operation->getElementsByTagName('search')->item(0)->getAttribute('limit');
+	$quote = $operation->getElementsByTagName('search')->item(0)->getAttribute('quote');
 	$replace = $operation->getElementsByTagName('add')->item(0)->textContent;
 										
 	// Limit
 	if (!$limit) {
 		$limit = -1;
 	}
+
+	// Quote
+	if ($quote=='true') {
+		$search = preg_quote($search);
+	}
 
 	// Log
 	$match = array();
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)