Opencart 2.0.1.1 bugfix: OCMOD Multiline fix
В 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();