Автоматическое создание tickets
Всем привет есть вопрос как можно создать автоматически tickets при регистрации пользователя через login
Поблагодарить автора
Отправить деньги
Комментарии: 13
На вскидку:
есть событие OnUserSave, т.е. в плагине можно на это событие создавать тикет.
есть событие OnUserSave, т.е. в плагине можно на это событие создавать тикет.
if ($modx->event->name == 'OnUserSave') {
if ($user && $mode == 'new') {
//тут создаем тикет
}
}
с этим разобрался вот как присвоить этому создаваемому tickets этого же автора
Примерно так:
<?php
if ($modx->event->name == 'OnUserActivate') {
if ($user) {
if ($profile = $user->getOne('Profile')) {
$user_id = $user->get('id');
$fullname = $profile->get('fullname');
$parent = 'айди_раздела_с_тикетами';
$template = 'шаблон';
if (isset($parent)) {
/* Формируем uri по айди автора */
$parent_alias = $modx->getObject('modDocument', $parent)->get('alias');
$parent_alias .= '/' . $user_id;
$ticket = $modx->newObject('modDocument');
$ticket->set('parent', $parent);
$ticket->set('template', $template);
$ticket->set('class_key', 'Ticket');
$ticket->set('show_in_tree', 0);
$ticket->set('published', 1);
$ticket->set('author', $user_id);
$ticket->set('createdby', $user_id);
$ticket->set('pagetitle', $fullname);
$ticket->set('uri_override', 1);
$ticket->set('uri', $parent_alias);
$ticket->set('alias', $user_id);
$ticket->save();
}
}
}
}
Спасибо большое за ответ все четко работает. Скажите а можно еще сделать проверку на группу если пользователь в группе users то $parent равен 4 а если в member то 7
if ($user->isMember('Managers')) {
$parent = 1;
}
elseif ($user->isMember('Users')) {
$parent = 2;
}
Да, к слову по вышестоящему коду — на случай, если у вас на сайте подразумевается возможность повторной активации (активация-деактивация-активация), нужно сделать дополнительную проверку на существование ресурса.
Огромное спасибо очень помогли.
скажите пытаюсь еще записывать значения в tv поля делаю это так
$ticket->setTVValue('country_tv', $fullname);
но не чего не записывается может я что то не так делаю?
Для того, чтобы создать ресурс + тв необходимо или сделать это через процессор, или после создания способом выше, отдельно получить свежесозданный ресурс и записать в него tv.
Спасибо за ответ пытаюсь сделать вторым способам
тут я так понимаю получаю текущий ресурс а как мне получить созданный ресурс
$resource = $modx->resource;
$tv_ticket = $modx->getObject('modTemplateVarResource',array(
'tmplvarid' => $country_tv,
'contentid' => $id
));
$tv_ticket->set('country_tv', $fullname);
$tv_ticket->save();
тут я так понимаю получаю текущий ресурс а как мне получить созданный ресурс
После ticket->save():
Далее getObject по полученному id.
Ну или сделать отдельный запрос getObject с where по uri или любому другому уникальному идентификатору.
$ticket->get('id');
Далее getObject по полученному id.
Ну или сделать отдельный запрос getObject с where по uri или любому другому уникальному идентификатору.
Спасибо разобрался сделал так
Instantiated a derived class TicketsSection that is not a subclass of the requested class modDocument
$id_ticket = $ticket->get('id');
$res = $modx->getObject('modResource',$id_ticket);
$res->setTVValue('country_tv', $country);
$res->setTVValue('city_tv', $city);
$res->save();
только вот думаю в чем проблема выдает ошибку в журналеInstantiated a derived class TicketsSection that is not a subclass of the requested class modDocument
newObject('Ticket');
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.