Перейти к содержимому


Фотография
- - - - -

RelatedItemsPro и цены (version: v2.2.7 rev3148) после обнавления


Сообщений в теме: 6

#1 Павел Акимов

Павел Акимов

Отправлено 12 April 2016 - 16:03

Перестал работать RelatedItemsPro после обновления. Ошибку вызывает элемент цены. 

  1. Warning: preg_replace(): Compilation failed: missing ) at offset 310 in ****/docs/plugins/system/zlframework/zlframework/helpers/zlfw.php on line 779
  1. public function replaceShortCodes($string, $args=array())
  2. {
  3. // expression to search for
  4. $regex = '/{\S*}/';
  5. $matches = array();
  6.  
  7. // find all instances of plugin and put in $matches
  8. preg_match_all($regex, $string, $matches, PREG_SET_ORDER);
  9.  
  10. foreach($matches as $match)
  11. {
  12. $string = preg_replace("|$match[0]|", $this->shortCode($match[0], $args), $string, 1);
  13. }
  14.  
  15. return $string;
  16. }
  17.  
  18. /*
  19. Function: shortCode
  20.  
  21. Variables:
  22. $shortcode - ex {PHP_MAX_UPLOAD} the length of the output string
  23. Return :
  24. string
  25. */
  26. public function shortCode($shortcode, $args=array())
  27. {
  28. // extract the arguments
  29. extract($args, EXTR_OVERWRITE);
  30.  
  31. switch ($shortcode) {
  32. case '{PHP-MAX_UPLOAD}':
  33. return $this->app->zlfw->filesystem->getUploadValue();
  34. break;
  35.  
  36. case '{ITEM-URL}':
  37. return isset($item) ? $this->app->route->item($item) : '';
  38. break;
  39.  
  40. case '{ITEM-NAME}':
  41. return isset($item) ? $item->name : '';
  42. break;
  43.  
  44. case '{ITEM-ALIAS}':
  45. return isset($item) ? $item->alias : '';
  46. break;
  47. default:
  48. return $shortcode;
  49. break;
  50. }
  51. }
  52.  

  • 0

#2 Павел Акимов

Павел Акимов

Отправлено 12 April 2016 - 16:23

$regex = '/{\S*}/';  - регулярка что то убивает...

 

пока сделал так $regex = '/{{\S*}}/';


Сообщение отредактировал Павел Акимов: 12 April 2016 - 16:41

  • 0

#3 SmetDenis

SmetDenis

Отправлено 13 April 2016 - 06:52

Сложно сказать что пошло не так.
Пока что могу сказать что 
 
 

Павел Акимов сказал(а) 12 Апр 2016 - 15:23:

$regex = '/{\S*}/';


Пытается найти не пробельные символы в фигурных скобках.
Но фигурные скобки - это зарезервированные спец символы, поэтому их нужно экранировать.
Например, так.
 
  1. $regex = '/\{\S*\}/';
 
Возможно в тексте материала, где появляется ошибка, не правильно сохранен макрос.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 Павел Акимов

Павел Акимов

Отправлено 13 April 2016 - 08:06

Если их экранировать, то опять все рушиться. Вот я чего не понимаю... как это работало до обновления. 

 

 в $string  пишется вот это. мне кажется тут пару кавычек не хватает :)

 

 

{$("#jbprice-114479").JBZooPrice({"hash":"f4a46bdebcd79d246f8400457090c13f","itemId":"68","identifier":"3af0306e-2589-4a6b-982c-3098256f2e8c","variantUrl":"http:\/\/ohjaja.ru\/?option=com_zoo&controller=default&task=callelement&element=3af0306e-2589-4a6b-982c-3098256f2e8c&method=ajaxChangeVariant&item_id=68"}


Сообщение отредактировал Павел Акимов: 13 April 2016 - 08:20

  • 0

#5 SmetDenis

SmetDenis

Отправлено 15 April 2016 - 04:52

Тут с кавычками  все нормально, они создаются через php json_encode()

Но я понял в чем проблема. Виджет в контенте распознан как макрос.

Возможно раньше у нас в инициализации был пробел (как раз \S из регулярки) за такими вещами не слежу =)

 

Для таких случаев стоит сделать исключение.

 

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

 

 

JS Виджета вставляются с помощью хелпера jbassets->widget()

Последняя правка там была 12 февраля,  

aj55_200x0.png

 

Похоже что дело в этом дополнительном setTimeout = 1ms, который выделяет инициализацию в отдельный асинхронный "поток". 

Это спасает от некоторых конфликтов в клубных шаблонах.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 Павел Акимов

Павел Акимов

Отправлено 16 April 2016 - 11:02

SmetDenis сказал(а) 15 Апр 2016 - 03:52:

Для таких случаев стоит сделать исключение.

Я так понимаю в плагине... 

пока отключил регулярку. Как сделать исключение правильно? 


Сообщение отредактировал Павел Акимов: 16 April 2016 - 11:03

  • 0

#7 SmetDenis

SmetDenis

Отправлено 18 April 2016 - 08:12

Павел Акимов сказал(а) 16 Апр 2016 - 10:02:

Как сделать исключение правильно? 
 

Переписать регулярное выражение либо добавить проверку перед тем как сработает эта регулярка.

Например, проверить что внутри найденных скобок нет слова JBZoo|jQuery и.т.д.

 

Либо пойти другим путем, т.е. искать только те слова, которые ожидается там найти. У нас так сделаны почтовые макросы - железобетонно перечислены все ключевые слова, которые хотим найти, а не все скобки подряд.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.





Click to return to top of page in style!