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


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

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


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

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

Павел Акимов

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

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

Warning: preg_replace(): Compilation failed: missing ) at offset 310 in ****/docs/plugins/system/zlframework/zlframework/helpers/zlfw.php on line 779
public function replaceShortCodes($string, $args=array())
	{
		// expression to search for
		$regex		= '/{\S*}/';
		$matches	= array();

		// find all instances of plugin and put in $matches
		preg_match_all($regex, $string, $matches, PREG_SET_ORDER);

		foreach($matches as $match)
		{
			$string = preg_replace("|$match[0]|", $this->shortCode($match[0], $args), $string, 1);			
		}

		return $string;
	}

	/*
		Function: shortCode

		Variables:
			$shortcode - ex {PHP_MAX_UPLOAD} the length of the output string
			
		Return :
			string
	*/
	public function shortCode($shortcode, $args=array())
	{	
		// extract the arguments
		extract($args, EXTR_OVERWRITE);

		switch ($shortcode) {
			case '{PHP-MAX_UPLOAD}':
				return $this->app->zlfw->filesystem->getUploadValue();
				break;

			case '{ITEM-URL}':
				return isset($item) ? $this->app->route->item($item) : '';
				break;

			case '{ITEM-NAME}':
				return isset($item) ? $item->name : '';
				break;

			case '{ITEM-ALIAS}':
				return isset($item) ? $item->alias : '';
				break;
			
			default:
				return $shortcode;
				break;
		}
	}


  • 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

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

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


Пытается найти не пробельные символы в фигурных скобках.
Но фигурные скобки - это зарезервированные спец символы, поэтому их нужно экранировать.
Например, так.
 
$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

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

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

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


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

  • 0

#7 SmetDenis

SmetDenis

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

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

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

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

 

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


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



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





Click to return to top of page in style!