Konstantin

Konstantin

С нами с 24 декабря 2022; Место в рейтинге пользователей: #990
Максим Кузнецов
28 июля 2015, 00:26
3
+3
1) По пунктам:
— При регистрации через Login нужно заносить пользователя в определенную группу (Users).
— Выставить группе анонимных пользователей права Load only на все контексты, где нужно запрашивать авторизацию
— Добавить в системной настройке unauthorized_page (403 ошибка) айди страницы с формой авторизации

После чего всех неавторизованных пользователей, при запросе на закрытую страницу, будет перебрасывать на страницу авторизации.

//Примечание: для альтернативы, если не нужна переадресация, можно создать простой сниппет (допустим, getAccess) и вызывать его на каждой странице.

Сниппет getAccess:
<?php
	$user = (!empty($userId)) ? $modx->getObject('modUser', $userId) : $modx->user;

	if (is_object($user) && $modx->user->isAuthenticated('web')) {
		return $content;
	}
	else {
		return $modx->getChunk('название_чанка');
	}
— соответственно, нужно создать чанк с формой авторизации и обозначить для сниппета параметр &content, в котором будет храниться html-код.

Пример:
<html>
	<head>
		[[$meta]]
	</head>
	<body>
		[[!getAccess? &content=`
			//ваш хтмл-код
		`]]
	</body>
</html>
(как альтернатива, можно переписать строчку сниппета «return $content» на «return $modx->getChunk($content);» — в таком случае, при вызове в поле &content нужно будет указывать название чанка, который отобразится авторизованному пользователю).

Из минусов такого метода — поисковые системы проиндексируют кучу дублей одинаковых страниц с формой авторизации.

2. modstore.pro/packages/ecommerce/payandsee — может быть, это вам поможет? В противном случае — придется настраивать свои сниппеты, завязанные на extend-полях пользователя.
Василий Наумкин
18 сентября 2013, 17:23
9
0
<?php
$tvid = 1; // id нужного ТВ параметра
$res = array(); // Сюда забиваем результаты

$q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid));
$q->select('contentid,value');
if ($q->prepare() && $q->stmt->execute()) {
	while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
		$res[$row['contentid']] = $row['value'];
	}
}
print_r($res);

Получишь массив с id ресурсов и значенями ТВ c id = 1.