Добавление и удаление товаров из групп ресурсов.
Доброго времени. После приобретения компонента msDiscount, обнаружил, что нет возможности добавлять целые категории в акции. msDiscount позволяет добавлять в акции группы ресурсов. В итоге набросал плагин для добавления товаров в группы ресурсов при сохранении/публикации.
Это работает. Но нужно еще сделать обратное — удалять из группы ресурсов товар при отключении или удалении. Не могу победить, пока это не работает:
<?php
if ($modx->event->name != "OnDocFormSave" || $resource->get('template') != 7) {return;}
$category = $modx->getObject('modResource',$resource->get('parent'));
$catGroup = $modx->getObject('modResource',$category->get('parent'));
// у группы ресурсов будет такое же имя как и у родителя товара (pagetitle)
$name = $category->get('pagetitle').'-'.$catGroup->get('pagetitle');
// проверяем, сущетвует ли группа ресурсов с таким именем, если нет, то создаем ее
$group = $modx->getObject('modResourceGroup', array('name' => $name));
if (empty($group)) {
$group = $modx->newObject('modResourceGroup', array('name' => $name));
$group->save();
}
// записываем в группу элемент-ресурс.
if (!$resource->isMember($group->get('id'))) {
$resource->joinGroup($group->get('id'));
}
return;Имя группы ресурсов выглядит так: [имя родителя] — [имя родителя-родителя].Это работает. Но нужно еще сделать обратное — удалять из группы ресурсов товар при отключении или удалении. Не могу победить, пока это не работает:
<?php
if ($resource->get('template') != 7) return;
$modx->log(1, print_r( 'OnDocUnPublished', 1 ));
$msDiscount = $modx->getService('msDiscount');
$groups = $msDiscount->getProductGroups($resource->get('id'));
if($groups) {
foreach (array_keys($groups) as $group) {
if ($resource->isMember($group) ) {
$resource->leaveGroup($group);
}
}
} $resource->save();
return;Подскажите где ошибка? И правильно ли выбрано событие: OnDocUnPublished? Комментарии: 7
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
и сохранять надо конечно ресурс.
Но категорию тоже нужно добавить в группу ресурсов.
Однако, после «удаления» товара minishop, ничего не происходит.
В логах записывается такая строчка:
Можно ли ее считать ошибкой?
Те ли события я использую для плагина? Какие имена событий привязаны к таким операциям с ресурсами minishop2 как: отключить/включить, удалить/восстановить? Да, и как удалить товар окончательно из БД через админку? Он по прежнему висит в таблице товаров.
Код плагина:
Метод isMember() принимает только имя группы в кач-ве параметра: rtfm.modx.com/revolution/2.x/developing-in-modx/other-development-resources/class-reference/
Так правильно: