Сергей Шлоков

Сергей Шлоков

Был в сети 06 ноября 2025, 19:54
Заказы не принимаю
Тебе уже понятно, что условие
'Profile.photo:!=' => "nophoto.jpg"
не будет работать?
Правильно будет
'Profile.photo:NOT LIKE' => "%nophoto.jpg",
Дальше. Тебе нужно всего 2 поля — username и fax. Так и пишем.
$q = $modx->newQuery('modUser');
$q->setClassAlias('User');
$q->innerJoin('modUserProfile', 'Profile');
$q->select('User.id,User.username,Profile.fax');
$q->where(array(
    'Profile.photo:NOT LIKE' => "%normal",
));
$users = $modx->getCollection('modUser', $q);
foreach ($users as $user) {
	echo $user->username,'[br]';
	// Сохраним fax в переменной $fax, а не в $rating
	$fax=$user->fax;
}
П.С. Тег [br] измени на правильный.
Вы помогаете мне стать лучше
Прям рекламный слоган. Ну раз настрой позитивный, то продолжим.
Давай посмотрим, что там в поле photo есть
$q = $modx->newQuery('modUser');
$q->select('Profile.photo');
$q->innerJoin('modUserProfile', 'Profile');
$result = $modx->getCollection('modUser', $q);
foreach ($result as $user) {
	echo $user->photo.'
';
}
Есть что-то кроме «nophoto.jpg»
Мда. Как же это можно написать такой код, когда и тут, а на rtfm.modx.com и на bezumkin.ru куча примеров и образцов.
Внутри foreach переменная $user перебивается — была объектом modUser, а стала modProfile. А обращение идет как к modUser.
Зачем нужен селект, если username можно получить просто
$myusername = $user->username;
А это чтоб врагов запутать?
$rating = $user->get('fax');
Ужас, ужас.
Да тоже самое, только не со стороны ресурса, а со стороны TV.
Можно, например, и так.
$val = $captionTv->getValue($modx->resource->id);
Но тогда значение получится необработанное. Т.е. вместо картинки — путь, вместо даты — timestamp и т.п.
А вот тут можно поспорить. Глядя на тот же код, можно заметить недокументированную возможность указывать свой путь к файлам.
В системных настройках нужно указать свой путь в параметре mycalendar.assets_url и, соответственно, css и js файлы будут доступны по новому пути — «новое значение/css/» и «новое значение/js/». И пожалуйста, подключай свои файлы.
Это к разговору о разработчиках. Для простого админа это не очень прозрачно.
Все кому не лень. :)
Если нужно разрешить редактировать только авторизованным, то в сниппет перед перед сохранением параметров в сессию можно дописать условие
if (!$modx->user->isAuthenticated($modx->context->get('key'))
	$scriptProperties['readOnly'] = true;
Тогда неавторизованный пользователь может только любоваться. :)
Поправил, но не везде. :)
В 7 строчке сниппет проверяет авторизован ли пользователь в админке
Не в админке, а в текущем контексте.
Если уж ты предложил это как готовое решение, то нужно докрутить до универсальности. Например, так, с учетом предложения Виталия вызывать сниппет перед сниппетом TicketForm:
<?php
$ctx = $modx->context->get('key');
if (!$modx->user->isAuthenticated($ctx)) {
	$username = 'ticketUser';
	$password = '********';
	$data = array(
		'username' => $username
	,'password' => $password
	,'rememberme' => 0
	,'login_context' => $ctx
	);
	$response = $modx->runProcessor('/security/login', $data);
	if ($response->isError()) {
		$modx->log(modX::LOG_LEVEL_ERROR, 'login error. Username: '.$username.', Message: 	'.$response->getMessage());
	}
}
переходя на страницу с созданием тикета мы авторизуем пользователя в админке
Почему в админке, если указан контекст web?
$data = array(
    'username' => $username
    ,'password' => $password
    ,'rememberme' => 0
    ,'login_context' => 'web'
);
Отсюда вытекает проблема. Данное решение не работает в других контекстах. Например, [ru] и [en].