Пётр Молчанов

Пётр Молчанов

Был в сети 29 октября 2020, 11:31
Заказы не принимаю
чанк создан для разделения оформления и непосредственно самого php-кода, можно и без чанка просто в эту переменную написать всё оформление.
надеюсь, вместо «ваш_чанк» вы пишите название вашего чанка?
и вообще, было бы не плохо показывать свой нерабочий код
я ж вам в предыдущем сообщение привел пример массива.
суть в том, что в плагине нужно получить пароль, чтобы отправить его в письме, но это невозможно, поэтому необходимо генерировать его снова и записывать в аккаунт, тогда он сохраняется в нашей переменной и мы можем передать его в чанк
В этом случае придется генерить пароль за людей. как-то вот так:
// генерим пароль
    $pass = $modx->user->generatePassword();
    $user->set('password',$pass);
    $user->set('active','1');
    $user->save();
$data_array = ['name' = $profile->get('fullname'), 'password' => $pass];
$message = $modx->getChunk('ваш_чанк', $data_array);
если нужно брать пароль, который вводит пользователь, то надо писать не в плагин, а в постхук Login
щас сделал так: в сниппете принимаю все параметры и передаю их в pdoPage. вот так:
$city = isset($_POST['city']) ? $_POST['city'] : '';
$service = isset($_POST['service']) ? $_POST['service'] : 'all';
$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : '1';
$options = [
    'element' => 'pdoUsers',
    'page' => $page,
    'groups' => '4',
    'tpl' => 'userCardPro',
    'select' => '{"modUserSetting":"key, value as photop_add_date"}',
    'innerJoin' => '{
		"modUserSetting":{"class":"modUserSetting","on":"modUser.id=modUserSetting.user"}
	}',
	'sortby' => 'photop_add_date',
    'limit' => '9',
    'sortdir' => 'asc'
];
$where=['"modUserSetting.key":"photop_add_date"'];
if($city != '')
    $where[] = '"modUserProfile.city:LIKE":"%'.$city.'%"';
if($service != 'all')
    $where[] = '"modUserProfile.extended:LIKE":"%'.$service.'\":\"yes%"';

$options['where'] = '{'.implode(',',$where).'}';

$output = $modx->runSnippet('pdoPage',$options);
echo $output.$modx->getPlaceholder('page.nav');
но в этом случае не меняется заголовок страницы и урл
У меня пара вопросов:
1. просмотр страницы считается только зарегеным пользователем? Если да, то как сделать подсчет любого посетителя?
2. выставлять оценку могут тока зарегеные пользователи? Если да, то как сделать, чтобы могли все это делать?
Лучше такое сделать плагином на событие OnUserRegister. Что-то типа такого:
if ($modx->event->name == 'OnUserSave' && $mode=='new') {
    // генерим пароль
    $pass = $modx->user->generatePassword();
    $user->set('password',$pass);
    $user->set('active','1');
    $user->save();
    // получаем мыло
    $profile = $user->getOne('Profile');
    $email = $profile->get('email');
    // отправляем письмо
		$messageFields = [массив каких-то данных, например, логин и пароль];
                $message = $modx->getChunk('UserRegEmailTpl', $messageFields);
                $modx->getService('mail', 'mail.modPHPMailer');
                $modx->mail->set(modMail::MAIL_BODY,$message);
                $modx->mail->set(modMail::MAIL_FROM,$modx->getOption('emailsender'));
                $modx->mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name'));
                $modx->mail->set(modMail::MAIL_SENDER,$modx->getOption('site_name'));
                $modx->mail->set(modMail::MAIL_SUBJECT,'Благодарим за регистрацию');
                $modx->mail->address('to',$email);
                $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                $modx->mail->setHTML(true);
                
                if (!$modx->mail->send()) {
                  $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
                  return false;
                }
                $modx->mail->reset();
}