[[!UpdateProfile? &user=`5` ]] <form action="[[~[[*id]]]]" method="post"> <label>Имя пользователя</label> <input type="text" name="fullname" id="fullname" value="[[+fullname]]" /> <input type="submit" name="" value="Обновить данные"/> </form>
[[!FormIt?
&hooks=`updateProfile_hook`
]]
<form action="[[~[[*id]]]]" method="post">
<input type="hidden" name="userID" value="5"> <!-- ID пользователя для редактирования мы задаем здесь, а не в сниппете -->
<label>Имя пользователя</label>
<input type="text" name="fullname" id="fullname" value="[[+fullname]]" />
<input type="submit" name="" value="Обновить данные"/>
</form><?php
$userID = $hook->getValue('userID');
$user = $modx->getObject('modUser', $userID);
$userProfile = $user->getOne('Profile');
$profile->set('fullname', $hook->getValue('fullname'));
$profile->save();
Применительно к вашему примеру это может выглядеть так:
[[!FormIt? &hooks=`updateProfile_hook` ]] <form action="[[~[[*id]]]]" method="post"> <input type="hidden" name="userID" value="5"> <!-- ID пользователя для редактирования мы задаем здесь, а не в сниппете --> <label>Имя пользователя</label> <input type="text" name="fullname" id="fullname" value="[[+fullname]]"> <input type="submit" name="" value="Обновить данные"> </form>
Код сниппета updateProfile_hook:
<!--?php $userID = $hook--->getValue('userID'); $user = $modx->getObject('modUser', $userID); $userProfile = $user->getOne('Profile'); $profile->set('fullname', $hook->getValue('fullname')); $profile->save();
но все равно переписывает данные админа
что бы подставить в поля нужные данные, я перед формой вызываю [[!Profile? &user=`5`]]
$hook--->getValue('userID');$hook->getValue('userID');У меня опечатка в хуке, вместо$hook--->getValue('userID');
должно быть$hook->getValue('userID');
поэтому и переписывает, наверное
[[!UpdateProfile? &hooks=`updateProfile_hook` ]]
[[!Profile? &user=`[[!get_user]]`]]
[[!UpdateProfile? &hooks=`updateProfile_hook` ]]
$userID = $hook->getValue('userID');
$user = $modx->getObject('modUser', $userID);
$userProfile = $user->getOne('Profile');
$profile->set('username', $hook->getValue('username'));
$profile->set('fullname', $hook->getValue('fullname'));
$profile->set('email', $hook->getValue('email'));
$profile->save();
<form action="[[~[[*id]]]]" method="post">
<input type="hidden" name="userID" value="[[!get_user]]">
<label>Имя пользователя</label>
<input type="text" name="username" id="username" class="form-control" value="[[+username]]" />
<label>Email</label>
<input type="text" name="email" id="email" value="[[+email]]">
<input type="submit" name="" value="Обновить данные">
</form>
$modx->log(1, 'userID = ' . $userID);
$userID = $hook->getValue('userID');
Покажите тогда и [[!get_user]] для порядку.Посмотрел, id приходит админа, он прописывается формой как дополнительное поле userID в профиле пользователя. Но в исходном коде перед отправкой формы, в скрытом инпуте стоит id юзера как раз
Попробуйте вставить в хук строчку
$modx->log(1, 'userID = ' . $userID);
после
$userID = $hook->getValue('userID');
Отправьте форму и посмотрите в журнале ошибок MODX, правильный ли ID вообще приходит в хук
но видно сниппет UpdateProfile берет id админа.
[[!UpdateProfile?
&hooks=`updateProfile_hook`
]][[!FormIt?
&hooks=`updateProfile_hook`
]]Не заметил сразу, а вообще-то должно быть не
[[!UpdateProfile? &hooks=`updateProfile_hook` ]]
а
[[!FormIt? &hooks=`updateProfile_hook` ]]
Мы обновляем профиль в самом хуке, UpdateProfile для этого вообще не нужен.