Поля пользователей в foreach.Выводит только первое

Приветствую!

Вывожу данные из своей таблицы. В ней, помимо кучи других полей, записан id_user (id пользователя).

Вывожу так:

$modx->addPackage('MyPac', $modx->getOption('core_path').'components/MyPac/model/', 'modx_');

$q = $modx->newQuery('MyPacTable');
$q->sortby('add','DESC');
$lists = $modx->getCollection('MyPacTable', $q);

foreach ($lists as $k => $res) { 

	....
	$id_user = $res->get('id_user');
	...

	$output .= $modx->getChunk('tpl.user.list',array(
        	'userId' => $id_user,
		....
	));

}

return $output;

В чанке tpl.user.list всё прекрасно выводится. Однако, по полученному id пользователя мне требуется получить данные из его доп. полей в профиле.

Для этого использую простенький сниппет:

// $userId - это id, которое пришло из первого сниппета
$user = $modx->getUser($userId);
if (!$user) return '';
$profile = $user->getOne('Profile', $userId);
if (!$profile) return '';
$extended = $profile->get('extended');
$name = $extended['user_dop'];

return $name;

и в tpl.user.list соответственно вызываю его так:

<tr>
	<td>[[+userId:getUserInfo]] | [[+userId]]</td>
	.....
</tr>
В итоге на выходе вводит во всех строках только значение доп. поля первого обрабатываемого пользователя, а вот id, как надо.

Вася | 25
Вася | 30
Вася | 40

Пробовал получать значение сразу в первом сниппете, но результат такой-же.
Что я упускаю? Благодарю за помощь.
Александр
08 июня 2016, 08:07
modx.pro
949
0

Комментарии: 4

Виталий Серый
08 июня 2016, 11:32
0
Если вместо
<tr>
	<td>[[+userId:getUserInfo]] | [[+userId]]</td>
	.....
</tr>
поставить
<tr>
	<td>[[!getUserInfo?userId=`[[+userId]]`]] | [[+userId]]</td>
	.....
</tr>
что-нибудь изменится?
    Александр
    08 июня 2016, 11:40
    0
    Тоже пробовал. Ноль реакции. Для проверки даже делал
    ... return $name." - ".$userId;
    Принимаемый $userId разный, как и хотелось бы, а вот значение доп. поля только первое опять же.
    Вася - 25
    Вася - 30
      Виталий Серый
      08 июня 2016, 13:31
      0
      Можно попробовать leftJoin в первом сниппете.
    Илья Уткин
    08 июня 2016, 15:43
    +1
    Во-первых, когда сниппет используется в качестве модификатора, значение передаётся в переменную $input
    Во-вторых, функция getUser возвращает текущего пользователя. Надо использовать $modx->getObject('modUser', $id);

    И код поэтому должен выглядеть как-то так:
    // $input - это id, которое пришло из первого сниппета
    $user = $modx->getObject('modUser', $input);
    if (!$user) return '';
    $profile = $user->getOne('Profile', $userId);
    if (!$profile) return '';
    $extended = $profile->get('extended');
    $name = $extended['user_dop'];
    
    return $name;
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4