Всем привет. Передо мной стояла задача обрабатывать экселевский файл и грузить товары в базу данных modx, где был установлен компонент mihishop2.
Я создал шаблон, в котором просто выводил форму для выбора файла. В шаблоне происходит проверка на авторизацию в админке менеджером или админом. Иначе форма не выводится.
Менеджер грузит файл, жмет кнопку "проверить", далее я через ajax дергаю написанный процессор, который обрабатывает файл, грузит его на сервер в определенную папку с определенным именем и выводит некое представление пользователю, чтобы тот понял, что всё считалось корректно и экселевский файл нужного формата.
После чего появляется кнопка "начать импорт", которая дергает уже другой процессор для импорта товаров из файла.
Делается это через modx->runProcessor('resource/create', $options);
Если подробней, то так:
//получаем массив артикулов
foreach ($prods as $prod) {
array_push($vendor_codes, $prod->get('article'));
}
// var_dump($vendor_codes);
$count = 0;
$duplicate = 0;
//проходимся по товарам из эксель файла, сравнивая артикулы с имеющимися, если совпадение есть, не добавляем
foreach ($array as $item) {
//если еще нет в базе, добавляем
if(!in_array($item['vendor_code'], $vendor_codes)) {
$options = array();
//создаем товар
$options = array(
'class_key' => 'msProduct',
'pagetitle' => $item['title'],
'parent' => $category,
'template' => 2,
'show_in_tree' => 0,
'alias' => $item['vendor_code'],
'price' => $item['price'],
'old_price' => $item['old_price'],
'favorite' => 0,
'popular' => 0,
'color' => array($item['color']),
'article' => $item['vendor_code'],
'weight' => $item['weight'],
'made_in' => $item['country'],
'serial_num' => $item['barcode'],
'package_width' => $item['width'],
'package_height' => $item['height'],
'package_length' => $item['length'],
'guarantee' => $item['guarantee'],
'shelf_life' => $item['shelf_life'],
'life_time' => $item['life_time'],
'content' => $item['description']
);
//добавляем доп опции в зависимости от категории
if ($category == 10) {
// если термосы
$options['options-volume'] = $item['volume'];
}
// var_dump($options);
// exit();
$response = $this->modx->runProcessor('resource/create', $options);
$count++;
}else{
$duplicate++;
}
}
И этот код работает, процессор выдает количество загруженных файлов и количество уже существовавших в базе. Сверяет по артикулу.
Загвоздка лишь одна, если я залогинен как администратор, то всё работает. Файлы обрабатываются, данные пишутся в БД, товары появляются. Если я залогинен как менеджер, то визуально вебморда никак не отличается, процессор обработки экселевского файла отрабатывает, файл грузится куда надо и следующий процессор импорта с ним работает. Ответ от процессора так же приходит, он считает, сколько товаров было загружено. Есть только одна проблема, товары не добавляются по факту. Их нет в БД. Ловлю ошибку "permission_denied_processor".
Причем, не помогает даже добавление прав доступа администратора пользователю "менеджер".
Каких прав не хватает, ума не приложу.