Поля пользователей в foreach.Выводит только первое
Приветствую!
Вывожу данные из своей таблицы. В ней, помимо кучи других полей, записан id_user (id пользователя).
Вывожу так:
В чанке tpl.user.list всё прекрасно выводится. Однако, по полученному id пользователя мне требуется получить данные из его доп. полей в профиле.
Для этого использую простенький сниппет:
и в tpl.user.list соответственно вызываю его так:
Пробовал получать значение сразу в первом сниппете, но результат такой-же.
Что я упускаю? Благодарю за помощь.
Вывожу данные из своей таблицы. В ней, помимо кучи других полей, записан 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
Пробовал получать значение сразу в первом сниппете, но результат такой-же.
Что я упускаю? Благодарю за помощь.
Комментарии: 4
Если вместо
<tr>
<td>[[+userId:getUserInfo]] | [[+userId]]</td>
.....
</tr>
поставить<tr>
<td>[[!getUserInfo?userId=`[[+userId]]`]] | [[+userId]]</td>
.....
</tr>
что-нибудь изменится?
Тоже пробовал. Ноль реакции. Для проверки даже делал
... return $name." - ".$userId;
Принимаемый $userId разный, как и хотелось бы, а вот значение доп. поля только первое опять же.Вася - 25
Вася - 30
Можно попробовать leftJoin в первом сниппете.
Во-первых, когда сниппет используется в качестве модификатора, значение передаётся в переменную $input
Во-вторых, функция getUser возвращает текущего пользователя. Надо использовать $modx->getObject('modUser', $id);
И код поэтому должен выглядеть как-то так:
Во-вторых, функция 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;
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.