Добавление и удаление товаров из групп ресурсов.
Доброго времени. После приобретения компонента 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
событие хз… хозяин барин. А вот проверить в каком виде отдаются группы в msDiscount нужно было
и сохранять надо конечно ресурс.
и сохранять надо конечно ресурс.
$groups = $msDiscount->getProductGroups($resource->get('id'));
foreach (array_keys($groups) as $group ) {
if ($resource->isMember($group) ) {
$resource->leaveGroup($group);
}
}
$resource->save();
А разве Василий не добавил там добавление товаров целыми категориями? Вот тут — modx.pro/components/5784-msdiscount-1-1-ms2-1-11-one-time-discount-coupons/ у него написано «скидкам можно назначать категории товаров, а не только сами товары».
Верно.
Но категорию тоже нужно добавить в группу ресурсов.
Но категорию тоже нужно добавить в группу ресурсов.
То есть создаем группу ресурсов, отправляем туда ресурс-категорию, и при добавлении в акцию группы ресурсов, под нее попадают все товары категории? Если это так, то круто.
Да, так и должно быть — проверяйте.
Случай вернул меня обратно к этому плагину. Захотелось довести его до ума. Повесил его на событие «OnDocFormDelete». По идее товар должен удаляться из группы ресурсов, в которую он попал при создании.
Однако, после «удаления» товара minishop, ничего не происходит.
В логах записывается такая строчка:
Те ли события я использую для плагина? Какие имена событий привязаны к таким операциям с ресурсами minishop2 как: отключить/включить, удалить/восстановить? Да, и как удалить товар окончательно из БД через админку? Он по прежнему висит в таблице товаров.
Код плагина:
Однако, после «удаления» товара minishop, ничего не происходит.
В логах записывается такая строчка:
(ERROR @ /assets/components/minishop2/connector.php) OnDocFormDelete
Можно ли ее считать ошибкой?Те ли события я использую для плагина? Какие имена событий привязаны к таким операциям с ресурсами minishop2 как: отключить/включить, удалить/восстановить? Да, и как удалить товар окончательно из БД через админку? Он по прежнему висит в таблице товаров.
Код плагина:
<?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;
Вопрос решен. Неправильно соблюден синтаксис в условии:
Метод isMember() принимает только имя группы в кач-ве параметра: rtfm.modx.com/revolution/2.x/developing-in-modx/other-development-resources/class-reference/
Так правильно:
if ($resource->isMember($group) )
Метод isMember() принимает только имя группы в кач-ве параметра: rtfm.modx.com/revolution/2.x/developing-in-modx/other-development-resources/class-reference/
Так правильно:
$selGroup = $modx->getObject('modResourceGroup',array('id'=>$group));
if ($resource->isMember($selGroup->get('name') ) ) {
...
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.