Aleksandr Huz

Aleksandr Huz

С нами с 02 августа 2014; Место в рейтинге пользователей: #20
Володя
18 января 2018, 18:13
2
+1
примерно так
$q = $modx->newQuery('msOrderProduct');
$q->innerJoin('msOrder', 'msOrder', "msOrder.id = msOrderProduct.order_id");
$q->where(array(
'msOrderProduct.product_id' => $product->id,
'msOrder.user_id'           => $modx->user->id,
'msOrder.status'            => 2,
));
$view = (bool)$modx->getCount('msOrderProduct', $q);
Василий Наумкин
10 октября 2017, 12:39
6
+5
Если покопаться в MODX API то можно научиться выводить любой ресурс в плагине на нужном событии:
$modx->resource = $modx->getObject('modResource', $modx->getOption('site_start'));
$modx->resource->set('content', $pdoTools->runSnippet('@FILE snippets/get_panel.php'));
$modx->request->prepareResponse();
Здесь, как видно, еще и замена контента на свой идёт, на лету.

Можно так на лету и виртуальные ресурсы делать, со своими pagetitle и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =)
Василий Наумкин
10 декабря 2015, 07:26
8
+5
У меня на сайте, например, бывают платные разделы. Чтобы добавить пользователю доступ в них при оплате, работает вот такой плагин:
case 'OnWebPageInit':
if ($uid = $modx->user->id) {
	if ($extended = $modx->user->Profile->get('extended')) {
		if (!empty($extended['updateGroups'])) {
			unset($_SESSION['modx.user.'.$modx->user->id.'.userGroupNames']);
			$extended['updateGroups'] = 0;
			$modx->user->Profile->set('extended', $extended);
			$modx->user->Profile->save();
			
			$ctxQuery = $modx->newQuery('modContext');
			$ctxQuery->select($modx->getSelectColumns('modContext', '', '', array('key')));
			if ($ctxQuery->prepare() && $ctxQuery->stmt->execute()) {
				if ($contexts = $ctxQuery->stmt->fetchAll(PDO::FETCH_COLUMN)) {
					$serialized = serialize($contexts);
					$modx->exec("UPDATE {$modx->getTableName('modUser')} SET {$modx->escape('session_stale')} = {$modx->quote($serialized)}");
				}
			}
		}
	}
}
break;
Написан давно, работает без нареканий.

Для разлогинивания заблокированных пользователей использую вот такой код в том же плагине:
if ($modx->user->id) {
	if (!$modx->user->active || $modx->user->Profile->blocked) {
		$modx->runProcessor('security/logout');
		$modx->sendRedirect('/');
	}
}

Если это всё не то — прошу прощения.
Мордынский Николай
20 марта 2015, 17:32
5
+1
Вот нашел решение

// Try to find by email
$modx->event->_output = $modx->getObjectGraph('modUser', '{"Profile":{},"UserSettings":{}}', array ('Profile.email' => $scriptProperties['username']));
Сюда можно дописывать еще критерии поиска, можно хоть по дополнительным полям логиниться

Плагин вешается на событие onUserNotFound