Конфликт 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.
Пока что удалил компонент — импорт проходит нормально.
В чем проблема — понять не могу. Буду благодарен за помощь.
Может кто-нибудь сталкивался с подобной проблемой.
Выполняю импорт каталога в 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.
Пока что удалил компонент — импорт проходит нормально.
В чем проблема — понять не могу. Буду благодарен за помощь.
Комментарии: 5
Проблема в криворукости некоторых дополнений. Хоть автор и сам Shaun McCormick, но сырая функция в плагине без проверки — это жесть.
Сделай так
Ну и вообще там тяжелая выборка ресурсов через getCollection, с последующим превращением их в массив для передачи на индексацию. Очень накладно это выйдет на больших сайтах.
Сделай так
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, с последующим превращением их в массив для передачи на индексацию. Очень накладно это выйдет на больших сайтах.
Василий, спасибо большое за помощь.
Василий, а чем посоветуете воспользоваться для организации поиска на сайте вместо SimpleSearch?
:)))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.