Конфликт minishop2 и SimpleSearch при импорте

Добрый день.
Может кто-нибудь сталкивался с подобной проблемой.

Выполняю импорт каталога в mininshop2 из dbf файла. Сам скрипт написан на основе скрипта csv.php из стандартной поставки minishop2 (т.е. создание/обновление ресурсов происходит через $modx->runProcessor)

Импорт первой позиции происходит нормально.

После создания/обновления второй позиции из каталога PHP отваливается с ошибкой:

FastCGI sent in stderr: «PHP message: PHP Fatal error: Cannot redeclare SimpleSearchGetChildren() (previously declared in /path/to/modx/root/core/cache/includes/elements/modplugin/4.include.cache.php:50) in /path/to/modx/root/core/cache/includes/elements/modplugin/4.include.cache.php on line 63»

Собственно это закешированный плагин индексации ресурсов компонента SimpleSearch.
Пока что удалил компонент — импорт проходит нормально.

В чем проблема — понять не могу. Буду благодарен за помощь.
Артем Сасин
01 декабря 2014, 09:15
modx.pro
1 289
0

Комментарии: 5

Василий Наумкин
01 декабря 2014, 13:05
0
Проблема в криворукости некоторых дополнений. Хоть автор и сам Shaun McCormick, но сырая функция в плагине без проверки — это жесть.

Сделай так
if (!function_exists('SimpleSearchGetChildren')) {
	function SimpleSearchGetChildren(&$modx,&$children,$parent) {
		$success = false;
		$kids = $modx->getCollection('modResource',array(
			'parent' => $parent,
		));
		if (!empty($kids)) {
			/** @var modResource $kid */
			foreach ($kids as $kid) {
				$children[] = $kid->toArray();
				SimpleSearchGetChildren($modx,$children,$kid->get('id'));
			}
		}
		return $success;
	}
}
Таким образом, функция будет объявляться только один раз.

Ну и вообще там тяжелая выборка ресурсов через getCollection, с последующим превращением их в массив для передачи на индексацию. Очень накладно это выйдет на больших сайтах.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
5